Class: Sidekiq::MemoryGuardTelemetry

Inherits:
Object
  • Object
show all
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

Constructor Details

#initialize(role:) ⇒ MemoryGuardTelemetry

Returns a new instance of MemoryGuardTelemetry.

Parameters:

  • role (String)

    stable process role used in metric and event tags



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.

Parameters:

  • duration (Numeric)
  • drained (Boolean)
  • busy (Integer, nil)


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.

Parameters:

  • before_gc (Numeric)
  • after_gc (Numeric)


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.

Parameters:

  • action (String)
  • busy (Integer, nil)
  • payload (Hash)

    extra event payload keys

Options Hash (**payload):

  • any (Object)

    keys are forwarded to the sidekiq.memory_guard event



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.

Parameters:

  • restart_count (Integer)


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.

Parameters:

  • before_gc (Numeric)
  • after_gc (Numeric)
  • max_rss_mb (Numeric)
  • busy (Integer, nil)


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.

Parameters:

  • rss_mb (Numeric)


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.

Parameters:

  • rss_mb (Numeric)
  • warning_rss_mb (Numeric)


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