class ActiveSupport::Notifications::Instrumenter
Instrumenters are stored in a thread local.
Attributes
Public Class Methods
# File activesupport/lib/active_support/notifications/instrumenter.rb, line 12 def initialize(notifier) unless notifier.respond_to?(:build_handle) notifier = LegacyHandle::Wrapper.new(notifier) end @id = unique_id @notifier = notifier end
Public Instance Methods
Returns a “handle” for an event with the given name and payload.
start and finish must each be called exactly once on the returned object.
Where possible, it’s best to use instrument, which will record the start and finish of the event and correctly handle any exceptions. build_handle is a low-level API intended for cases where using instrument isn’t possible.
See ActiveSupport::Notifications::Fanout::Handle.
# File activesupport/lib/active_support/notifications/instrumenter.rb, line 78 def build_handle(name, payload) @notifier.build_handle(name, @id, payload) end
Send a finish notification with name and payload.
# File activesupport/lib/active_support/notifications/instrumenter.rb, line 92 def finish(name, payload) @notifier.finish name, @id, payload end
# File activesupport/lib/active_support/notifications/instrumenter.rb, line 96 def finish_with_state(listeners_state, name, payload) @notifier.finish name, @id, payload, listeners_state end
Given a block, instrument it by measuring the time taken to execute and publish it. Without a block, simply send a message via the notifier. Notice that events get sent even if an error occurs in the passed-in block.
# File activesupport/lib/active_support/notifications/instrumenter.rb, line 54 def instrument(name, payload = {}) handle = build_handle(name, payload) handle.start begin yield payload if block_given? rescue Exception => e payload[:exception] = [e.class.name, e.message] payload[:exception_object] = e raise e ensure handle.finish end end
Send a start notification with name and payload.
# File activesupport/lib/active_support/notifications/instrumenter.rb, line 87 def start(name, payload) @notifier.start name, @id, payload end