class SidekiqMonitoring::Global

Attributes

elapsed_thresholds[RW]
latency_thresholds[RW]
queue_size_thresholds[RW]

Public Class Methods

new(queue_size_thresholds = nil, latency_thresholds = nil, elapsed_thresholds = nil) click to toggle source
# File lib/sidekiq-monitoring.rb, line 155
def initialize(queue_size_thresholds = nil, latency_thresholds = nil, elapsed_thresholds = nil)
  @queue_size_thresholds = queue_size_thresholds || {}
  @latency_thresholds = latency_thresholds || {}
  @elapsed_thresholds = elapsed_thresholds || {}
end

Public Instance Methods

as_json(options = {}) click to toggle source
# File lib/sidekiq-monitoring.rb, line 141
def as_json(options = {})
  {
    'global_status' => global_status,
    'queues' => queues.select { |q| q.size > 0 }.sort_by(&:criticality).reverse!.map!(&:as_json),
    'workers' => workers.sort_by(&:criticality).reverse!.map!(&:as_json),
  }
end
global_status() click to toggle source
# File lib/sidekiq-monitoring.rb, line 149
def global_status
  queue_status = (queues.sort.last && queues.sort.last.status) || 'UNKNOWN'
  worker_status = (workers.sort.last && workers.sort.last.status) || 'UNKNOWN'
  @global_status ||= (worker_status != 'UNKNOWN' && criticality(worker_status) > criticality(queue_status)) ? worker_status : queue_status
end
queues() click to toggle source
# File lib/sidekiq-monitoring.rb, line 161
def queues
  @queues ||= Sidekiq::Queue.all.map do |queue|
    Queue.new(queue.name, queue.size, queue.latency, queue_size_thresholds[queue.name], latency_thresholds[queue.name])
  end
end
workers() click to toggle source
# File lib/sidekiq-monitoring.rb, line 167
def workers
  @workers ||= Sidekiq::Workers.new.map do |process_id, thread_id, work|
    payload = work['payload']
    Worker.new(process_id, payload['jid'], work['run_at'], work['queue'], payload['class'], elapsed_thresholds[work['queue']])
  end
end