class Resque::Plugins::JobHistory::Cleaner

JobHistory cleanup functions to allow the user to cleanup Redis for histories.

Public Class Methods

clean_all_old_running_jobs() click to toggle source
# File lib/resque/plugins/job_history/cleaner.rb, line 9
def clean_all_old_running_jobs
  job_classes.each do |class_name|
    Resque::Plugins::JobHistory::HistoryDetails.new(class_name).clean_old_running_jobs
  end
end
fixup_all_keys() click to toggle source
# File lib/resque/plugins/job_history/cleaner.rb, line 15
def fixup_all_keys
  job_classes.each do |class_name|
    fixup_job_keys class_name
  end
  fixup_linear_keys
end
fixup_job_keys(class_name) click to toggle source
# File lib/resque/plugins/job_history/cleaner.rb, line 22
def fixup_job_keys(class_name)
  keys = unknown_job_keys(class_name)

  keys.each do |stranded_key|
    Resque::Plugins::JobHistory::Job.new(class_name, stranded_key).purge
    del_key(stranded_key, "Stranded job key deleted")
  end
end
fixup_linear_keys() click to toggle source
# File lib/resque/plugins/job_history/cleaner.rb, line 31
def fixup_linear_keys
  details  = Resque::Plugins::JobHistory::HistoryDetails.new("")
  hash_key = details.linear_jobs.job_classes_key

  classes = details.redis.hgetall hash_key
  job_ids = details.linear_jobs.job_ids

  classes.keys.each do |job_id|
    next if job_ids.include?(job_id)

    Resque.logger.warn("deleting missing job class - #{job_id}")
    details.redis.hdel hash_key, job_id
  end
end
purge_all_jobs() click to toggle source
# File lib/resque/plugins/job_history/cleaner.rb, line 46
def purge_all_jobs
  job_classes.each do |class_name|
    purge_class class_name
  end

  purge_linear_history

  del_key(Resque::Plugins::JobHistory::HistoryDetails.job_history_key, "Purging job_history_key")

  redis.keys("*").each do |key|
    del_key(key, "Purging unknown key")
  end
end
purge_class(class_name) click to toggle source
# File lib/resque/plugins/job_history/cleaner.rb, line 83
def purge_class(class_name)
  return if similar_name?(class_name)

  details = Resque::Plugins::JobHistory::HistoryDetails.new("class_name")
  details.running_jobs.jobs.each(&:purge)
  details.finished_jobs.jobs.each(&:purge)

  class_keys(class_name).each do |job_key|
    del_key(job_key, "Purging job key")
  end
end
purge_invalid_jobs() click to toggle source
# File lib/resque/plugins/job_history/cleaner.rb, line 75
def purge_invalid_jobs
  job_classes.each do |class_name|
    next if Resque::Plugins::JobHistory::HistoryDetails.new(class_name).class_name_valid?

    purge_class(class_name)
  end
end
purge_linear_history() click to toggle source
# File lib/resque/plugins/job_history/cleaner.rb, line 60
def purge_linear_history
  linear_jobs = Resque::Plugins::JobHistory::JobList.new.linear_jobs

  fixup_linear_keys

  linear_jobs.job_ids.each do |job_id|
    linear_jobs.remove_job(job_id)
  end

  list_keys = redis.keys("job_history..*")
  list_keys.each do |key|
    del_key(key, "Purging unknown linear history key")
  end
end
similar_name?(class_name) click to toggle source
# File lib/resque/plugins/job_history/cleaner.rb, line 95
def similar_name?(class_name)
  job_classes.any? do |job_name|
    job_name != class_name && job_name[0..class_name.length - 1] == class_name
  end
end

Private Class Methods

class_keys(class_name) click to toggle source
# File lib/resque/plugins/job_history/cleaner.rb, line 107
def class_keys(class_name)
  history_base = Resque::Plugins::JobHistory::HistoryDetails.new(class_name)

  history_base.redis.keys("#{history_base.job_history_base_key}*")
end
del_key(key, message) click to toggle source
# File lib/resque/plugins/job_history/cleaner.rb, line 153
def del_key(key, message)
  Resque.logger.warn("#{message} - #{key}")
  redis.del key
end
job_classes() click to toggle source
# File lib/resque/plugins/job_history/cleaner.rb, line 103
def job_classes
  Resque::Plugins::JobHistory::JobList.new.job_classes.sort.reverse
end
job_id_keys(class_name, job_ids) click to toggle source
# File lib/resque/plugins/job_history/cleaner.rb, line 113
def job_id_keys(class_name, job_ids)
  job_ids.map do |job_id|
    "#{Resque::Plugins::JobHistory::HistoryDetails.job_history_key}.#{class_name}.#{job_id}"
  end
end
job_keys(class_name) click to toggle source
# File lib/resque/plugins/job_history/cleaner.rb, line 119
def job_keys(class_name)
  history_base = Resque::Plugins::JobHistory::HistoryDetails.new(class_name)

  history_base.redis.keys("#{history_base.job_history_base_key}*") - job_support_keys(history_base)
end
job_support_keys(history_base) click to toggle source
# File lib/resque/plugins/job_history/cleaner.rb, line 125
def job_support_keys(history_base)
  ["#{history_base.job_history_base_key}.running_jobs",
   "#{history_base.job_history_base_key}.total_running_jobs",
   "#{history_base.job_history_base_key}.running_job_classes",
   "#{history_base.job_history_base_key}.linear_jobs",
   "#{history_base.job_history_base_key}.total_linear_jobs",
   "#{history_base.job_history_base_key}.linear_job_classes",
   "#{history_base.job_history_base_key}.finished_jobs",
   "#{history_base.job_history_base_key}.total_finished_jobs",
   "#{history_base.job_history_base_key}.finished_job_classes",
   "#{history_base.job_history_base_key}.max_jobs",
   "#{history_base.job_history_base_key}.total_failed"]
end
redis() click to toggle source
# File lib/resque/plugins/job_history/cleaner.rb, line 149
def redis
  @redis ||= Resque::Plugins::JobHistory::HistoryDetails.new("").redis
end
unknown_job_keys(class_name) click to toggle source
# File lib/resque/plugins/job_history/cleaner.rb, line 139
def unknown_job_keys(class_name)
  keys = job_keys(class_name)
  keys -= job_id_keys(class_name,
                      Resque::Plugins::JobHistory::HistoryList.new(class_name, "running").job_ids)
  keys -= job_id_keys(class_name,
                      Resque::Plugins::JobHistory::HistoryList.new(class_name, "finished").job_ids)
  keys - job_id_keys(class_name,
                     Resque::Plugins::JobHistory::HistoryList.new("", "linear").job_ids)
end