lograge-sql 0.3.0 → 1.3.0

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: 6c781f369bfdc3b5ee7fa14fe03146c929e67a90b3558933e88d520d1908324e
4
- data.tar.gz: c498398d6d5089d9f8362e1f0ab0fec680cfdd80e397195ce75ce6a6860ab951
3
+ metadata.gz: 2a1b24c2960cc4eecd3b3ca23807587a396e8b483c76e916b8f2a50b600babe2
4
+ data.tar.gz: 5e33f26703504065a0838c5bb97f9bb45705a7ffce6317d2d239f46967b9fe79
5
5
  SHA512:
6
- metadata.gz: 265b36d72f2b0a9f6fcdd0f4af6cd07e04088df14be819e3499351230ff314cec3efa07443a2d24d7b0136df9389fb16c0041fae73b1930b01eaa4466c6c8254
7
- data.tar.gz: 623aeb11fcb1b9633b72b54e5d001d84ac558f2fea2fee1fdb7eb43e662e0b756ab2dfdfc99abb55749a657844b51caec94ea8609e2a4122d7cd503289a50d9a
6
+ metadata.gz: ee641c7c4988772cf1db3fb37639072e53c4cbe2a6a0b2823637e54f39a5ecba62ab1a52017f0a9418c61091af7419116ff36273f8363813090a45f65bea3a13
7
+ data.tar.gz: 176fd786ad019f0cf125bbe9a77acbce82722d43f6df0421eeeb0d9b719116e2d0aa68f8a8589e5ddcbc76d32bba183c7bb6d0342ffda993d4719d8d703af7d5
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
 
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
6
- task :default => :spec
8
+ task default: :spec
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'lograge/sql/version'
2
4
 
5
+ # Main Lograge module
3
6
  module Lograge
7
+ # Main gem module
4
8
  module Sql
5
-
6
9
  class << self
7
-
8
10
  # Format SQL log
9
11
  attr_accessor :formatter
10
12
  # Extract information from SQL event
@@ -14,27 +16,40 @@ module Lograge
14
16
  def setup(config)
15
17
  Lograge::Sql.formatter = config.formatter || default_formatter
16
18
  Lograge::Sql.extract_event = config.extract_event || default_extract_event
19
+
20
+ return if config.keep_default_active_record_log
21
+
22
+ # Disable existing ActiveRecord logging
23
+ ActiveSupport::LogSubscriber.log_subscribers.each do |subscriber|
24
+ Lograge.unsubscribe(:active_record, subscriber) if subscriber.is_a?(ActiveRecord::LogSubscriber)
25
+ end
26
+
27
+ Lograge::ActiveRecordLogSubscriber.attach_to :active_record
28
+ end
29
+
30
+ # Gets the store, preferring RequestStore if the gem is found.
31
+ # @return [Hash, Thread] the RequestStore or the current Thread.
32
+ def store
33
+ defined?(RequestStore) ? RequestStore.store : Thread.current
17
34
  end
18
35
 
19
36
  private
20
37
 
21
38
  # By default, the output is a concatenated string of all extracted events
22
39
  def default_formatter
23
- Proc.new do |sql_queries|
40
+ proc do |sql_queries|
24
41
  %('#{sql_queries.join("\n")}')
25
42
  end
26
43
  end
27
44
 
28
- # By default, only extract values required for the default_formatter and
45
+ # By default, only extract values required for the default_formatter and
29
46
  # already convert to a string
30
47
  def default_extract_event
31
- Proc.new do |event|
48
+ proc do |event|
32
49
  "#{event.payload[:name]} (#{event.duration.to_f.round(2)}) #{event.payload[:sql]}"
33
50
  end
34
51
  end
35
-
36
52
  end
37
-
38
53
  end
39
54
  end
40
55
 
@@ -1,15 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Lograge
2
4
  module Sql
5
+ # Module used to extend Lograge
3
6
  module Extension
7
+ # Overrides `Lograge::RequestLogSubscriber#extract_request` do add SQL queries
4
8
  def extract_request(event, payload)
