class NotificationTracer::RailsSql
Attributes
enabled[R]
formatter[R]
lines[R]
logger[R]
matcher[R]
subscriber[R]
Public Class Methods
new(matcher:, logger:, formatter:, lines: nil, silence_rails_code: true)
click to toggle source
# File lib/notification_tracer/rails_sql.rb, line 5 def initialize(matcher:, logger:, formatter:, lines: nil, silence_rails_code: true) @enabled = false @lines = Integer(lines) if lines @matcher = matcher @logger = logger @formatter = formatter @subscriber = make_subscriber(silence_rails_code: silence_rails_code) end
Public Instance Methods
call(stack:, payload:, duration:, event_id:, event_name:)
click to toggle source
# File lib/notification_tracer/rails_sql.rb, line 32 def call(stack:, payload:, duration:, event_id:, event_name:) return unless enabled return unless matches?(payload) stack = stack[0..(lines-1)] if lines stack = stack.select{ |l| l && !l.empty? } return if stack.empty? data = formatter.call(stack: stack, sql: payload[:sql], duration: duration, uuid: event_id) logger.call(data) if data end
pause()
click to toggle source
# File lib/notification_tracer/rails_sql.rb, line 21 def pause @enabled = false self end
start()
click to toggle source
# File lib/notification_tracer/rails_sql.rb, line 15 def start @enabled = true subscriber.subscribe self end
stop()
click to toggle source
# File lib/notification_tracer/rails_sql.rb, line 26 def stop @enabled = false subscriber.unsubscribe self end
Private Instance Methods
make_cleaner(silence_rails_code:)
click to toggle source
# File lib/notification_tracer/rails_sql.rb, line 56 def make_cleaner(silence_rails_code:) Rails::BacktraceCleaner.new.tap do |rbc| rbc.remove_silencers! unless silence_rails_code end end
make_subscriber(silence_rails_code:)
click to toggle source
# File lib/notification_tracer/rails_sql.rb, line 51 def make_subscriber(silence_rails_code:) cleaner = make_cleaner(silence_rails_code: silence_rails_code) Subscriber.new(pattern: pattern, callback: self, cleaner: cleaner) end
matches?(payload)
click to toggle source
# File lib/notification_tracer/rails_sql.rb, line 62 def matches?(payload) return false if payload[:name] == 'SCHEMA' return false if payload[:name] == 'CACHE' matcher.call(payload[:sql]) end
pattern()
click to toggle source
# File lib/notification_tracer/rails_sql.rb, line 47 def pattern 'sql.active_record' end