class Delayed::Backend::NoBrainer::Job
A job object that is persisted to the database. Contains the work object as a YAML field.
Public Class Methods
clear_locks!(worker_name)
click to toggle source
# File lib/delayed/backend/nobrainer.rb, line 45 def self.clear_locks!(worker_name) where(locked_by: worker_name).update_all(locked_by: nil, locked_at: nil) end
db_time_now()
click to toggle source
Get the current time (GMT or local depending on DB) Note: This does not ping the DB to get the time, so all your clients must have syncronized clocks.
# File lib/delayed/backend/nobrainer.rb, line 37 def self.db_time_now if Time.zone Time.zone.now else Time.now end end
reserve(worker, max_run_time = Worker.max_run_time)
click to toggle source
# File lib/delayed/backend/nobrainer.rb, line 49 def self.reserve(worker, max_run_time = Worker.max_run_time) # Taken from Active Record # where("(run_at <= ? AND (locked_at IS NULL OR locked_at < ?) OR locked_by = ?) AND failed_at IS NULL", db_time_now, db_time_now - max_run_time, worker_name) # "priority >= ?", Worker.min_priority if Worker.min_priority # "priority <= ?", Worker.max_priority) if Worker.max_priority # where(queue: Worker.queues) if Worker.queues.any? # order("priority ASC, run_at ASC") } filter_hash = { :failed_at.defined => false, :run_at.le => db_time_now, :or => [{:locked_at.defined => false}, {:locked_at.lt => db_time_now - max_run_time}, :locked_by => worker.name] } filter_hash = filter_hash.merge({:priority.ge => Worker.min_priority}) if Worker.min_priority filter_hash = filter_hash.merge({:priority.le => Worker.max_priority}) if Worker.max_priority filter_hash = filter_hash.merge({:queue.in => Worker.queues}) if Worker.queues.any? job = where(filter_hash).order_by(:priority => :asc).order_by(:created_at => :asc).first job.update(locked_at: Time.now, locked_by: worker.name) unless job.nil? job end
Public Instance Methods
error()
click to toggle source
# File lib/delayed/backend/nobrainer.rb, line 70 def error unless instance_variable_defined?(:@error) if last_error backtrace = last_error.split("\n") message = backtrace.shift @error = Exception.new(message) @error.set_backtrace(backtrace) else @error = nil end end @error end
error=(error)
click to toggle source
# File lib/delayed/backend/nobrainer.rb, line 84 def error=(error) @error = error self.last_error = "#{error.message}\n#{error.backtrace.join("\n")}"[0..250].gsub(/\s\w+\s*$/,'...') if self.respond_to?(:last_error=) end