class Delayed::Worker

Constants

DEFAULT_LOG_LEVEL

Public Class Methods

backend=(backend) click to toggle source
# File lib/delayed_job_memento/delayed/worker.rb, line 8
def self.backend=(backend)
  if backend.is_a? Symbol
    require "delayed/serialization/#{backend}"
    require "delayed/backend/#{backend}"
    backend = "Delayed::Backend::#{backend.to_s.classify}::Job".constantize
  end
  @@backend = backend
  silence_warnings { ::Delayed.const_set(:Job, backend) }
end

Public Instance Methods

failed(job) click to toggle source
# File lib/delayed_job_memento/delayed/worker.rb, line 48
def failed(job)
  self.class.lifecycle.run_callbacks(:failure, self, job) do
    job.hook(:failure)
    if self.class.destroy_failed_jobs
      save_as_memento(job)
      job.destroy
    else
      job.fail!
    end
  end
end
job_say(job, text, level = DEFAULT_LOG_LEVEL) click to toggle source
# File lib/delayed_job_memento/delayed/worker.rb, line 60
def job_say(job, text, level = DEFAULT_LOG_LEVEL)
  text = "Job #{job.name} (id=#{job.id}) #{text}"
  say text, level
end
run(job) click to toggle source
# File lib/delayed_job_memento/delayed/worker.rb, line 25
def run(job)
  instances = Delayed::Quota.instances
  if job.queue != nil && instances.has_key?(job.queue) && instances[job.queue].quota_reached?
    instances[job.queue].rebalance_queue
    return false
  else
    job_say job, 'RUNNING'
    runtime = Benchmark.realtime do
      Timeout.timeout(self.class.max_run_time.to_i, WorkerTimeout) { job.invoke_job }
      save_as_memento(job)
      job.destroy
    end
    job_say job, 'COMPLETED after %.4f' % runtime
    return true # did work
  end
rescue DeserializationError => error
  job.last_error = "#{error.message}\n#{error.backtrace.join("\n")}"
  failed(job)
rescue Exception => error
  self.class.lifecycle.run_callbacks(:error, self, job) { handle_failed_job(job, error) }
  return false # work failed
end
save_as_memento(job) click to toggle source
# File lib/delayed_job_memento/delayed/worker.rb, line 18
def save_as_memento(job)
  params = job.attributes
  attrs = ['run_at', 'priority', 'handler', 'queue', 'locked_at', 'locked_by', 'attempts', 'failed_at', 'last_error']
  params.delete_if { |k| !attrs.include? k }
  Delayed::Memento.create(params)
end