class Sidekiq::Health::QueueStatus::Status

Attributes

dead_set[R]
queue_name[R]

Public Class Methods

new(queue_name, dead_set) click to toggle source
# File lib/sidekiq/health/queue_status.rb, line 10
def initialize(queue_name, dead_set)
  @queue_name = queue_name
  @dead_set = dead_set
end

Public Instance Methods

health_as_human_readable_string() click to toggle source
# File lib/sidekiq/health/queue_status.rb, line 39
def health_as_human_readable_string
  health = []

  if total_number_of_jobs > Sidekiq::Health::MAXIMUM_HEALTHY_QUEUE_SIZE
    more_than_allowed = total_number_of_jobs - Sidekiq::Health::MAXIMUM_HEALTHY_QUEUE_SIZE
    health << "There are a total of #{total_number_of_jobs} scheduled jobs, "\
      "which is #{more_than_allowed} more than healthy."
  end

  dead_in_last_hour = total_number_of_failed_jobs_since(1.hour.ago)
  if dead_in_last_hour > Sidekiq::Health::MAXIMUM_HEALTHY_DEAD_SET_LAST_HOUR_SIZE
    more_than_allowed = dead_in_last_hour - Sidekiq::Health::MAXIMUM_HEALTHY_DEAD_SET_LAST_HOUR_SIZE
    health << "There are a total of #{dead_in_last_hour} failed jobs, "\
      "which is #{more_than_allowed} more than healthy."
  end

  if health.empty?
    health << "Everything looks good."
  end

  health.join(" ")
end
number_of_scheduled_jobs_per_class_name() click to toggle source
# File lib/sidekiq/health/queue_status.rb, line 29
def number_of_scheduled_jobs_per_class_name
  @number_of_scheduled_jobs_per_class_name ||= sidekiq_queue.inject({}) do |job_pool, scheduled_job|
    wrapped_class = scheduled_job['wrapped']
    job_pool[wrapped_class] = job_pool.fetch(wrapped_class, 0) + 1
    job_pool
  end
    .sort_by { |job_name, count| count }
    .to_h
end
total_number_of_failed_jobs() click to toggle source
# File lib/sidekiq/health/queue_status.rb, line 21
def total_number_of_failed_jobs
  dead_set.size
end
total_number_of_failed_jobs_since(timestamp) click to toggle source
# File lib/sidekiq/health/queue_status.rb, line 25
def total_number_of_failed_jobs_since(timestamp)
  dead_set.select { |item| item['failed_at'] > timestamp.to_r }.size
end
total_number_of_jobs() click to toggle source
# File lib/sidekiq/health/queue_status.rb, line 17
def total_number_of_jobs
  sidekiq_queue.size
end

Private Instance Methods

sidekiq_queue() click to toggle source
# File lib/sidekiq/health/queue_status.rb, line 66
def sidekiq_queue
  @sidekiq_queue ||= Sidekiq::Queue.new queue_name
end