Spec-Zone.ru › Ruby on Rails 8.1

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

Родительский класс:
Object

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

Атрибуты

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