class ActiveSupport::Notifications::Instrumenter

Instrumenters are stored in a thread local.

Attributes

id[R]

Public Class Methods

new(notifier) click to toggle source
# File lib/active_support/notifications/instrumenter.rb, line 9
def initialize(notifier)
  @id       = unique_id
  @notifier = notifier
end

Public Instance Methods

finish(name, payload) click to toggle source

Send a finish notification with name and payload.

# File lib/active_support/notifications/instrumenter.rb, line 37
def finish(name, payload)
  @notifier.finish name, @id, payload
end
finish_with_state(listeners_state, name, payload) click to toggle source
# File lib/active_support/notifications/instrumenter.rb, line 41
def finish_with_state(listeners_state, name, payload)
  @notifier.finish name, @id, payload, listeners_state
end
instrument(name, payload={}) { |payload| ... } click to toggle source

Instrument the given block by measuring the time taken to execute it and publish it. Notice that events get sent even if an error occurs in the passed-in block.

# File lib/active_support/notifications/instrumenter.rb, line 17
def instrument(name, payload={})
  # some of the listeners might have state
  listeners_state = start name, payload
  begin
    yield payload
  rescue Exception => e
    payload[:exception] = [e.class.name, e.message]
    payload[:exception_object] = e
    raise e
  ensure
    finish_with_state listeners_state, name, payload
  end
end
start(name, payload) click to toggle source

Send a start notification with name and payload.

# File lib/active_support/notifications/instrumenter.rb, line 32
def start(name, payload)
  @notifier.start name, @id, payload
end

Private Instance Methods

unique_id() click to toggle source
# File lib/active_support/notifications/instrumenter.rb, line 47
def unique_id
  SecureRandom.hex(10)
end