Class: QueuePulse::Monitor
- Inherits:
-
Object
- Object
- QueuePulse::Monitor
- 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
-
#initialize(config:, source: nil) ⇒ Monitor
constructor
A new instance of Monitor.
-
#run ⇒ Array<QueuePulse::Alert>
Delivered alerts.
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
#run ⇒ Array<QueuePulse::Alert>
Returns delivered alerts.
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 |