Skip to main content

Queues

Nerve tracks all your job queues, showing size, wait time, throughput, and health status.

Queue Health

health = BrainzLab::Nerve.queue_health

health.each do |queue_name, stats|
  puts "#{queue_name}:"
  puts "  Size: #{stats.size}"
  puts "  Wait time: #{stats.latency}s"
  puts "  Throughput: #{stats.throughput}/min"
  puts "  Status: #{stats.status}" # :healthy, :degraded, :critical
end

Health Status

Queues are classified by health:
StatusCondition
healthySize < threshold, latency < 30s
degradedSize > threshold OR latency > 30s
criticalSize > 2x threshold OR latency > 60s
Configure thresholds per queue:
BrainzLab::Nerve.configure_queue(:default,
  size_threshold: 100,
  latency_threshold: 30,
  alert_on: [:degraded, :critical]
)

Queue Metrics

Real-time Metrics

metrics = BrainzLab::Nerve.queue_metrics(:default)

puts metrics.size           # Current queue size
puts metrics.latency        # Wait time for oldest job
puts metrics.throughput     # Jobs/minute
puts metrics.jobs_processed # Total processed today
puts metrics.jobs_failed    # Total failed today

Historical Metrics

history = BrainzLab::Nerve.queue_history(:default, period: :day)

history.each do |point|
  puts "#{point.timestamp}: size=#{point.size}, throughput=#{point.throughput}"
end

Queue Comparison

Compare performance across queues:
comparison = BrainzLab::Nerve.compare_queues([:default, :mailers, :critical])

comparison.each do |queue, stats|
  puts "#{queue}: #{stats.avg_duration}ms avg, #{stats.failure_rate}% failures"
end

Alerts

Set up alerts for queue issues:
# Alert when queue backs up
BrainzLab::Nerve.alert_on(:default,
  condition: :size_exceeds,
  threshold: 1000,
  channel: :slack
)

# Alert when latency spikes
BrainzLab::Nerve.alert_on(:critical,
  condition: :latency_exceeds,
  threshold: 60, # seconds
  channel: :pagerduty
)

Queue Actions

Pause a Queue

BrainzLab::Nerve.pause_queue(:mailers)
# Workers will stop pulling from this queue

Resume a Queue

BrainzLab::Nerve.resume_queue(:mailers)

Clear a Queue

# Caution: This deletes all pending jobs!
BrainzLab::Nerve.clear_queue(:default, confirm: true)

Multi-Queue Analysis

See which queues need attention:
analysis = BrainzLab::Nerve.queue_analysis

analysis.needs_attention.each do |queue|
  puts "#{queue.name}: #{queue.issue}"
  # => "mailers: High latency (45s average)"
end

analysis.recommendations.each do |rec|
  puts rec
  # => "Consider adding workers for 'default' queue"
end