class Resque::Plugins::JobHistory::Job
a class encompassing a single job.
Attributes
job_id[RW]
Public Class Methods
new(class_name, job_id)
click to toggle source
Calls superclass method
Resque::Plugins::JobHistory::HistoryDetails::new
# File lib/resque/plugins/job_history/job.rb, line 12 def initialize(class_name, job_id) super(class_name) @stored_values = nil @job_id = job_id end
Public Instance Methods
abort()
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 102 def abort running_jobs.remove_job(job_id) reset end
args()
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 47 def args decode_args(stored_values[:args]) end
blank?()
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 31 def blank? !redis.exists job_key end
cancel(caller_message = nil, start_time = nil, *args)
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 108 def cancel(caller_message = nil, start_time = nil, *args) if start_time.present? record_job_start(start_time, *args) end if present? redis.hset(job_key, "error", "Unknown - Job failed to signal ending after the configured purge time or was canceled manually.#{caller_message}") end redis.incr(total_failed_key) finish end
duration()
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 39 def duration (end_time || Time.now) - (start_time || Time.now) end
end_time()
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 43 def end_time stored_values[:end_time].try(:to_time) end
error()
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 59 def error stored_values[:error] end
failed(exception, start_time = nil, *args)
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 91 def failed(exception, start_time = nil, *args) if start_time.present? record_job_start(start_time, *args) end redis.hset(job_key, "error", exception_message(exception)) if present? redis.incr(total_failed_key) finish end
finish(start_time = nil, *args)
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 74 def finish(start_time = nil, *args) if start_time.present? record_job_start(start_time, *args) end if present? redis.hset(job_key, "end_time", Time.now.utc.to_s) finished_jobs.add_job(job_id, class_name) end running_jobs.remove_job(job_id) reset self end
finished?()
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 27 def finished? stored_values[:end_time].present? end
job_key()
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 19 def job_key "#{job_history_base_key}.#{job_id}" end
purge()
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 138 def purge # To keep the counts honest... abort unless finished? remove_from_job_lists redis.del(job_key) reset end
retry()
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 124 def retry return unless described_class Resque.enqueue described_class, *args end
safe_purge()
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 130 def safe_purge return if running_jobs.includes_job?(job_id) return if finished_jobs.includes_job?(job_id) return if linear_jobs.includes_job?(job_id) purge end
start(*args)
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 63 def start(*args) record_job_start(Time.now.utc.to_s, *args) num_jobs = running_jobs.add_job(job_id, class_name) linear_jobs.add_job(job_id, class_name) unless class_exclude_from_linear_history record_num_jobs(num_jobs) self end
start_time()
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 23 def start_time stored_values[:start_time].try(:to_time) end
succeeded?()
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 35 def succeeded? error.blank? end
uncompressed_args()
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 51 def uncompressed_args return args if described_class.blank? || args.blank? return args unless described_class.singleton_class.included_modules.map(&:name).include?("Resque::Plugins::Compressible") return args unless described_class.compressed?(args) described_class.uncompressed_args(args.first[:payload] || args.first["payload"]) end
Private Instance Methods
decode_args(args_string)
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 180 def decode_args(args_string) Resque.decode(args_string) end
encode_args(*args)
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 176 def encode_args(*args) Resque.encode(args) end
exception_message(exception)
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 151 def exception_message(exception) if exception.is_a?(Resque::DirtyExit) "#{exception.message}\n\n#{exception.process_status.to_s}".strip else exception.message end end
record_job_start(start_time, *args)
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 165 def record_job_start(start_time, *args) redis.hset(job_key, "start_time", start_time) redis.hset(job_key, "args", encode_args(*args)) reset end
record_num_jobs(num_jobs)
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 184 def record_num_jobs(num_jobs) if redis.get(max_running_key).to_i < num_jobs redis.set(max_running_key, num_jobs) end return unless num_jobs >= class_history_len clean_old_running_jobs end
remove_from_job_lists()
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 159 def remove_from_job_lists running_jobs.remove_job(job_id) finished_jobs.remove_job(job_id) linear_jobs.remove_job(job_id) end
reset()
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 194 def reset @stored_values = nil end
stored_values()
click to toggle source
# File lib/resque/plugins/job_history/job.rb, line 172 def stored_values @stored_values ||= redis.hgetall(job_key).with_indifferent_access end