lograge-sql 0.2.0 → 1.2.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 +4 -4
- data/.rubocop.yml +22 -0
- data/.travis.yml +31 -2
- data/Gemfile +2 -0
- data/README.md +49 -1
- data/Rakefile +3 -1
- data/bin/console +1 -0
- data/gemfiles/lograge10.gemfile +7 -0
- data/gemfiles/lograge11.gemfile +7 -0
- data/lib/lograge/sql.rb +45 -0
- data/lib/lograge/sql/extension.rb +18 -9
- data/lib/lograge/sql/railtie.rb +18 -0
- data/lib/lograge/sql/version.rb +4 -1
- data/lograge-sql.gemspec +9 -6
- metadata +52 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3726273a2b54f66be4bbdab30b8b2166d9d45f00d2e27b7e0f217aab51befe14
|
4
|
+
data.tar.gz: b35279e56a149def5f8ac6db9d564bc27e264971b15bfe064d63e87a8398ce26
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d171a9e1a9f2152cc4e3d22434334849f3df4aca8131fb625967ecd79d390a3cb555ce14f6839023221dee85415be8c5068c46492b602d22cd28f69a4fe1309
|
7
|
+
data.tar.gz: dd425accb219b4342a58a1a7275ba032c11e3d8caa04b6342ca7db8a8ddf8ec3552097cca95d4e4d3a6b0c8c9240b519dfb3ab6285a3b2ebfeaf14147c816fed
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require:
|
2
|
+
- rubocop-performance
|
3
|
+
|
4
|
+
AllCops:
|
5
|
+
DisplayCopNames: true
|
6
|
+
DisplayStyleGuide: true
|
7
|
+
TargetRubyVersion: 2.4
|
8
|
+
Exclude:
|
9
|
+
- gemfiles/vendor/bundle/**/*
|
10
|
+
|
11
|
+
Metrics/BlockLength:
|
12
|
+
Exclude:
|
13
|
+
- spec/**/*.rb
|
14
|
+
|
15
|
+
Metrics/LineLength:
|
16
|
+
Max: 120
|
17
|
+
Exclude:
|
18
|
+
- spec/**/*.rb
|
19
|
+
|
20
|
+
Style/Documentation:
|
21
|
+
Exclude:
|
22
|
+
- 'spec/**/*'
|
data/.travis.yml
CHANGED
@@ -1,4 +1,33 @@
|
|
1
1
|
language: ruby
|
2
|
+
cache: bundler
|
2
3
|
rvm:
|
3
|
-
- 2.
|
4
|
-
|
4
|
+
- 2.4
|
5
|
+
- 2.5
|
6
|
+
- 2.6
|
7
|
+
- ruby-head
|
8
|
+
gemfile:
|
9
|
+
- gemfiles/lograge10.gemfile
|
10
|
+
- gemfiles/lograge11.gemfile
|
11
|
+
before_install:
|
12
|
+
- gem update --system
|
13
|
+
- gem install bundler
|
14
|
+
jobs:
|
15
|
+
include:
|
16
|
+
- stage: linting
|
17
|
+
rvm: 2.6
|
18
|
+
gemfile: gemfiles/lograge11.gemfile # Only run on 1 gemfile
|
19
|
+
install: true # Do not bundle install
|
20
|
+
script: gem install rubocop rubocop-performance --no-document && rubocop
|
21
|
+
stages:
|
22
|
+
- linting
|
23
|
+
- test
|
24
|
+
deploy:
|
25
|
+
provider: rubygems
|
26
|
+
api_key:
|
27
|
+
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=
|
28
|
+
gem: lograge-sql
|
29
|
+
on:
|
30
|
+
tags: true
|
31
|
+
repo: iMacTia/lograge-sql
|
32
|
+
rvm: 2.6
|
33
|
+
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Lograge::Sql
|
2
2
|
|
3
|
-
[](https://badge.fury.io/rb/lograge-sql)
|
3
|
+
[](https://badge.fury.io/rb/lograge-sql)
|
4
|
+
[](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,53 @@ 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
|
+
|
32
|
+
## Customization
|
33
|
+
|
34
|
+
By default, the format is a string concatenation of the query name, the query duration and the query itself joined by `\n` newline:
|
35
|
+
|
36
|
+
```
|
37
|
+
method=GET path=/mypath format=html ...
|
38
|
+
Object Load (0.42) SELECT "objects.*" FROM "objects"
|
39
|
+
Associations Load (0.42) SELECT "associations.*" FROM "associations" WHERE "associations"."object_id" = "$1"
|
40
|
+
```
|
41
|
+
|
42
|
+
However, having `Lograge::Formatters::Json.new`, the relevant output is
|
43
|
+
|
44
|
+
```json
|
45
|
+
{
|
46
|
+
"sql_queries": "name1 ({duration1}) {query1}\nname2 ({duration2}) query2 ...",
|
47
|
+
"sql_queries_count": 3
|
48
|
+
}
|
49
|
+
```
|
50
|
+
|
51
|
+
To customize the output:
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
# config/initializers/lograge.rb
|
55
|
+
Rails.application.configure do
|
56
|
+
|
57
|
+
# Instead of extracting event as Strings, extract as Hash. You can also extract
|
58
|
+
# additional fields to add to the formatter
|
59
|
+
config.lograge_sql.extract_event = Proc.new do |event|
|
60
|
+
{ name: event.payload[:name], duration: event.duration.to_f.round(2), sql: event.payload[:sql] }
|
61
|
+
end
|
62
|
+
# Format the array of extracted events
|
63
|
+
config.lograge_sql.formatter = Proc.new do |sql_queries|
|
64
|
+
sql_queries
|
65
|
+
end
|
66
|
+
end
|
67
|
+
```
|
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`.
|
72
|
+
|
25
73
|
## Contributing
|
26
74
|
|
27
75
|
Bug reports and pull requests are welcome on GitHub at https://github.com/iMacTia/lograge-sql.
|
data/Rakefile
CHANGED
data/bin/console
CHANGED
data/lib/lograge/sql.rb
CHANGED
@@ -1,7 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'lograge/sql/version'
|
2
4
|
|
3
5
|
module Lograge
|
6
|
+
# Main gem module
|
4
7
|
module Sql
|
8
|
+
class << self
|
9
|
+
# Format SQL log
|
10
|
+
attr_accessor :formatter
|
11
|
+
# Extract information from SQL event
|
12
|
+
attr_accessor :extract_event
|
13
|
+
|
14
|
+
# Initialise configuration with fallback to default values
|
15
|
+
def setup(config)
|
16
|
+
Lograge::Sql.formatter = config.formatter || default_formatter
|
17
|
+
Lograge::Sql.extract_event = config.extract_event || default_extract_event
|
18
|
+
|
19
|
+
return if config.keep_default_active_record_log
|
20
|
+
|
21
|
+
# Disable existing ActiveRecord logging
|
22
|
+
ActiveSupport::LogSubscriber.log_subscribers.each do |subscriber|
|
23
|
+
Lograge.unsubscribe(:active_record, subscriber) if subscriber.is_a?(ActiveRecord::LogSubscriber)
|
24
|
+
end
|
25
|
+
end
|
5
26
|
|
27
|
+
def store
|
28
|
+
defined?(RequestStore) ? RequestStore.store : Thread.current
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
# By default, the output is a concatenated string of all extracted events
|
34
|
+
def default_formatter
|
35
|
+
proc do |sql_queries|
|
36
|
+
%('#{sql_queries.join("\n")}')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# By default, only extract values required for the default_formatter and
|
41
|
+
# already convert to a string
|
42
|
+
def default_extract_event
|
43
|
+
proc do |event|
|
44
|
+
"#{event.payload[:name]} (#{event.duration.to_f.round(2)}) #{event.payload[:sql]}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
6
48
|
end
|
7
49
|
end
|
50
|
+
|
51
|
+
# Rails specific configuration
|
52
|
+
require 'lograge/sql/railtie' if defined?(Rails)
|
@@ -1,17 +1,22 @@
|
|
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 =
|
14
|
+
sql_queries = Lograge::Sql.store[:lograge_sql_queries]
|
10
15
|
return {} unless sql_queries
|
11
16
|
|
12
|
-
|
17
|
+
Lograge::Sql.store[:lograge_sql_queries] = nil
|
13
18
|
{
|
14
|
-
sql_queries:
|
19
|
+
sql_queries: Lograge::Sql.formatter.call(sql_queries),
|
15
20
|
sql_queries_count: sql_queries.length
|
16
21
|
}
|
17
22
|
end
|
@@ -20,20 +25,24 @@ 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
|
-
|
28
|
-
|
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
|
34
|
-
|
35
|
-
|
36
|
-
Lograge.
|
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
47
|
|
39
48
|
Lograge::ActiveRecordLogSubscriber.attach_to :active_record
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/railtie'
|
4
|
+
require 'active_support/ordered_options'
|
5
|
+
|
6
|
+
module Lograge
|
7
|
+
module Sql
|
8
|
+
# Railtie to automatically setup in Rails
|
9
|
+
class Railtie < Rails::Railtie
|
10
|
+
# To ensure that configuration is not nil when initialise Lograge::Sql.setup
|
11
|
+
config.lograge_sql = ActiveSupport::OrderedOptions.new
|
12
|
+
|
13
|
+
config.after_initialize do |app|
|
14
|
+
Lograge::Sql.setup(app.config.lograge_sql)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/lograge/sql/version.rb
CHANGED
data/lograge-sql.gemspec
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require 'lograge/sql/version'
|
5
6
|
|
@@ -9,8 +10,8 @@ Gem::Specification.new do |spec|
|
|
9
10
|
spec.authors = ['Mattia Giuffrida']
|
10
11
|
spec.email = ['giuffrida.mattia@gmail.com']
|
11
12
|
|
12
|
-
spec.summary =
|
13
|
-
spec.description =
|
13
|
+
spec.summary = 'An extension for Lograge to log SQL queries'
|
14
|
+
spec.description = 'An extension for Lograge to log SQL queries'
|
14
15
|
spec.homepage = 'https://github.com/iMacTia/lograge-sql'
|
15
16
|
spec.license = 'MIT'
|
16
17
|
|
@@ -19,10 +20,12 @@ Gem::Specification.new do |spec|
|
|
19
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
21
|
spec.require_paths = ['lib']
|
21
22
|
|
23
|
+
spec.add_runtime_dependency 'activerecord', '>= 4', '< 7.0'
|
22
24
|
spec.add_runtime_dependency 'lograge', '~> 0.4'
|
23
|
-
spec.add_runtime_dependency 'activerecord', '>= 4', '< 6.0'
|
24
25
|
|
25
|
-
spec.add_development_dependency 'bundler', '~>
|
26
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
26
27
|
spec.add_development_dependency 'rake', '~> 10.0'
|
27
28
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
29
|
+
spec.add_development_dependency 'rubocop'
|
30
|
+
spec.add_development_dependency 'rubocop-performance'
|
28
31
|
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:
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mattia Giuffrida
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-10 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: '
|
22
|
+
version: '7.0'
|
37
23
|
type: :runtime
|
38
24
|
prerelease: false
|
39
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -43,21 +29,35 @@ dependencies:
|
|
43
29
|
version: '4'
|
44
30
|
- - "<"
|
45
31
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
32
|
+
version: '7.0'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: lograge
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0.4'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0.4'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
53
|
+
version: '2.0'
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
60
|
+
version: '2.0'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: rake
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,6 +86,34 @@ dependencies:
|
|
86
86
|
- - "~>"
|
87
87
|
- !ruby/object:Gem::Version
|
88
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
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !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'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
89
117
|
description: An extension for Lograge to log SQL queries
|
90
118
|
email:
|
91
119
|
- giuffrida.mattia@gmail.com
|
@@ -95,14 +123,18 @@ extra_rdoc_files: []
|
|
95
123
|
files:
|
96
124
|
- ".gitignore"
|
97
125
|
- ".rspec"
|
126
|
+
- ".rubocop.yml"
|
98
127
|
- ".travis.yml"
|
99
128
|
- Gemfile
|
100
129
|
- README.md
|
101
130
|
- Rakefile
|
102
131
|
- bin/console
|
103
132
|
- bin/setup
|
133
|
+
- gemfiles/lograge10.gemfile
|
134
|
+
- gemfiles/lograge11.gemfile
|
104
135
|
- lib/lograge/sql.rb
|
105
136
|
- lib/lograge/sql/extension.rb
|
137
|
+
- lib/lograge/sql/railtie.rb
|
106
138
|
- lib/lograge/sql/version.rb
|
107
139
|
- lograge-sql.gemspec
|
108
140
|
homepage: https://github.com/iMacTia/lograge-sql
|