Class: Sidekiq::MemoryGuardTelemetry
- Inherits:
-
Object
- Object
- Sidekiq::MemoryGuardTelemetry
- Defined in:
- lib/sidekiq/memory_guard_telemetry.rb
Overview
Emits AppSignal/Rails instrumentation for a single Sidekiq memory-guard
role. Telemetry failures are deliberately contained here so they can never
prevent a worker from draining or starting.
Instance Method Summary collapse
-
#initialize(role:) ⇒ MemoryGuardTelemetry
constructor
A new instance of MemoryGuardTelemetry.
- #record_drain(duration:, drained:, busy:) ⇒ void
- #record_gc(before_gc:, after_gc:) ⇒ void
- #record_phase(action, busy:, **payload) ⇒ void
- #record_restart_count(restart_count) ⇒ void
- #record_restart_requested(before_gc:, after_gc:, max_rss_mb:, busy:) ⇒ void
- #record_rss(rss_mb) ⇒ void
- #record_warning(rss_mb:, warning_rss_mb:) ⇒ void
Constructor Details
#initialize(role:) ⇒ MemoryGuardTelemetry
Returns a new instance of MemoryGuardTelemetry.
9 10 11 |
# File 'lib/sidekiq/memory_guard_telemetry.rb', line 9 def initialize(role:) @role = role.to_s end |
Instance Method Details
#record_drain(duration:, drained:, busy:) ⇒ void
This method returns an undefined value.
69 70 71 72 73 |
# File 'lib/sidekiq/memory_guard_telemetry.rb', line 69 def record_drain(duration:, drained:, busy:) add_distribution_value('sidekiq.memory_guard.drain_seconds', duration) increment_counter('sidekiq.memory_guard.drain_timeout') unless drained report_event('drain_finished', duration_seconds: duration.round(1), drained:, busy:) end |
#record_gc(before_gc:, after_gc:) ⇒ void
This method returns an undefined value.
30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/sidekiq/memory_guard_telemetry.rb', line 30 def record_gc(before_gc:, after_gc:) reclaimed_mb = [before_gc - after_gc, 0].max record_rss(after_gc) add_distribution_value('sidekiq.memory_guard.gc_reclaimed_mb', reclaimed_mb) report_event( 'gc_completed', rss_before_gc_mb: before_gc.round(1), rss_after_gc_mb: after_gc.round(1), reclaimed_mb: reclaimed_mb.round(1) ) end |
#record_phase(action, busy:, **payload) ⇒ void
This method returns an undefined value.
80 81 82 |
# File 'lib/sidekiq/memory_guard_telemetry.rb', line 80 def record_phase(action, busy:, **payload) report_event(action, busy:, **payload) end |
#record_restart_count(restart_count) ⇒ void
This method returns an undefined value.
60 61 62 63 |
# File 'lib/sidekiq/memory_guard_telemetry.rb', line 60 def record_restart_count(restart_count) set_gauge('sidekiq.memory_guard.restarts_last_hour', restart_count) report_event('restart_claimed', restarts_last_hour: restart_count) end |
#record_restart_requested(before_gc:, after_gc:, max_rss_mb:, busy:) ⇒ void
This method returns an undefined value.
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/sidekiq/memory_guard_telemetry.rb', line 47 def record_restart_requested(before_gc:, after_gc:, max_rss_mb:, busy:) increment_counter('sidekiq.memory_guard.restart_requested') report_event( 'restart_requested', rss_before_gc_mb: before_gc.round(1), rss_after_gc_mb: after_gc.round(1), max_rss_mb:, busy: ) end |
#record_rss(rss_mb) ⇒ void
This method returns an undefined value.
15 16 17 |
# File 'lib/sidekiq/memory_guard_telemetry.rb', line 15 def record_rss(rss_mb) set_gauge('sidekiq.memory_guard.rss_mb', rss_mb) end |
#record_warning(rss_mb:, warning_rss_mb:) ⇒ void
This method returns an undefined value.
22 23 24 25 |
# File 'lib/sidekiq/memory_guard_telemetry.rb', line 22 def record_warning(rss_mb:, warning_rss_mb:) increment_counter('sidekiq.memory_guard.warning') report_event('warning', rss_mb: rss_mb.round(1), warning_rss_mb:) end |