Class: Dontbugme::Subscribers::ActiveRecord

Inherits:
Base
  • Object
show all
Defined in:
lib/dontbugme/subscribers/active_record.rb

Constant Summary collapse

EVENT =
'sql.active_record'

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

call

Class Method Details

.subscribeObject



8
9
10
11
12
13
14
# File 'lib/dontbugme/subscribers/active_record.rb', line 8

def self.subscribe
  return unless defined?(::ActiveRecord::Base)

  ::ActiveSupport::Notifications.subscribe(EVENT) do |*args|
    call(*args)
  end
end

Instance Method Details

#call(_name, start, finish, _id, payload) ⇒ Object



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
# File 'lib/dontbugme/subscribers/active_record.rb', line 16

def call(_name, start, finish, _id, payload)
  return unless Context.active?

  config = Dontbugme.config
  return unless config.recording?

  duration_ms = ((finish - start) * 1000).round(2)
  sql = payload[:sql] || payload['sql'] || ''
  binds = config.capture_sql_binds ? process_binds(payload) : []

  operation = extract_operation(sql)
  payload_data = {
    name: payload[:name] || payload['name'],
    connection_id: payload[:connection_id] || payload['connection_id']
  }
  payload_data[:binds] = binds if binds.any?

  Recorder.add_span(
    category: :sql,
    operation: operation,
    detail: sql,
    payload: payload_data,
    duration_ms: duration_ms,
    started_at: start
  )
end