Class: Tasker::Events::Subscribers::MetricsSubscriber
- Inherits:
-
BaseSubscriber
- Object
- BaseSubscriber
- Tasker::Events::Subscribers::MetricsSubscriber
- Defined in:
- lib/tasker/events/subscribers/metrics_subscriber.rb
Overview
MetricsSubscriber bridges events to the EventRouter for automatic metrics collection
This subscriber is the critical bridge between Tasker's event publishing system and the EventRouter-based metrics collection. It subscribes to all events that should route to metrics and forwards them to EventRouter.route_event().
Architecture:
- TelemetrySubscriber: Creates OpenTelemetry spans for debugging
- MetricsSubscriber: Routes events to EventRouter for metrics collection
- EventRouter: Intelligent routing to MetricsBackend based on configuration
- MetricsBackend: Thread-safe native metrics storage
This subscriber automatically subscribes to all events configured in EventRouter that route to metrics, ensuring zero-configuration metrics collection.
Instance Method Summary collapse
-
#handle_event(event_name, event) ⇒ void
Handle any event by routing it through EventRouter.
-
#initialize ⇒ MetricsSubscriber
constructor
A new instance of MetricsSubscriber.
-
#method_missing(method_name, *args) ⇒ void
Override method_missing to handle dynamic event methods.
-
#respond_to_missing?(method_name, include_private = false) ⇒ Boolean
Check if we respond to dynamic event handler methods.
-
#should_process_event?(event_constant) ⇒ Boolean
Override BaseSubscriber to check EventRouter configuration.
Methods inherited from BaseSubscriber
#build_event_subscriptions, #build_metric_name, #custom_event?, #event_subscriptions, #extract_core_attributes, #extract_error_metrics, #extract_metric_tags, #extract_numeric_metric, #extract_performance_metrics, #extract_step_attributes, #extract_timing_metrics, filter_events, #generate_handler_method_name, #resolve_internal_event_constant, #safe_get, #should_handle_event?, subscribe, subscribe_to, #subscribe_to_publisher
Constructor Details
#initialize ⇒ MetricsSubscriber
Returns a new instance of MetricsSubscriber.
23 24 25 26 27 28 29 |
# File 'lib/tasker/events/subscribers/metrics_subscriber.rb', line 23 def initialize super @event_router = Tasker::Telemetry::EventRouter.instance # Dynamically subscribe to all events that route to metrics subscribe_to_metrics_events end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *args) ⇒ void
This method returns an undefined value.
Override method_missing to handle dynamic event methods
Since we subscribe to events dynamically, we need to handle the resulting method calls dynamically as well.
57 58 59 60 61 62 63 64 65 |
# File 'lib/tasker/events/subscribers/metrics_subscriber.rb', line 57 def method_missing(method_name, *args) if method_name.to_s.start_with?('handle_') # Extract event name from method name event_name = method_name.to_s.sub(/^handle_/, '').tr('_', '.') handle_event(event_name, args.first) else super end end |
Instance Method Details
#handle_event(event_name, event) ⇒ void
This method returns an undefined value.
Handle any event by routing it through EventRouter
This is a catch-all handler that routes events to the EventRouter based on the configured mappings.
39 40 41 42 43 44 45 46 47 |
# File 'lib/tasker/events/subscribers/metrics_subscriber.rb', line 39 def handle_event(event_name, event) return unless should_process_event?(event_name) # Extract payload from event object if needed payload = event.respond_to?(:payload) ? event.payload : event # Route to EventRouter for intelligent backend routing @event_router.route_event(event_name, payload) end |
#respond_to_missing?(method_name, include_private = false) ⇒ Boolean
Check if we respond to dynamic event handler methods
72 73 74 |
# File 'lib/tasker/events/subscribers/metrics_subscriber.rb', line 72 def respond_to_missing?(method_name, include_private = false) method_name.to_s.start_with?('handle_') || super end |
#should_process_event?(event_constant) ⇒ Boolean
Override BaseSubscriber to check EventRouter configuration
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/tasker/events/subscribers/metrics_subscriber.rb', line 80 def should_process_event?(event_constant) # Only process if telemetry is enabled return false unless Tasker::Configuration.configuration.telemetry.enabled # Convert constant to event name if needed event_name = event_constant.respond_to?(:name) ? event_constant.name : event_constant.to_s # Check if EventRouter routes this event to metrics @event_router.routes_to_metrics?(event_name) end |