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