Module: SolidQueueGuard::Metrics::DepthEmitter

Defined in:
lib/solid_queue_guard/metrics/depth_emitter.rb

Overview

Snapshot gauges answering "are jobs stuck right now?" (same DB source as Mission Control /jobs).

Class Method Summary collapse

Class Method Details

.emit!Object



10
11
12
13
14
15
16
# File 'lib/solid_queue_guard/metrics/depth_emitter.rb', line 10

def emit!
  return unless enabled?

  emit_ready_gauges!
  emit_execution_gauges!
  statsd.flush if statsd.respond_to?(:flush)
end

.emit_execution_gauges!Object



55
56
57
58
59
# File 'lib/solid_queue_guard/metrics/depth_emitter.rb', line 55

def emit_execution_gauges!
  statsd.gauge('solid_queue.failed.count', SolidQueue::FailedExecution.count)
  statsd.gauge('solid_queue.claimed.count', SolidQueue::ClaimedExecution.count)
  statsd.gauge('solid_queue.scheduled.count', SolidQueue::ScheduledExecution.count)
end

.emit_ready_ages!(oldest_by_queue) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/solid_queue_guard/metrics/depth_emitter.rb', line 47

def emit_ready_ages!(oldest_by_queue)
  now = Time.current
  oldest_by_queue.each do |queue_name, created_at|
    age = created_at ? [(now - created_at).to_i, 0].max : 0
    statsd.gauge('solid_queue.ready.oldest_age_seconds', age, tags: ["queue:#{queue_name}"])
  end
end

.emit_ready_counts!(ready_counts) ⇒ Object



41
42
43
44
45
# File 'lib/solid_queue_guard/metrics/depth_emitter.rb', line 41

def emit_ready_counts!(ready_counts)
  ready_counts.each do |queue_name, count|
    statsd.gauge('solid_queue.ready.count', count, tags: ["queue:#{queue_name}"])
  end
end

.emit_ready_gauges!Object



27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/solid_queue_guard/metrics/depth_emitter.rb', line 27

def emit_ready_gauges!
  ready_counts = SolidQueue::ReadyExecution.group(:queue_name).count
  oldest_by_queue = SolidQueue::ReadyExecution.group(:queue_name).minimum(:created_at)

  if ready_counts.empty?
    statsd.gauge('solid_queue.ready.count', 0)
    statsd.gauge('solid_queue.ready.oldest_age_seconds', 0)
    return
  end

  emit_ready_counts!(ready_counts)
  emit_ready_ages!(oldest_by_queue)
end

.enabled?Boolean

Returns:

  • (Boolean)


18
19
20
21
# File 'lib/solid_queue_guard/metrics/depth_emitter.rb', line 18

def enabled?
  SolidQueueGuard.config.emit_depth_metrics &&
    %w[production staging].include?(Rails.env.to_s)
end

.statsdObject



23
24
25
# File 'lib/solid_queue_guard/metrics/depth_emitter.rb', line 23

def statsd
  DogstatsdClient.statsd
end