class Sidekiq::Undertaker::JobDistributor

Attributes

dead_jobs[R]

Public Class Methods

new(dead_jobs) click to toggle source
# File lib/sidekiq/undertaker/job_distributor.rb, line 10
def initialize(dead_jobs)
  @dead_jobs = dead_jobs
end

Public Instance Methods

group_by_error_class() click to toggle source
# File lib/sidekiq/undertaker/job_distributor.rb, line 18
def group_by_error_class
  group_by(:error_class)
end
group_by_job_class() click to toggle source
# File lib/sidekiq/undertaker/job_distributor.rb, line 14
def group_by_job_class
  group_by(:job_class)
end

Private Instance Methods

distribute() { |distribution, dead_job, bucket_name| ... } click to toggle source
# File lib/sidekiq/undertaker/job_distributor.rb, line 24
def distribute
  distribution = init_counters({}, "all")

  dead_jobs.each do |dead_job|
    bucket_name = dead_job.bucket_name

    incr_counters(distribution, "all", bucket_name)
    yield distribution, dead_job, bucket_name if block_given?
  end

  sort_by_total_dead(distribution)
end
group_by(attribute) click to toggle source
# File lib/sidekiq/undertaker/job_distributor.rb, line 37
def group_by(attribute)
  distribute do |distribution, dead_job, bucket_name|
    attr = dead_job.public_send(attribute)
    init_counters(distribution, attr) unless distribution[attr]
    incr_counters(distribution, attr, bucket_name)
  end
end
incr_counters(distribution, attr, bucket_name, value = 1) click to toggle source
# File lib/sidekiq/undertaker/job_distributor.rb, line 58
def incr_counters(distribution, attr, bucket_name, value = 1)
  distribution[attr][bucket_name] += value
  distribution[attr]["total_dead"] += value
end
init_counters(distribution, attr) click to toggle source
# File lib/sidekiq/undertaker/job_distributor.rb, line 51
def init_counters(distribution, attr)
  distribution[attr] = {}
  Bucket.bucket_names.each { |bucket| distribution[attr][bucket] = 0 }
  distribution[attr]["total_dead"] = 0
  distribution
end
sort_by_total_dead(distribution) click to toggle source
# File lib/sidekiq/undertaker/job_distributor.rb, line 45
def sort_by_total_dead(distribution)
  distribution.map { |k, v| [k, v] }.sort do |x, y|
    x[1]["total_dead"] <=> y[1]["total_dead"]
  end.reverse
end