Class: Delayed::Worker

Inherits:
Object
  • Object
show all
Includes:
HoptoadNotifier::Catcher
Defined in:
lib/delayed_job_extras/worker.rb

Constant Summary collapse

PRIORITY_LEVELS =
{:immediate => 10000, :high => 1000, :medium => 500, :normal => 0, :low => -100, :who_cares => -1000}
@@logger =
SplitLogger.new

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#dj_objectObject

Returns the value of attribute dj_object.



6
7
8
# File 'lib/delayed_job_extras/worker.rb', line 6

def dj_object
  @dj_object
end

#loggerObject

Returns the value of attribute logger.



7
8
9
# File 'lib/delayed_job_extras/worker.rb', line 7

def logger
  @logger
end

Class Method Details

.enqueue(*args) ⇒ Object

VideoWorker.enqueue(1) # => Delayed::Job.enqueue(VideoWorker.new(1))



72
73
74
# File 'lib/delayed_job_extras/worker.rb', line 72

def enqueue(*args)
  self.new(*args).enqueue
end

.loggerObject



49
50
51
# File 'lib/delayed_job_extras/worker.rb', line 49

def logger
  @@logger
end

.logger=(logger) ⇒ Object



53
54
55
# File 'lib/delayed_job_extras/worker.rb', line 53

def logger=(logger)
  @@logger = logger
end

.method_missing(sym, *args) ⇒ Object

VideoWorker.encode(1) # => Delayed::Job.enqueue(VideoWorker.new(:encode, 1))



67
68
69
# File 'lib/delayed_job_extras/worker.rb', line 67

def method_missing(sym, *args)
  self.enqueue(sym, *args)
end

.perform(&block) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/delayed_job_extras/worker.rb', line 76

def perform(&block)
  define_method(:perform) do
    dj_id = 'unknown'
    dj_id = self.dj_object.id if self.dj_object
    begin
      self.logger.info("Starting #{self.class.name}#perform (DJ.id = '#{dj_id}')")
      val = self.instance_eval(&block)
      self.logger.info("Completed #{self.class.name}#perform (DJ.id = '#{dj_id}') [SUCCESS]")
      return val
    rescue Exception => e
      # send to hoptoad!
      notify_hoptoad(e)
      self.logger.info("Halted #{self.class.name}#perform (DJ.id = '#{dj_id}') [FAILURE]")
      raise e
    end
  end
end

.priority(level = 0) ⇒ Object



57
58
59
60
61
62
63
64
# File 'lib/delayed_job_extras/worker.rb', line 57

def priority(level = 0)
  define_method('priority') do
    if level.is_a?(Symbol)
      level = Delayed::Worker::PRIORITY_LEVELS[level] ||= 0
    end
    return @priority ||= level
  end
end

Instance Method Details

#enqueue(priority = self.priority, run_at = self.run_at) ⇒ Object



41
42
43
# File 'lib/delayed_job_extras/worker.rb', line 41

def enqueue(priority = self.priority, run_at = self.run_at)
  Delayed::Job.enqueue(self, priority, run_at)
end

#notify_hoptoad(e) ⇒ Object



28
29
30
# File 'lib/delayed_job_extras/worker.rb', line 28

def notify_hoptoad(e)
  logger.error(e)
end

#priorityObject



13
14
15
# File 'lib/delayed_job_extras/worker.rb', line 13

def priority
  return @priority ||= 0
end

#priority=(x) ⇒ Object



9
10
11
# File 'lib/delayed_job_extras/worker.rb', line 9

def priority=(x)
  @priority = x
end

#run_atObject



21
22
23
# File 'lib/delayed_job_extras/worker.rb', line 21

def run_at
  return @run_at ||= Time.now
end

#run_at=(x) ⇒ Object



17
18
19
# File 'lib/delayed_job_extras/worker.rb', line 17

def run_at=(x)
  @run_at = x
end

#worker_class_nameObject



33
34
35
# File 'lib/delayed_job_extras/worker.rb', line 33

def worker_class_name
  self.class.to_s.underscore
end