5
9
  super.merge!(extract_sql_queries)
6
10
  end
7
11
 
12
+ # Collects all SQL queries stored in the Thread during request processing
8
13
  def extract_sql_queries
9
- sql_queries = Thread.current[:lograge_sql_queries]
14
+ sql_queries = Lograge::Sql.store[:lograge_sql_queries]
10
15
  return {} unless sql_queries
11
16
 
12
- Thread.current[:lograge_sql_queries] = nil
17
+ Lograge::Sql.store[:lograge_sql_queries] = nil
13
18
  {
14
19
  sql_queries: Lograge::Sql.formatter.call(sql_queries),
15
20
  sql_queries_count: sql_queries.length
@@ -20,20 +25,22 @@ module Lograge
20
25
  end
21
26
 
22
27
  module Lograge
28
+ # Log subscriber to replace ActiveRecord's default one
23
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.
24
32
  def sql(event)
25
33
  ActiveRecord::LogSubscriber.runtime += event.duration
26
34
  return if event.payload[:name] == 'SCHEMA'
27
- Thread.current[:lograge_sql_queries] ||= []
28
- Thread.current[:lograge_sql_queries] << Lograge::Sql.extract_event.call(event)
35
+
36
+ Lograge::Sql.store[:lograge_sql_queries] ||= []
37
+ Lograge::Sql.store[:lograge_sql_queries] << Lograge::Sql.extract_event.call(event)
29
38
  end
30
39
  end
31
40
  end
32
41
 
33
- Lograge::RequestLogSubscriber.prepend Lograge::Sql::Extension
34
-
35
- ActiveSupport::LogSubscriber.log_subscribers.each do |subscriber|
36
- Lograge.unsubscribe(:active_record, subscriber) if subscriber.is_a?(ActiveRecord::LogSubscriber)
42
+ if defined?(Lograge::RequestLogSubscriber)
43
+ Lograge::RequestLogSubscriber.prepend Lograge::Sql::Extension
44
+ else
45
+ Lograge::LogSubscribers::ActionController.prepend Lograge::Sql::Extension
37
46
  end
38
-
39
- Lograge::ActiveRecordLogSubscriber.attach_to :active_record
@@ -1,15 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rails/railtie'
2
4
  require 'active_support/ordered_options'
3
5
 
4
6
  module Lograge
5
7
  module Sql
8
+ # Railtie to automatically setup in Rails
6
9
  class Railtie < Rails::Railtie
7
10
  # To ensure that configuration is not nil when initialise Lograge::Sql.setup
8
11
  config.lograge_sql = ActiveSupport::OrderedOptions.new
9
12
 
10
- config.after_initialize do |app|
11
- Lograge::Sql.setup(app.config.lograge_sql)
13
+ config.to_prepare do
14
+ Lograge::Sql.setup(Rails.application.config.lograge_sql)
12
15
  end
13
16
  end
14
17
  end
15
- end
18
+ end
@@ -1,5 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Lograge
2
4
  module Sql
3
- VERSION = '0.3.0'
5
+ # Gem version
6
+ VERSION = '1.3.0'
4
7
  end
5
8
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lograge-sql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.3.0
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: 2018-11-07 00:00:00.000000000 Z
11
+ date: 2020-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: lograge
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '0.4'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '0.4'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: activerecord
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -33,7 +19,7 @@ dependencies:
33
19
  version: '4'
34
20
  - - "<"
35
21
  - !ruby/object:Gem::Version
36
- version: '6.0'
22
+ version: '7.0'
37
23
  type: :runtime
38
24
  prerelease: false
39
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -43,49 +29,35 @@ dependencies:
43
29
  version: '4'
44
30
  - - "<"
45
31
  - !ruby/object:Gem::Version
46
- version: '6.0'
32
+ version: '7.0'
47
33
  - !ruby/object:Gem::Dependency
48
- name: bundler
34
+ name: lograge
49
35
  requirement: !ruby/object:Gem::Requirement
50
36
  requirements:
51
37
  - - "~>"
52
38
  - !ruby/object:Gem::Version
53
- version: '1.0'
54
- type: :development
39
+ version: '0.4'
40
+ type: :runtime
55
41
  prerelease: false
56
42
  version_requirements: !ruby/object:Gem::Requirement
57
43
  requirements:
58
44
  - - "~>"
59
45
  - !ruby/object:Gem::Version
60
- version: '1.0'
46
+ version: '0.4'
61
47
  - !ruby/object:Gem::Dependency
62
48
  name: rake
63
49
  requirement: !ruby/object:Gem::Requirement
64
50
  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
- - - "~>"
51
+ - - ">="
80
52
  - !ruby/object:Gem::Version
81
- version: '3.0'
53
+ version: 12.3.3
82
54
  type: :development
83
55
  prerelease: false
84
56
  version_requirements: !ruby/object:Gem::Requirement
85
57
  requirements:
86
- - - "~>"
58
+ - - ">="
87
59
  - !ruby/object:Gem::Version
88
- version: '3.0'
60
+ version: 12.3.3
89
61
  description: An extension for Lograge to log SQL queries
90
62
  email:
91
63
  - giuffrida.mattia@gmail.com
@@ -93,19 +65,12 @@ executables: []
93
65
  extensions: []
94
66
  extra_rdoc_files: []
95
67
  files:
96
- - ".gitignore"
97
- - ".rspec"
98
- - ".travis.yml"
99
- - Gemfile
100
68
  - README.md
101
69
  - Rakefile
102
- - bin/console
103
- - bin/setup
104
70
  - lib/lograge/sql.rb
105
71
  - lib/lograge/sql/extension.rb
106
72
  - lib/lograge/sql/railtie.rb
107
73
  - lib/lograge/sql/version.rb
108
- - lograge-sql.gemspec
109
74
  homepage: https://github.com/iMacTia/lograge-sql
110
75
  licenses:
111
76
  - MIT
@@ -118,15 +83,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
118
83
  requirements:
119
84
  - - ">="
120
85
  - !ruby/object:Gem::Version
121
- version: '0'
86
+ version: 2.4.0
122
87
  required_rubygems_version: !ruby/object:Gem::Requirement
123
88
  requirements:
124
89
  - - ">="
125
90
  - !ruby/object:Gem::Version
126
91
  version: '0'
127
92
  requirements: []
128
- rubyforge_project:
129
- rubygems_version: 2.7.8
93
+ rubygems_version: 3.1.4
130
94
  signing_key:
131
95
  specification_version: 4
132
96
  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,14 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.5
4
- before_install: gem install bundler -v 1.16.2
5
- deploy:
6
- provider: rubygems
7
- api_key:
8
- 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=
9
- gem: lograge-sql
10
- on:
11
- tags: true
12
- repo: iMacTia/lograge-sql
13
- rvm: 2.5
14
-
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in lograge-sql.gemspec
4
- gemspec
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'bundler/setup'
4
- require 'lograge/sql'
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require 'irb'
14
- 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,28 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'lograge/sql/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = 'lograge-sql'
8
- spec.version = Lograge::Sql::VERSION
9
- spec.authors = ['Mattia Giuffrida']
10
- spec.email = ['giuffrida.mattia@gmail.com']
11
-
12
- spec.summary = %q{An extension for Lograge to log SQL queries}
13
- spec.description = %q{An extension for Lograge to log SQL queries}
14
- spec.homepage = 'https://github.com/iMacTia/lograge-sql'
15
- spec.license = 'MIT'
16
-
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = 'exe'
19
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ['lib']
21
-
22
- spec.add_runtime_dependency 'lograge', '~> 0.4'
23
- spec.add_runtime_dependency 'activerecord', '>= 4', '< 6.0'
24
-
25
- spec.add_development_dependency 'bundler', '~> 1.0'
26
- spec.add_development_dependency 'rake', '~> 10.0'
27
- spec.add_development_dependency 'rspec', '~> 3.0'
28
- end