Class: ActiveSupport::Notifications::Instrumenter
Relationships & Source Files | |
Namespace Children | |
Classes:
| |
Inherits: | Object |
Defined in: | activesupport/lib/active_support/notifications/instrumenter.rb |
Overview
Instrumenters are stored in a thread local.
Class Method Summary
- .new(notifier) ⇒ Instrumenter constructor
Instance Attribute Summary
- #id readonly
Instance Method Summary
-
#build_handle(name, payload)
Returns a “handle” for an event with the given
name
andpayload
. -
#finish(name, payload)
Send a finish notification with
name
andpayload
. - #finish_with_state(listeners_state, name, payload)
-
#instrument(name, payload = {})
Given a block, instrument it by measuring the time taken to execute and publish it.
-
#start(name, payload)
Send a start notification with
name
andpayload
. - #unique_id private
- #new_event(name, payload = {}) Internal use only
Constructor Details
.new(notifier) ⇒ Instrumenter
# 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
Instance Attribute Details
#id (readonly)
[ GitHub ]# File 'activesupport/lib/active_support/notifications/instrumenter.rb', line 10
attr_reader :id
Instance Method Details
#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.
See Fanout::Handle
.
# File 'activesupport/lib/active_support/notifications/instrumenter.rb', line 78
def build_handle(name, payload) @notifier.build_handle(name, @id, payload) end
#finish(name, payload)
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
#finish_with_state(listeners_state, name, payload)
[ GitHub ]# 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
#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.
# 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. ] payload[:exception_object] = e raise e ensure handle.finish end end
#new_event(name, payload = {})
#start(name, payload)
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
#unique_id (private)
[ GitHub ]# File 'activesupport/lib/active_support/notifications/instrumenter.rb', line 101
def unique_id SecureRandom.hex(10) end