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.

See ActiveSupport::Notifications::Fanout::Handle.

πŸ“ 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