Spec-Zone.ru › Ruby on Rails 7.2

класс ActiveSupport::Notifications::Instrumenter

Родитель:
Объект

Инструментаторы хранятся в потоковом хранилище.

Атрибуты

id[R]

Публичные методы класса

new(notifier) Показать исходный код
# 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

Публичные методы экземпляра

build_handle(name, payload) Показать исходный код
# 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 невозможно.

См. ActiveSupport::Notifications::Fanout::Handle.

finish(name, payload) Показать исходный код
# File activesupport/lib/active_support/notifications/instrumenter.rb, line 92
def finish(name, payload)
  @notifier.finish name, @id, payload
end

Отправка уведомления о завершении с name и payload.

finish_with_state(listeners_state, 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
instrument(name, payload = {}) { |payload| ... } Показать исходный код
# 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

Принимая блок, инструментаризуйте его, измеряя время выполнения и публикуйте его. Без блока просто отправьте сообщение через уведомитель. Обратите внимание, что события отправляются даже если в переданном блоке произошла ошибка.

start(name, payload) Показать исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API