Class: BetterService::Subscribers::StatsSubscriber
- Inherits:
-
Object
- Object
- BetterService::Subscribers::StatsSubscriber
- Defined in:
- lib/better_service/subscribers/stats_subscriber.rb
Overview
StatsSubscriber - Built-in subscriber that collects service statistics
This subscriber tracks execution metrics for all services:
-
Total executions
-
Success/failure counts
-
Average duration
-
Cache hit rate
Class Attribute Summary collapse
-
.stats ⇒ Hash
readonly
Storage for service statistics.
-
.subscriptions ⇒ Array<ActiveSupport::Notifications::Fanout::Subscriber>
readonly
Storage for ActiveSupport::Notifications subscriptions.
Class Method Summary collapse
-
.attach ⇒ void
Attach the subscriber to ActiveSupport::Notifications.
-
.reset! ⇒ void
Reset all statistics.
-
.stats_for(service_name) ⇒ Hash?
Get statistics for a specific service.
-
.summary ⇒ Hash
Get statistics summary across all services.
Class Attribute Details
.stats ⇒ Hash (readonly)
Storage for service statistics
36 37 38 |
# File 'lib/better_service/subscribers/stats_subscriber.rb', line 36 def stats @stats end |
.subscriptions ⇒ Array<ActiveSupport::Notifications::Fanout::Subscriber> (readonly)
Storage for ActiveSupport::Notifications subscriptions
41 42 43 |
# File 'lib/better_service/subscribers/stats_subscriber.rb', line 41 def subscriptions @subscriptions end |
Class Method Details
.attach ⇒ void
This method returns an undefined value.
Attach the subscriber to ActiveSupport::Notifications
This method is called automatically when subscriber is enabled.
48 49 50 51 52 53 |
# File 'lib/better_service/subscribers/stats_subscriber.rb', line 48 def attach reset! @subscriptions ||= [] subscribe_to_service_events subscribe_to_cache_events end |
.reset! ⇒ void
This method returns an undefined value.
Reset all statistics
Useful for testing or periodic reset in production.
60 61 62 63 64 65 66 67 68 69 |
# File 'lib/better_service/subscribers/stats_subscriber.rb', line 60 def reset! # Unsubscribe from all existing subscriptions if @subscriptions @subscriptions.each do |subscription| ActiveSupport::Notifications.unsubscribe(subscription) end end @subscriptions = [] @stats = {} end |
.stats_for(service_name) ⇒ Hash?
Get statistics for a specific service
75 76 77 |
# File 'lib/better_service/subscribers/stats_subscriber.rb', line 75 def stats_for(service_name) @stats[service_name] end |
.summary ⇒ Hash
Get statistics summary across all services
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/better_service/subscribers/stats_subscriber.rb', line 82 def summary total_executions = @stats.values.sum { |s| s[:executions] } total_successes = @stats.values.sum { |s| s[:successes] } total_failures = @stats.values.sum { |s| s[:failures] } total_duration = @stats.values.sum { |s| s[:total_duration] } total_cache_hits = @stats.values.sum { |s| s[:cache_hits] } total_cache_misses = @stats.values.sum { |s| s[:cache_misses] } { total_services: @stats.keys.size, total_executions: total_executions, total_successes: total_successes, total_failures: total_failures, success_rate: total_executions > 0 ? (total_successes.to_f / total_executions * 100).round(2) : 0, avg_duration: total_executions > 0 ? (total_duration / total_executions).round(2) : 0, cache_hit_rate: (total_cache_hits + total_cache_misses) > 0 ? (total_cache_hits.to_f / (total_cache_hits + total_cache_misses) * 100).round(2) : 0 } end |