Class: NurseAndrea::InstrumentationSubscriber

Inherits:
Object
  • Object
show all
Defined in:
lib/nurse_andrea/instrumentation_subscriber.rb

Constant Summary collapse

SUBSCRIPTIONS =
{
  "sql.active_record"           => :on_sql,
  "transaction.active_record"   => :on_transaction,
  "cache_read.active_support"   => :on_cache_read,
  "cache_write.active_support"  => :on_cache_write,
  "cache_delete.active_support" => :on_cache_delete,
  "perform.active_job"          => :on_job_perform,
  "enqueue.active_job"          => :on_job_enqueue,
  "deliver.action_mailer"       => :on_mailer,
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeInstrumentationSubscriber

Returns a new instance of InstrumentationSubscriber.



22
23
24
25
26
# File 'lib/nurse_andrea/instrumentation_subscriber.rb', line 22

def initialize
  @telemetry = ComponentTelemetry.new
  @discovered_components = Set.new
  @subscribed = false
end

Instance Attribute Details

#discovered_componentsObject (readonly)

Returns the value of attribute discovered_components.



20
21
22
# File 'lib/nurse_andrea/instrumentation_subscriber.rb', line 20

def discovered_components
  @discovered_components
end

#telemetryObject (readonly)

Returns the value of attribute telemetry.



20
21
22
# File 'lib/nurse_andrea/instrumentation_subscriber.rb', line 20

def telemetry
  @telemetry
end

Instance Method Details

#subscribe_allObject



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/nurse_andrea/instrumentation_subscriber.rb', line 28

def subscribe_all
  return if @subscribed
  return unless defined?(ActiveSupport::Notifications)

  SUBSCRIPTIONS.each do |event_name, handler|
    ActiveSupport::Notifications.monotonic_subscribe(event_name) do |event|
      begin
        send(handler, event)
      rescue => e
        NurseAndrea.debug("[InstrumentationSubscriber] #{handler} error: #{e.message}")
      end
    end
  end

  @subscribed = true
end