Class: Txnap::Subscribers::TransactionSubscriber

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.installObject



7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/txnap/subscribers/transaction_subscriber.rb', line 7

def install
  @subscriptions ||= begin
    subscriber = new
    [
      ActiveSupport::Notifications.monotonic_subscribe("start_transaction.active_record") do |*args|
        subscriber.start(*args)
      end,
      ActiveSupport::Notifications.monotonic_subscribe("transaction.active_record") do |*args|
        subscriber.finish(*args)
      end
    ]
  end
end

Instance Method Details

#finish(_name, _start, _finish, _id, payload) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/txnap/subscribers/transaction_subscriber.rb', line 31

def finish(_name, _start, _finish, _id, payload)
  connection = payload[:connection]
  return unless connection

  trace = Txnap.registry.finalize(connection, payload[:transaction])
  Txnap.notify(trace&.to_report(payload[:outcome]))
rescue IdleGapDetected
  raise
rescue => error
  Txnap.warn("transaction finish subscriber failed: #{error.class}: #{error.message}")
end

#start(_name, _start, _finish, _id, payload) ⇒ Object



22
23
24
25
26
27
28
29
# File 'lib/txnap/subscribers/transaction_subscriber.rb', line 22

def start(_name, _start, _finish, _id, payload)
  connection = payload[:connection]
  return unless connection

  Txnap.registry.bind_transaction(connection, payload[:transaction])
rescue => error
  Txnap.warn("transaction start subscriber failed: #{error.class}: #{error.message}")
end