active_record_query_trace 1.8 → 1.8.2
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/lib/active_record_query_trace/version.rb +1 -1
- data/lib/active_record_query_trace.rb +49 -56
- metadata +51 -36
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ffcc5119bc05b3f37ad664c99bd5fbfa8e8e4d9d014ef6684381c26df844d9df
|
|
4
|
+
data.tar.gz: 0fe883ba8442ad46737b90fef82100f82875f76fc023112548c997ae8451d9c4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 91681694fdddf26183798f31d9ef6d78a55ed4aeae99824271dc198a3aaf7b4fea7b5f2de883896b3b9840e2d643bfee6052e74ae125c852b22ed035855420f3
|
|
7
|
+
data.tar.gz: 874d7d710c22f18bcb38d3b13509979b4ad912aadc11e3c0889b223f13752c4c2f3d1e275575e8598d1ae0ea82d2fbf32fbe7f0beb6d37491d05b74801e41930
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'active_record/log_subscriber'
|
|
4
|
+
require_relative 'active_record_query_trace/version'
|
|
4
5
|
|
|
5
6
|
module ActiveRecordQueryTrace
|
|
6
7
|
INDENTATION = ' ' * 6
|
|
@@ -26,14 +27,9 @@ module ActiveRecordQueryTrace
|
|
|
26
27
|
}.freeze
|
|
27
28
|
|
|
28
29
|
class << self
|
|
29
|
-
attr_accessor :enabled
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
attr_accessor :ignore_cached_queries
|
|
33
|
-
attr_accessor :colorize
|
|
34
|
-
attr_accessor :query_type
|
|
35
|
-
attr_accessor :suppress_logging_of_db_reads
|
|
36
|
-
attr_reader :backtrace_cleaner
|
|
30
|
+
attr_accessor :enabled, :lines, :ignore_cached_queries, :colorize, :query_type, :suppress_logging_of_db_reads
|
|
31
|
+
attr_writer :default_cleaner
|
|
32
|
+
attr_reader :backtrace_cleaner, :level
|
|
37
33
|
|
|
38
34
|
def backtrace_cleaner=(cleaner)
|
|
39
35
|
@backtrace_cleaner =
|
|
@@ -43,6 +39,42 @@ module ActiveRecordQueryTrace
|
|
|
43
39
|
proc { |trace| cleaner.clean(trace) }
|
|
44
40
|
end
|
|
45
41
|
end
|
|
42
|
+
|
|
43
|
+
# When changing the level we need to reset the backtrace cleaner used
|
|
44
|
+
def level=(level)
|
|
45
|
+
@level = level
|
|
46
|
+
@default_cleaner = nil
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def default_cleaner
|
|
50
|
+
@default_cleaner ||= setup_backtrace_cleaner
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# The following code creates a brand new BacktraceCleaner just for the use of this Gem
|
|
54
|
+
# avoiding the dealing with Rails.backtrace_cleaner
|
|
55
|
+
def setup_backtrace_cleaner
|
|
56
|
+
cleaner = Rails::BacktraceCleaner.new
|
|
57
|
+
remove_filters_and_silencers cleaner
|
|
58
|
+
cleaner.instance_variable_set :@root, Rails.root.to_s if cleaner.instance_variable_get(:@root) == '/'
|
|
59
|
+
case ActiveRecordQueryTrace.level
|
|
60
|
+
when :app
|
|
61
|
+
cleaner.add_silencer { |line| line !~ rails_root_regexp }
|
|
62
|
+
when :rails
|
|
63
|
+
cleaner.add_silencer { |line| line =~ rails_root_regexp }
|
|
64
|
+
end
|
|
65
|
+
cleaner
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def remove_filters_and_silencers(cleaner)
|
|
69
|
+
cleaner.remove_filters!
|
|
70
|
+
cleaner.remove_silencers!
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# This cannot be set in a constant as Rails.root is not yet available when
|
|
74
|
+
# this file is loaded.
|
|
75
|
+
def rails_root_regexp
|
|
76
|
+
@rails_root_regexp ||= %r{#{Regexp.escape(Rails.root.to_s)}(?!/vendor)}
|
|
77
|
+
end
|
|
46
78
|
end
|
|
47
79
|
|
|
48
80
|
class CustomLogSubscriber < ActiveRecord::LogSubscriber # rubocop:disable Metrics/ClassLength
|
|
@@ -60,13 +92,12 @@ module ActiveRecordQueryTrace
|
|
|
60
92
|
def sql(event)
|
|
61
93
|
payload = event.payload
|
|
62
94
|
return unless display_backtrace?(payload)
|
|
63
|
-
|
|
64
|
-
setup_backtrace_cleaner unless ActiveRecordQueryTrace.backtrace_cleaner
|
|
65
|
-
|
|
66
95
|
trace = fully_formatted_trace # Memoize
|
|
67
|
-
debug(trace)
|
|
96
|
+
debug(trace) if trace.present?
|
|
68
97
|
end
|
|
69
98
|
|
|
99
|
+
delegate :default_cleaner, to: ActiveRecordQueryTrace
|
|
100
|
+
|
|
70
101
|
attach_to :active_record
|
|
71
102
|
|
|
72
103
|
private
|
|
@@ -93,7 +124,7 @@ module ActiveRecordQueryTrace
|
|
|
93
124
|
when :write then !db_read_query?(payload)
|
|
94
125
|
else
|
|
95
126
|
raise 'Invalid ActiveRecordQueryTrace.query_type value ' \
|
|
96
|
-
|
|
127
|
+
"#{ActiveRecordQueryTrace.level}. Should be :all, :read, or :write."
|
|
97
128
|
end
|
|
98
129
|
end
|
|
99
130
|
|
|
@@ -104,7 +135,7 @@ module ActiveRecordQueryTrace
|
|
|
104
135
|
def fully_formatted_trace
|
|
105
136
|
cleaned_trace = clean_trace(original_trace)
|
|
106
137
|
return if cleaned_trace.blank?
|
|
107
|
-
stringified_trace = BACKTRACE_PREFIX + lines_to_display(cleaned_trace).join("\n"
|
|
138
|
+
stringified_trace = BACKTRACE_PREFIX + lines_to_display(cleaned_trace).join("\n#{INDENTATION}")
|
|
108
139
|
colorize_text(stringified_trace)
|
|
109
140
|
end
|
|
110
141
|
|
|
@@ -127,7 +158,7 @@ module ActiveRecordQueryTrace
|
|
|
127
158
|
when :full
|
|
128
159
|
trace = full_trace
|
|
129
160
|
when :app, :rails
|
|
130
|
-
trace =
|
|
161
|
+
trace = default_cleaner.clean(full_trace)
|
|
131
162
|
when :custom
|
|
132
163
|
unless ActiveRecordQueryTrace.backtrace_cleaner
|
|
133
164
|
raise 'Configure your backtrace cleaner first via ActiveRecordQueryTrace.backtrace_cleaner = MyCleaner'
|
|
@@ -135,7 +166,7 @@ module ActiveRecordQueryTrace
|
|
|
135
166
|
trace = ActiveRecordQueryTrace.backtrace_cleaner.call(full_trace)
|
|
136
167
|
else
|
|
137
168
|
raise 'Invalid ActiveRecordQueryTrace.level value ' \
|
|
138
|
-
|
|
169
|
+
"#{ActiveRecordQueryTrace.level}. Should be :full, :rails, or :app."
|
|
139
170
|
end
|
|
140
171
|
|
|
141
172
|
# We cant use a Rails::BacktraceCleaner filter to display only the relative
|
|
@@ -145,38 +176,6 @@ module ActiveRecordQueryTrace
|
|
|
145
176
|
end
|
|
146
177
|
# rubocop:enable Metrics/MethodLength
|
|
147
178
|
|
|
148
|
-
# Rails by default silences all backtraces that *do not* match
|
|
149
|
-
# Rails::BacktraceCleaner::APP_DIRS_PATTERN. In other words, the default
|
|
150
|
-
# silencer filters out all framework backtrace lines, leaving only the
|
|
151
|
-
# application lines.
|
|
152
|
-
def setup_backtrace_cleaner
|
|
153
|
-
setup_backtrace_cleaner_path
|
|
154
|
-
return if ActiveRecordQueryTrace.level == :full
|
|
155
|
-
|
|
156
|
-
remove_filters_and_silencers
|
|
157
|
-
|
|
158
|
-
case ActiveRecordQueryTrace.level
|
|
159
|
-
when :app
|
|
160
|
-
Rails.backtrace_cleaner.add_silencer { |line| line !~ rails_root_regexp }
|
|
161
|
-
when :rails
|
|
162
|
-
Rails.backtrace_cleaner.add_silencer { |line| line =~ rails_root_regexp }
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
# Rails relies on backtrace cleaner to set the application root directory
|
|
167
|
-
# filter. The problem is that the backtrace cleaner is initialized before
|
|
168
|
-
# this gem. This ensures that the value of `root` used by the filter
|
|
169
|
-
# is correct.
|
|
170
|
-
def setup_backtrace_cleaner_path
|
|
171
|
-
return unless Rails.backtrace_cleaner.instance_variable_get(:@root) == '/'
|
|
172
|
-
Rails.backtrace_cleaner.instance_variable_set :@root, Rails.root.to_s
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
def remove_filters_and_silencers
|
|
176
|
-
Rails.backtrace_cleaner.remove_filters!
|
|
177
|
-
Rails.backtrace_cleaner.remove_silencers!
|
|
178
|
-
end
|
|
179
|
-
|
|
180
179
|
# Allow query to be colorized in the terminal
|
|
181
180
|
def colorize_text(text)
|
|
182
181
|
return text unless ActiveRecordQueryTrace.colorize
|
|
@@ -204,7 +203,7 @@ module ActiveRecordQueryTrace
|
|
|
204
203
|
def validate_color_code(color_code)
|
|
205
204
|
valid_color_code?(color_code) || raise(
|
|
206
205
|
'ActiveRecordQueryTrace.colorize was set to an invalid ' \
|
|
207
|
-
|
|
206
|
+
"color. Use one of #{COLORS.keys} or a valid color code."
|
|
208
207
|
)
|
|
209
208
|
end
|
|
210
209
|
|
|
@@ -215,12 +214,6 @@ module ActiveRecordQueryTrace
|
|
|
215
214
|
def rails_root_prefix
|
|
216
215
|
@rails_root_prefix ||= "#{Rails.root}/"
|
|
217
216
|
end
|
|
218
|
-
|
|
219
|
-
# This cannot be set in a constant as Rails.root is not yet available when
|
|
220
|
-
# this file is loaded.
|
|
221
|
-
def rails_root_regexp
|
|
222
|
-
@rails_root_regexp ||= %r{#{Regexp.escape(Rails.root.to_s)}(?!\/vendor)}
|
|
223
|
-
end
|
|
224
217
|
end
|
|
225
218
|
end
|
|
226
219
|
|
|
@@ -244,7 +237,7 @@ ActiveSupport::LogSubscriber.class_eval do
|
|
|
244
237
|
|
|
245
238
|
def debug(*args, &block)
|
|
246
239
|
return if ActiveRecordQueryTrace.suppress_logging_of_db_reads \
|
|
247
|
-
&& args.first !~ /INSERT|UPDATE|DELETE|#{ActiveRecordQueryTrace::BACKTRACE_PREFIX}/
|
|
240
|
+
&& args.first !~ /INSERT|UPDATE|DELETE|#{ActiveRecordQueryTrace::BACKTRACE_PREFIX}/o
|
|
248
241
|
original_debug(*args, &block)
|
|
249
242
|
end
|
|
250
243
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: active_record_query_trace
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 1.8.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Cody Caughlan
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2023-07-27 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: activerecord
|
|
@@ -17,112 +17,126 @@ dependencies:
|
|
|
17
17
|
requirements:
|
|
18
18
|
- - ">="
|
|
19
19
|
- !ruby/object:Gem::Version
|
|
20
|
-
version:
|
|
21
|
-
type: :
|
|
20
|
+
version: 6.0.0
|
|
21
|
+
type: :runtime
|
|
22
22
|
prerelease: false
|
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
|
24
24
|
requirements:
|
|
25
25
|
- - ">="
|
|
26
26
|
- !ruby/object:Gem::Version
|
|
27
|
-
version:
|
|
27
|
+
version: 6.0.0
|
|
28
28
|
- !ruby/object:Gem::Dependency
|
|
29
|
-
name:
|
|
29
|
+
name: rake
|
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
|
31
31
|
requirements:
|
|
32
32
|
- - "~>"
|
|
33
33
|
- !ruby/object:Gem::Version
|
|
34
|
-
version:
|
|
34
|
+
version: '13.0'
|
|
35
35
|
type: :development
|
|
36
36
|
prerelease: false
|
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
|
38
38
|
requirements:
|
|
39
39
|
- - "~>"
|
|
40
40
|
- !ruby/object:Gem::Version
|
|
41
|
-
version:
|
|
41
|
+
version: '13.0'
|
|
42
42
|
- !ruby/object:Gem::Dependency
|
|
43
|
-
name:
|
|
43
|
+
name: debug
|
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
|
45
45
|
requirements:
|
|
46
46
|
- - "~>"
|
|
47
47
|
- !ruby/object:Gem::Version
|
|
48
|
-
version:
|
|
48
|
+
version: '1.8'
|
|
49
49
|
type: :development
|
|
50
50
|
prerelease: false
|
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
|
52
52
|
requirements:
|
|
53
53
|
- - "~>"
|
|
54
54
|
- !ruby/object:Gem::Version
|
|
55
|
-
version:
|
|
55
|
+
version: '1.8'
|
|
56
56
|
- !ruby/object:Gem::Dependency
|
|
57
57
|
name: rspec
|
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
|
59
59
|
requirements:
|
|
60
|
-
- - "
|
|
60
|
+
- - "~>"
|
|
61
61
|
- !ruby/object:Gem::Version
|
|
62
|
-
version: 3.
|
|
62
|
+
version: '3.12'
|
|
63
63
|
type: :development
|
|
64
64
|
prerelease: false
|
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
|
66
66
|
requirements:
|
|
67
|
-
- - "
|
|
67
|
+
- - "~>"
|
|
68
68
|
- !ruby/object:Gem::Version
|
|
69
|
-
version: 3.
|
|
69
|
+
version: '3.12'
|
|
70
70
|
- !ruby/object:Gem::Dependency
|
|
71
71
|
name: rubocop
|
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
|
73
73
|
requirements:
|
|
74
|
-
- - "
|
|
74
|
+
- - "~>"
|
|
75
75
|
- !ruby/object:Gem::Version
|
|
76
|
-
version:
|
|
76
|
+
version: '1.55'
|
|
77
77
|
type: :development
|
|
78
78
|
prerelease: false
|
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
|
80
80
|
requirements:
|
|
81
|
-
- - "
|
|
81
|
+
- - "~>"
|
|
82
82
|
- !ruby/object:Gem::Version
|
|
83
|
-
version:
|
|
83
|
+
version: '1.55'
|
|
84
84
|
- !ruby/object:Gem::Dependency
|
|
85
|
-
name: rubocop-
|
|
85
|
+
name: rubocop-performance
|
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
|
87
87
|
requirements:
|
|
88
|
-
- - "
|
|
88
|
+
- - "~>"
|
|
89
89
|
- !ruby/object:Gem::Version
|
|
90
|
-
version: 1.
|
|
90
|
+
version: '1.18'
|
|
91
91
|
type: :development
|
|
92
92
|
prerelease: false
|
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
|
94
94
|
requirements:
|
|
95
|
-
- - "
|
|
95
|
+
- - "~>"
|
|
96
96
|
- !ruby/object:Gem::Version
|
|
97
|
-
version: 1.
|
|
97
|
+
version: '1.18'
|
|
98
98
|
- !ruby/object:Gem::Dependency
|
|
99
|
-
name:
|
|
99
|
+
name: rubocop-rails
|
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
|
101
101
|
requirements:
|
|
102
|
-
- - "
|
|
102
|
+
- - "~>"
|
|
103
103
|
- !ruby/object:Gem::Version
|
|
104
|
-
version:
|
|
104
|
+
version: '2.20'
|
|
105
105
|
type: :development
|
|
106
106
|
prerelease: false
|
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
|
108
108
|
requirements:
|
|
109
|
-
- - "
|
|
109
|
+
- - "~>"
|
|
110
|
+
- !ruby/object:Gem::Version
|
|
111
|
+
version: '2.20'
|
|
112
|
+
- !ruby/object:Gem::Dependency
|
|
113
|
+
name: rubocop-rspec
|
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
|
115
|
+
requirements:
|
|
116
|
+
- - "~>"
|
|
117
|
+
- !ruby/object:Gem::Version
|
|
118
|
+
version: '2.22'
|
|
119
|
+
type: :development
|
|
120
|
+
prerelease: false
|
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
122
|
+
requirements:
|
|
123
|
+
- - "~>"
|
|
110
124
|
- !ruby/object:Gem::Version
|
|
111
|
-
version:
|
|
125
|
+
version: '2.22'
|
|
112
126
|
- !ruby/object:Gem::Dependency
|
|
113
|
-
name:
|
|
127
|
+
name: simplecov
|
|
114
128
|
requirement: !ruby/object:Gem::Requirement
|
|
115
129
|
requirements:
|
|
116
130
|
- - ">="
|
|
117
131
|
- !ruby/object:Gem::Version
|
|
118
|
-
version:
|
|
132
|
+
version: 0.22.0
|
|
119
133
|
type: :development
|
|
120
134
|
prerelease: false
|
|
121
135
|
version_requirements: !ruby/object:Gem::Requirement
|
|
122
136
|
requirements:
|
|
123
137
|
- - ">="
|
|
124
138
|
- !ruby/object:Gem::Version
|
|
125
|
-
version:
|
|
139
|
+
version: 0.22.0
|
|
126
140
|
description: Print stack trace of all DB queries to the Rails log. Helpful to find
|
|
127
141
|
where queries are being executed in your application.
|
|
128
142
|
email: bruno@facca.info
|
|
@@ -135,7 +149,8 @@ files:
|
|
|
135
149
|
homepage: https://github.com/brunofacca/active-record-query-trace
|
|
136
150
|
licenses:
|
|
137
151
|
- MIT
|
|
138
|
-
metadata:
|
|
152
|
+
metadata:
|
|
153
|
+
homepage_uri: https://github.com/brunofacca/active-record-query-trace
|
|
139
154
|
post_install_message:
|
|
140
155
|
rdoc_options: []
|
|
141
156
|
require_paths:
|
|
@@ -144,17 +159,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
144
159
|
requirements:
|
|
145
160
|
- - ">="
|
|
146
161
|
- !ruby/object:Gem::Version
|
|
147
|
-
version: '2.
|
|
162
|
+
version: '2.7'
|
|
148
163
|
- - "<"
|
|
149
164
|
- !ruby/object:Gem::Version
|
|
150
|
-
version: '4
|
|
165
|
+
version: '3.4'
|
|
151
166
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
167
|
requirements:
|
|
153
168
|
- - ">="
|
|
154
169
|
- !ruby/object:Gem::Version
|
|
155
170
|
version: '0'
|
|
156
171
|
requirements: []
|
|
157
|
-
rubygems_version: 3.
|
|
172
|
+
rubygems_version: 3.3.3
|
|
158
173
|
signing_key:
|
|
159
174
|
specification_version: 4
|
|
160
175
|
summary: Print stack trace of all DB queries to the Rails log. Helpful to find where
|