lograge-sql 0.4.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: edb09eb5b84cec3d09b2c25e4a33c6e8dd22d7d836f6532e5b4554e1ae31dfab
4
- data.tar.gz: 646b5d6635260962c7685532e2d574c74df016914a800491688e1be063fa0bba
3
+ metadata.gz: c5983447366cf1c996e3f4a6571646b4d54298df7e8c54417c02537c23b5132f
4
+ data.tar.gz: 48b16b073f9681e809eb3d1bcf3bb0f661ca2ae80a2a2958ef1d9ce495a1147e
5
5
  SHA512:
6
- metadata.gz: 0e99f15caca6f929045901ab7abf57431953e6d157d2423fa52ff781aa5abeb2f21224bce0304b6b127d8d5a50f2d368ad82780673a7b0db5223cbb56f3de1f6
7
- data.tar.gz: 8425ab339321fbcf3fad76c607ef2097d05a05527837e21daf6e307e67157bdef5eb573e42892d2cbbf53b83cf66729552b473540e29342a6fe6c1d4d95e857b
6
+ metadata.gz: 1d53aade24130437f98e9bd7d06c448be1364cff17c6dc18c44da939723145a938246c15407fdb8644447d2be31824d34f52cafc0260dc3528b4674cf1a888b9
7
+ data.tar.gz: 9a8b3bbaa5abd569373b97ffbda2f1c8b2493be8c35695935587ae7726ac7af35adeb99caa01e2a03e753e26777d077c8f561fed1fa7d357568771094dcd4928
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Lograge::Sql
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/lograge-sql.svg)](https://badge.fury.io/rb/lograge-sql) [<img src="https://travis-ci.org/iMacTia/lograge-sql.svg?branch=master" alt="version" />](https://travis-ci.org/iMacTia/lograge-sql)
3
+ [![Gem Version](https://badge.fury.io/rb/lograge-sql.svg)](https://badge.fury.io/rb/lograge-sql)
4
+ [![Build Status](https://travis-ci.org/iMacTia/lograge-sql.svg)](https://travis-ci.org/iMacTia/lograge-sql)
4
5
 
5
6
  Lograge::Sql is an extension to the famous [Lograge](https://github.com/roidrage/lograge) gem, which adds SQL queries to the Lograge Event and disable default ActiveRecord logging.
6
7
  This is extremely useful if you're using Lograge together with the ELK stack.
@@ -22,6 +23,12 @@ In order to enable SQL logging in your application, you'll simply need to add th
22
23
  require 'lograge/sql/extension'
23
24
  ```
24
25
 
26
+ By default, Lograge::Sql disables default logging on ActiveRecord. To preserve default logging, add this to your lograge initializer:
27
+
28
+ ```ruby
29
+ config.lograge_sql.keep_default_active_record_log = true
30
+ ```
31
+
25
32
  ## Customization
26
33
 
27
34
  By default, the format is a string concatenation of the query name, the query duration and the query itself joined by `\n` newline:
@@ -32,7 +39,7 @@ Object Load (0.42) SELECT "objects.*" FROM "objects"
32
39
  Associations Load (0.42) SELECT "associations.*" FROM "associations" WHERE "associations"."object_id" = "$1"
33
40
  ```
34
41
 
35
- However, having `Lograge::Formatters::Json.new`, the relevant output is
42
+ However, having `Lograge::Formatters::Json.new`, the relevant output is
36
43
 
37
44
  ```json
38
45
  {
@@ -59,6 +66,9 @@ Rails.application.configure do
59
66
  end
60
67
  ```
61
68
 
69
+ #### Thread-safety
70
+
71
+ [Depending on the web server in your project](https://github.com/steveklabnik/request_store#the-problem) you might benefit from improved thread-safety by adding [`request_store`](https://github.com/steveklabnik/request_store) to your Gemfile. It will be automatically picked up by `lograge-sql`.
62
72
 
63
73
  ## Contributing
64
74
 
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lograge
4
+ # Log subscriber to replace ActiveRecord's default one
5
+ class ActiveRecordLogSubscriber < ActiveSupport::LogSubscriber
6
+ # Every time there's an SQL query, stores it into the Thread.
7
+ # They'll later be access from the RequestLogSubscriber.
8
+ def sql(event)
9
+ ActiveRecord::LogSubscriber.runtime += event.duration
10
+ return if event.payload[:name] == 'SCHEMA'
11
+
12
+ Lograge::Sql.store[:lograge_sql_queries] ||= []
13
+ Lograge::Sql.store[:lograge_sql_queries] << Lograge::Sql.extract_event.call(event)
14
+ end
15
+ end
16
+ end
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'lograge/sql/version'
4
4
 
5
+ # Main Lograge module
5
6
  module Lograge
6
7
  # Main gem module
7
8
  module Sql
@@ -15,6 +16,23 @@ module Lograge
15
16
  def setup(config)
16
17
  Lograge::Sql.formatter = config.formatter || default_formatter
17
18
  Lograge::Sql.extract_event = config.extract_event || default_extract_event
19
+
20
+ # Disable existing ActiveRecord logging
21
+ unless config.keep_default_active_record_log
22
+ ActiveSupport::LogSubscriber.log_subscribers.each do |subscriber|
23
+ Lograge.unsubscribe(:active_record, subscriber) if subscriber.is_a?(ActiveRecord::LogSubscriber)
24
+ end
25
+ end
26
+
27
+ return unless defined?(Lograge::ActiveRecordLogSubscriber)
28
+
29
+ Lograge::ActiveRecordLogSubscriber.attach_to(:active_record)
30
+ end
31
+
32
+ # Gets the store, preferring RequestStore if the gem is found.
33
+ # @return [Hash, Thread] the RequestStore or the current Thread.
34
+ def store
35
+ defined?(RequestStore) ? RequestStore.store : Thread.current
18
36
  end
19
37
 
20
38
  private
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'lograge/active_record_log_subscriber'
4
+
3
5
  module Lograge
4
6
  module Sql
5
7
  # Module used to extend Lograge
@@ -11,10 +13,10 @@ module Lograge
11
13
 
12
14
  # Collects all SQL queries stored in the Thread during request processing
13
15
  def extract_sql_queries
14
- sql_queries = Thread.current[:lograge_sql_queries]
16
+ sql_queries = Lograge::Sql.store[:lograge_sql_queries]
15
17
  return {} unless sql_queries
16
18
 
17
- Thread.current[:lograge_sql_queries] = nil
19
+ Lograge::Sql.store[:lograge_sql_queries] = nil
18
20
  {
19
21
  sql_queries: Lograge::Sql.formatter.call(sql_queries),
20
22
  sql_queries_count: sql_queries.length
@@ -24,29 +26,8 @@ module Lograge
24
26
  end
25
27
  end
26
28
 
27
- module Lograge
28
- # Log subscriber to replace ActiveRecord's default one
29
- class ActiveRecordLogSubscriber < ActiveSupport::LogSubscriber
30
- # Every time there's an SQL query, stores it into the Thread.
31
- # They'll later be access from the RequestLogSubscriber.
32
- def sql(event)
33
- ActiveRecord::LogSubscriber.runtime += event.duration
34
- return if event.payload[:name] == 'SCHEMA'
35
-
36
- Thread.current[:lograge_sql_queries] ||= []
37
- Thread.current[:lograge_sql_queries] << Lograge::Sql.extract_event.call(event)
38
- end
39
- end
40
- end
41
-
42
29
  if defined?(Lograge::RequestLogSubscriber)
43
30
  Lograge::RequestLogSubscriber.prepend Lograge::Sql::Extension
44
31
  else
45
32
  Lograge::LogSubscribers::ActionController.prepend Lograge::Sql::Extension
46
33
  end
47
-
48
- ActiveSupport::LogSubscriber.log_subscribers.each do |subscriber|
49
- Lograge.unsubscribe(:active_record, subscriber) if subscriber.is_a?(ActiveRecord::LogSubscriber)
50
- end
51
-
52
- Lograge::ActiveRecordLogSubscriber.attach_to :active_record
@@ -10,8 +10,8 @@ module Lograge
10
10
  # To ensure that configuration is not nil when initialise Lograge::Sql.setup
11
11
  config.lograge_sql = ActiveSupport::OrderedOptions.new
12
12
 
13
- config.after_initialize do |app|
14
- Lograge::Sql.setup(app.config.lograge_sql)
13
+ config.to_prepare do
14
+ Lograge::Sql.setup(Rails.application.config.lograge_sql)
15
15
  end
16
16
  end
17
17
  end
@@ -3,6 +3,6 @@
3
3
  module Lograge
4
4
  module Sql
5
5
  # Gem version
6
- VERSION = '0.4.0'
6
+ VERSION = '1.3.1'
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lograge-sql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mattia Giuffrida
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-07 00:00:00.000000000 Z
11
+ date: 2020-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '4'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '6.0'
22
+ version: '7.0'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '4'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '6.0'
32
+ version: '7.0'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: lograge
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -44,76 +44,20 @@ dependencies:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0.4'
47
- - !ruby/object:Gem::Dependency
48
- name: bundler
49
- requirement: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: '1.0'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '1.0'
61
47
  - !ruby/object:Gem::Dependency
62
48
  name: rake
63
49
  requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '10.0'
68
- type: :development
69
- prerelease: false
70
- version_requirements: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '10.0'
75
- - !ruby/object:Gem::Dependency
76
- name: rspec
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '3.0'
82
- type: :development
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '3.0'
89
- - !ruby/object:Gem::Dependency
90
- name: rubocop
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- version: '0'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
50
  requirements:
100
51
  - - ">="
101
52
  - !ruby/object:Gem::Version
102
- version: '0'
103
- - !ruby/object:Gem::Dependency
104
- name: rubocop-performance
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- version: '0'
53
+ version: 12.3.3
110
54
  type: :development
111
55
  prerelease: false
112
56
  version_requirements: !ruby/object:Gem::Requirement
113
57
  requirements:
114
58
  - - ">="
115
59
  - !ruby/object:Gem::Version
116
- version: '0'
60
+ version: 12.3.3
117
61
  description: An extension for Lograge to log SQL queries
118
62
  email:
119
63
  - giuffrida.mattia@gmail.com
@@ -121,22 +65,13 @@ executables: []
121
65
  extensions: []
122
66
  extra_rdoc_files: []
123
67
  files:
124
- - ".gitignore"
125
- - ".rspec"
126
- - ".rubocop.yml"
127
- - ".travis.yml"
128
- - Gemfile
129
68
  - README.md
130
69
  - Rakefile
131
- - bin/console
132
- - bin/setup
133
- - gemfiles/lograge10.gemfile
134
- - gemfiles/lograge11.gemfile
70
+ - lib/lograge/active_record_log_subscriber.rb
135
71
  - lib/lograge/sql.rb
136
72
  - lib/lograge/sql/extension.rb
137
73
  - lib/lograge/sql/railtie.rb
138
74
  - lib/lograge/sql/version.rb
139
- - lograge-sql.gemspec
140
75
  homepage: https://github.com/iMacTia/lograge-sql
141
76
  licenses:
142
77
  - MIT
@@ -149,14 +84,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
149
84
  requirements:
150
85
  - - ">="
151
86
  - !ruby/object:Gem::Version
152
- version: '0'
87
+ version: 2.4.0
153
88
  required_rubygems_version: !ruby/object:Gem::Requirement
154
89
  requirements:
155
90
  - - ">="
156
91
  - !ruby/object:Gem::Version
157
92
  version: '0'
158
93
  requirements: []
159
- rubygems_version: 3.0.3
94
+ rubygems_version: 3.1.4
160
95
  signing_key:
161
96
  specification_version: 4
162
97
  summary: An extension for Lograge to log SQL queries
data/.gitignore DELETED
@@ -1,11 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- .idea
11
- *.gem
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --format documentation
2
- --color
@@ -1,20 +0,0 @@
1
- require:
2
- - rubocop-performance
3
-
4
- AllCops:
5
- DisplayCopNames: true
6
- DisplayStyleGuide: true
7
- TargetRubyVersion: 2.3
8
-
9
- Metrics/BlockLength:
10
- Exclude:
11
- - spec/**/*.rb
12
-
13
- Metrics/LineLength:
14
- Max: 120
15
- Exclude:
16
- - spec/**/*.rb
17
-
18
- Style/Documentation:
19
- Exclude:
20
- - 'spec/**/*'
@@ -1,23 +0,0 @@
1
- language: ruby
2
- cache: bundler
3
- rvm:
4
- - 2.3
5
- - 2.4
6
- - 2.5
7
- - 2.6
8
- before_install:
9
- - gem uninstall -v '>= 2' -i $(rvm gemdir)@global -ax bundler || true
10
- - gem install bundler -v '~> 1.17'
11
- gemfile:
12
- - gemfiles/lograge10.gemfile
13
- - gemfiles/lograge11.gemfile
14
- deploy:
15
- provider: rubygems
16
- api_key:
17
- secure: xlc4BM+5ljo4cO2FC71KbhbVGVYd3NMxhZPat/Y37vo6b5/I01D+Z+K84azMvhIZa+O17cA56FGqT6P0XYfcjZVnYzixpyRlbffKBGNPcIFj2UklWk2BDOojezHPEQnbR2f0jE2+8jHtAb9qyoBTbTlvsW3+svd76+53TxMW1PgGF9+1xdtlEumF1q+IYRL+5TzDLk9GyQ+3RmVd9KBVvQIxxUpn4COJohmQWnv98ZzluX4I/QUt3k4o+etUINPewyg3S+VNP0u+K9HGkY3TL8OpUbCS3Syr3OydwzgpXIBlW+kWVez5/qZn3pd6oSpNEUF9Mh3NhaVsDacFSh6XgGNgww+isazyAROsledK2GsEOH0Hi6gpia/Ny5cD5TFAiGshMcUIb2K4roI3AW9kJ2e59hoC+QvPy64IybO/dhaKcxwX8F4qq3Fk/8EzQV5eOTq0Iai5aYNJaGZUqHV/X4DiMwDk/JoyQVYE+2CMF/PlZIFV4LuegDArVXYh5w3Qo9vYDfNp7Hfv0w5XgpEqAhk+Dabl+BlVhzSM/Cf28i6OVAhLURnGMNKhQEi3/4EusaM/cOQlM5QKWweAPfOwDKMFUoj9+Rtr0FfSyNzerG9dlGuzEKOlqq+XuOQ7RfDUV4+bn2PwbYo5XwMKz1Y8FWUZTz6l14miaw8Yq7U0GU8=
18
- gem: lograge-sql
19
- on:
20
- tags: true
21
- repo: iMacTia/lograge-sql
22
- rvm: 2.6
23
-
data/Gemfile DELETED
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- # Specify your gem's dependencies in lograge-sql.gemspec
6
- gemspec
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'bundler/setup'
5
- require 'lograge/sql'
6
-
7
- # You can add fixtures and/or initialization code here to make experimenting
8
- # with your gem easier. You can also use a different console, if you like.
9
-
10
- # (If you use this, don't forget to add pry to your Gemfile!)
11
- # require "pry"
12
- # Pry.start
13
-
14
- require 'irb'
15
- IRB.start
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- gem 'lograge', '~> 0.10.0'
6
-
7
- gemspec path: '../'
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- gem 'lograge', '~> 0.11.0'
6
-
7
- gemspec path: '../'
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- lib = File.expand_path('lib', __dir__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'lograge/sql/version'
6
-
7
- Gem::Specification.new do |spec|
8
- spec.name = 'lograge-sql'
9
- spec.version = Lograge::Sql::VERSION
10
- spec.authors = ['Mattia Giuffrida']
11
- spec.email = ['giuffrida.mattia@gmail.com']
12
-
13
- spec.summary = 'An extension for Lograge to log SQL queries'
14
- spec.description = 'An extension for Lograge to log SQL queries'
15
- spec.homepage = 'https://github.com/iMacTia/lograge-sql'
16
- spec.license = 'MIT'
17
-
18
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
- spec.bindir = 'exe'
20
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
- spec.require_paths = ['lib']
22
-
23
- spec.add_runtime_dependency 'activerecord', '>= 4', '< 6.0'
24
- spec.add_runtime_dependency 'lograge', '~> 0.4'
25
-
26
- spec.add_development_dependency 'bundler', '~> 1.0'
27
- spec.add_development_dependency 'rake', '~> 10.0'
28
- spec.add_development_dependency 'rspec', '~> 3.0'
29
- spec.add_development_dependency 'rubocop'
30
- spec.add_development_dependency 'rubocop-performance'
31
- end