module RabbitJobs::Job
Module to include in client jobs.
Attributes
created_at[RW]
Private Class Methods
included(base)
click to toggle source
# File lib/rabbit_jobs/job.rb, line 100 def included(base) base.extend(ClassMethods) base.queue(:jobs) end
parse(payload)
click to toggle source
# File lib/rabbit_jobs/job.rb, line 78 def parse(payload) encoded = JSON.parse(payload) job_klass = encoded['class'].to_s.constantize job = job_klass.new job.created_at = encoded['created_at'] [job, encoded['params']] rescue NameError [:not_found, encoded['class']] rescue JSON::ParserError [:parsing_error, payload] rescue [:error, $!, payload] end
serialize(klass_name, *params)
click to toggle source
# File lib/rabbit_jobs/job.rb, line 92 def serialize(klass_name, *params) { 'class' => klass_name.to_s, 'created_at' => Time.now.to_i, 'params' => params }.to_json end
Public Instance Methods
expired?()
click to toggle source
# File lib/rabbit_jobs/job.rb, line 8 def expired? exp_in = self.class.expires_in.to_i return false if exp_in == 0 || created_at.nil? Time.now.to_i > created_at + exp_in end
to_ruby_string(*params)
click to toggle source
# File lib/rabbit_jobs/job.rb, line 15 def to_ruby_string(*params) rs = self.class.name + params_string(*params) rs << ", created_at: #{created_at}" if created_at rs end
Private Instance Methods
log_job_error(error, *params)
click to toggle source
# File lib/rabbit_jobs/job.rb, line 31 def log_job_error(error, *params) RabbitJobs.logger.error( short_message: (error.message.presence || 'rj_worker job error'), _job: to_ruby_string, _exception: error.class, full_message: error.backtrace.join("\r\n")) Airbrake.notify(error, session: { args: to_ruby_string(*params) }) if defined?(Airbrake) end
params_string(*params)
click to toggle source
# File lib/rabbit_jobs/job.rb, line 23 def params_string(*params) if params.count > 0 "(#{params.map(&:to_s).join(', ')})" else '' end end
run_on_error_hooks(error, *params)
click to toggle source
# File lib/rabbit_jobs/job.rb, line 52 def run_on_error_hooks(error, *params) return unless self.class.on_error_hooks.try(:present?) self.class.on_error_hooks.each do |proc_or_symbol| proc = if proc_or_symbol.is_a?(Symbol) method(proc_or_symbol) else proc_or_symbol end begin case proc.arity when 0 proc.call when 1 proc.call(error) else proc.call(error, *params) end rescue RJ.logger.error($!) end end end
run_perform(*params)
click to toggle source
# File lib/rabbit_jobs/job.rb, line 41 def run_perform(*params) ret = nil execution_time = Benchmark.measure { ret = perform(*params) } RabbitJobs.logger.info( short_message: "Completed: #{to_ruby_string(*params)}", _execution_time: execution_time.to_s.strip) rescue ScriptError, StandardError log_job_error($!, *params) run_on_error_hooks($!, *params) end