active_record_query_trace 1.8 → 1.8.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 +4 -4
- data/lib/active_record_query_trace/version.rb +1 -1
- data/lib/active_record_query_trace.rb +42 -45
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9148d2ea96878f6bd1031637db809f39445b393831a397d8e8ecda57bc6a6f86
|
|
4
|
+
data.tar.gz: db356dff425204012c693c7d9ab17f867d4b1574965ebd966b60ee95b5a540ab
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4bc0b49b7ab734944ecf2122ec0f97b177a47fa1d6bd810770369edcf63c4ebcb384bd879823cbb2ef7be8301d36ee1b1a5a1b402844a9201888f2482986fd86
|
|
7
|
+
data.tar.gz: f48e1191fd895a4e297272ce0a72b13c30971cba23724a27fe9ed2996e198c59b977b1d2fb88818c2212d638728c9f5dc8fc09b57737b0c81cfabffebd0280cb
|
|
@@ -27,13 +27,13 @@ module ActiveRecordQueryTrace
|
|
|
27
27
|
|
|
28
28
|
class << self
|
|
29
29
|
attr_accessor :enabled
|
|
30
|
-
attr_accessor :level
|
|
31
30
|
attr_accessor :lines
|
|
32
31
|
attr_accessor :ignore_cached_queries
|
|
33
32
|
attr_accessor :colorize
|
|
34
33
|
attr_accessor :query_type
|
|
35
34
|
attr_accessor :suppress_logging_of_db_reads
|
|
36
|
-
|
|
35
|
+
attr_writer :default_cleaner
|
|
36
|
+
attr_reader :backtrace_cleaner, :level
|
|
37
37
|
|
|
38
38
|
def backtrace_cleaner=(cleaner)
|
|
39
39
|
@backtrace_cleaner =
|
|
@@ -43,6 +43,42 @@ module ActiveRecordQueryTrace
|
|
|
43
43
|
proc { |trace| cleaner.clean(trace) }
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
|
+
|
|
47
|
+
# When changing the level we need to reset the backtrace cleaner used
|
|
48
|
+
def level=(level)
|
|
49
|
+
@level = level
|
|
50
|
+
@default_cleaner = nil
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def default_cleaner
|
|
54
|
+
@default_cleaner ||= setup_backtrace_cleaner
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# The following code creates a brand new BacktraceCleaner just for the use of this Gem
|
|
58
|
+
# avoiding the dealing with Rails.backtrace_cleaner
|
|
59
|
+
def setup_backtrace_cleaner
|
|
60
|
+
cleaner = Rails::BacktraceCleaner.new
|
|
61
|
+
remove_filters_and_silencers cleaner
|
|
62
|
+
cleaner.instance_variable_set :@root, Rails.root.to_s if cleaner.instance_variable_get(:@root) == '/'
|
|
63
|
+
case ActiveRecordQueryTrace.level
|
|
64
|
+
when :app
|
|
65
|
+
cleaner.add_silencer { |line| line !~ rails_root_regexp }
|
|
66
|
+
when :rails
|
|
67
|
+
cleaner.add_silencer { |line| line =~ rails_root_regexp }
|
|
68
|
+
end
|
|
69
|
+
cleaner
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def remove_filters_and_silencers(cleaner)
|
|
73
|
+
cleaner.remove_filters!
|
|
74
|
+
cleaner.remove_silencers!
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# This cannot be set in a constant as Rails.root is not yet available when
|
|
78
|
+
# this file is loaded.
|
|
79
|
+
def rails_root_regexp
|
|
80
|
+
@rails_root_regexp ||= %r{#{Regexp.escape(Rails.root.to_s)}(?!\/vendor)}
|
|
81
|
+
end
|
|
46
82
|
end
|
|
47
83
|
|
|
48
84
|
class CustomLogSubscriber < ActiveRecord::LogSubscriber # rubocop:disable Metrics/ClassLength
|
|
@@ -60,13 +96,12 @@ module ActiveRecordQueryTrace
|
|
|
60
96
|
def sql(event)
|
|
61
97
|
payload = event.payload
|
|
62
98
|
return unless display_backtrace?(payload)
|
|
63
|
-
|
|
64
|
-
setup_backtrace_cleaner unless ActiveRecordQueryTrace.backtrace_cleaner
|
|
65
|
-
|
|
66
99
|
trace = fully_formatted_trace # Memoize
|
|
67
100
|
debug(trace) unless trace.blank?
|
|
68
101
|
end
|
|
69
102
|
|
|
103
|
+
delegate :default_cleaner, to: ActiveRecordQueryTrace
|
|
104
|
+
|
|
70
105
|
attach_to :active_record
|
|
71
106
|
|
|
72
107
|
private
|
|
@@ -127,7 +162,7 @@ module ActiveRecordQueryTrace
|
|
|
127
162
|
when :full
|
|
128
163
|
trace = full_trace
|
|
129
164
|
when :app, :rails
|
|
130
|
-
trace =
|
|
165
|
+
trace = default_cleaner.clean(full_trace)
|
|
131
166
|
when :custom
|
|
132
167
|
unless ActiveRecordQueryTrace.backtrace_cleaner
|
|
133
168
|
raise 'Configure your backtrace cleaner first via ActiveRecordQueryTrace.backtrace_cleaner = MyCleaner'
|
|
@@ -135,7 +170,7 @@ module ActiveRecordQueryTrace
|
|
|
135
170
|
trace = ActiveRecordQueryTrace.backtrace_cleaner.call(full_trace)
|
|
136
171
|
else
|
|
137
172
|
raise 'Invalid ActiveRecordQueryTrace.level value ' \
|
|
138
|
-
|
|
173
|
+
"#{ActiveRecordQueryTrace.level}. Should be :full, :rails, or :app."
|
|
139
174
|
end
|
|
140
175
|
|
|
141
176
|
# We cant use a Rails::BacktraceCleaner filter to display only the relative
|
|
@@ -145,38 +180,6 @@ module ActiveRecordQueryTrace
|
|
|
145
180
|
end
|
|
146
181
|
# rubocop:enable Metrics/MethodLength
|
|
147
182
|
|
|
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
183
|
# Allow query to be colorized in the terminal
|
|
181
184
|
def colorize_text(text)
|
|
182
185
|
return text unless ActiveRecordQueryTrace.colorize
|
|
@@ -215,12 +218,6 @@ module ActiveRecordQueryTrace
|
|
|
215
218
|
def rails_root_prefix
|
|
216
219
|
@rails_root_prefix ||= "#{Rails.root}/"
|
|
217
220
|
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
221
|
end
|
|
225
222
|
end
|
|
226
223
|
|
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.1
|
|
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-23 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: activerecord
|
|
@@ -154,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
154
154
|
- !ruby/object:Gem::Version
|
|
155
155
|
version: '0'
|
|
156
156
|
requirements: []
|
|
157
|
-
rubygems_version: 3.
|
|
157
|
+
rubygems_version: 3.3.3
|
|
158
158
|
signing_key:
|
|
159
159
|
specification_version: 4
|
|
160
160
|
summary: Print stack trace of all DB queries to the Rails log. Helpful to find where
|