Class: Txnap::Subscribers::SqlSubscriber

Inherits:
Object
  • Object
show all
Defined in:
lib/txnap/subscribers/sql_subscriber.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.installObject



7
8
9
10
11
12
13
14
# File 'lib/txnap/subscribers/sql_subscriber.rb', line 7

def install
  @subscription ||= begin
    subscriber = new
    ActiveSupport::Notifications.monotonic_subscribe("sql.active_record") do |*args|
      subscriber.call(*args)
    end
  end
end

Instance Method Details

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



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/txnap/subscribers/sql_subscriber.rb', line 17

def call(_name, start, finish, _id, payload)
  connection = payload[:connection]
  return unless connection

  case SqlEventClassifier.classify(payload)
  when :cache, :schema
    nil
  when :begin
    start_trace(connection, start, finish, payload)
  when :commit, :rollback
    registry.fetch(connection)&.record_terminal(start: start, finish: finish, sql: payload[:sql])
  when :transaction
    registry.fetch(connection)&.record_transaction(start: start, finish: finish, sql: payload[:sql])
  when :sql
    record_sql(connection, start, finish, payload)
  end
rescue => error
  Txnap.warn("sql subscriber failed: #{error.class}: #{error.message}")
end