4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/sql_trace/logger.rb', line 4
def start
if (sql_trace = ENV['SQL_TRACE'].to_i) > 0
stack_size = sql_trace > 1 ? sql_trace : 5
stack_root = Rails.root.to_s
min_duration = ENV['SQL_TRACE_MIN_DURATION'].to_i
match = if (raw_match = ENV['SQL_TRACE_MATCH']).present?
raw_match.match(/^\/.*\/$/) ? Regexp.compile(raw_match[1..-2]) : Regexp.quote(raw_match)
end
if color = ENV['SQL_TRACE_COLOR']
require 'colorize'
end
ActiveSupport::Notifications.subscribe("sql.active_record") do |n, s, e, i, payload|
name = payload[:name]
sql = payload[:sql]
duration = ActiveSupport::Notifications::Event.new(n, s, e, i, payload).duration
unless name.in?(%w{CACHE SCHEMA}) ||
(min_duration > 0 && duration < min_duration) ||
(match && !sql.match(match))
stack = caller.select do |line|
line.start_with?(stack_root)
end[0..stack_size - 1].map do |line|
line.sub("#{stack_root}/", '')
end
if stack.present?
stack.each do |line|
line = " #{line}"
line = line.send(color) if color
puts line
end && puts
end
end
end
end
end
|