Instrumenters are stored in a thread local.
Methods
Attributes
| [R] | id |
Class Public methods
new(notifier)
📝 Source code
# 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
🔎 See on GitHub
Instance Public methods
build_handle(name, payload)
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.
📝 Source code
# File activesupport/lib/active_support/notifications/instrumenter.rb, line 78
def build_handle(name, payload)
@notifier.build_handle(name, @id, payload)
end
🔎 See on GitHub
finish(name, payload)
Send a finish notification with name and payload.
📝 Source code
# File activesupport/lib/active_support/notifications/instrumenter.rb, line 92
def finish(name, payload)
@notifier.finish name, @id, payload
end
🔎 See on GitHub
finish_with_state(listeners_state, name, payload)
📝 Source code
# 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
🔎 See on GitHub
instrument(name, payload = {})
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.
📝 Source code
# 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
🔎 See on GitHub
start(name, payload)
Send a start notification with name and payload.
📝 Source code
# File activesupport/lib/active_support/notifications/instrumenter.rb, line 87
def start(name, payload)
@notifier.start name, @id, payload
end
🔎 See on GitHub