Class: QueuePulse::Monitor

Inherits:
Object
  • Object
show all
Defined in:
lib/queue_pulse/monitor.rb

Overview

Runs one monitoring pass: evaluate enabled checks, collect alerts, deliver to every notifier. Heavily isolated — a failing check or notifier is logged and never propagates to the host app (Requirements US-6.1, US-6.5, US-7.4/5).

Constant Summary collapse

CHECK_CLASSES =
{
  failures: Checks::Failures,
  queue_latency: Checks::QueueLatency,
  queue_depth: Checks::QueueDepth,
  stuck_jobs: Checks::StuckJobs,
  worker_liveness: Checks::WorkerLiveness
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(config:, source: nil) ⇒ Monitor

Returns a new instance of Monitor.



18
19
20
21
22
# File 'lib/queue_pulse/monitor.rb', line 18

def initialize(config:, source: nil)
  @config = config
  @source = source || Source::SolidQueue.new
  @state = State.new(config.cache)
end

Instance Method Details

#runArray<QueuePulse::Alert>

Returns delivered alerts.

Returns:



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/queue_pulse/monitor.rb', line 25

def run
  unless @source.available?
    logger.warn("[QueuePulse] Solid Queue tables not found; skipping checks")
    return []
  end

  if @config.notifiers.empty?
    logger.warn("[QueuePulse] no notifiers configured; skipping checks")
    return []
  end

  alerts = Timeout.timeout(@config.check_timeout) { collect_alerts }
  deliver(alerts)
  alerts
rescue Timeout::Error
  logger.error("[QueuePulse] check pass exceeded #{@config.check_timeout}s and was aborted")
  []
end