класс ActiveSupport::Notifications::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 Публичные методы экземпляра
# File activesupport/lib/active_support/notifications/instrumenter.rb, line 78 def build_handle(name, payload) @notifier.build_handle(name, @id, payload) end
Возвращает «обработчик» события с заданным name и payload.
start и finish должны быть вызваны ровно один раз для возвращённого объекта.
По возможности, лучше использовать instrument, который запишет начало и конец события и правильно обработает любые исключения. build_handle — это низкоуровневый API, предназначенный для случаев, когда использование instrument невозможно.
# File activesupport/lib/active_support/notifications/instrumenter.rb, line 92 def finish(name, payload) @notifier.finish name, @id, payload end
Отправка уведомления о завершении с name и payload.
# 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
# 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 Принимая блок, инструментаризуйте его, измеряя время выполнения и публикуйте его. Без блока просто отправьте сообщение через уведомитель. Обратите внимание, что события отправляются даже если в переданном блоке произошла ошибка.
# File activesupport/lib/active_support/notifications/instrumenter.rb, line 87 def start(name, payload) @notifier.start name, @id, payload end
Отправка уведомления о начале с name и payload.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.