класс ActiveSupport::StructuredEventSubscriber
Подписчик структурированных событий Active Support
ActiveSupport::StructuredEventSubscriber обрабатывает ActiveSupport::Notifications для отправки структурированных событий через Rails.event.
Примером может служить подписчик структурированных событий Action Controller, отвечающий за отправку событий обработки запросов:
module ActionController
class StructuredEventSubscriber < ActiveSupport::StructuredEventSubscriber
attach_to :action_controller
def start_processing(event)
emit_event("controller.request_started",
controller: event.payload[:controller],
action: event.payload[:action],
format: event.payload[:format]
)
end
end
end
После настройки при публикации уведомления "start_processing.action_controller" он корректно передаст событие (ActiveSupport::Notifications::Event) методу start_processing. Затем подписчик может отправить структурированное событие с помощью метода emit_event.
Константы
- DEBUG_CHECK
Открытые методы класса
# File activesupport/lib/active_support/structured_event_subscriber.rb, line 56
def initialize
super
@silenced_events = {}
end Открытые методы экземпляра
# File activesupport/lib/active_support/structured_event_subscriber.rb, line 88 def call(event) super rescue => e handle_event_error(event.name, e) end
# File activesupport/lib/active_support/structured_event_subscriber.rb, line 82 def emit_debug_event(name, payload = nil, caller_depth: 1, **kwargs) ActiveSupport.event_reporter.debug(name, payload, caller_depth: caller_depth + 1, **kwargs) rescue => e handle_event_error(name, e) end
Подобно emit_event, но отправляет событие только в режиме отладки средства отправки событий
# File activesupport/lib/active_support/structured_event_subscriber.rb, line 75 def emit_event(name, payload = nil, caller_depth: 1, **kwargs) ActiveSupport.event_reporter.notify(name, payload, caller_depth: caller_depth + 1, **kwargs) rescue => e handle_event_error(name, e) end
Отправляет структурированное событие через Rails.event.notify.
Аргументы
-
name— имя события в виде строки или символа -
payload— полезная нагрузка события в виде хеша или объекта -
caller_depth— глубина стека для определения расположения исходного кода (по умолчанию: 1) -
kwargs— дополнительные данные полезной нагрузки, объединяемые с хешем полезной нагрузки
# File activesupport/lib/active_support/structured_event_subscriber.rb, line 61 def silenced?(event) ActiveSupport.event_reporter.subscribers.none? || @silenced_events[event]&.call end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.