Class: Resque::Plugins::MultiStepTask::FinalizationJob

Inherits:
Object
  • Object
show all
Extended by:
Constantization
Defined in:
lib/resque/plugins/multi_step_task/finalization_job.rb

Overview

Executes a single finalization job

Class Method Summary collapse

Methods included from Constantization

constantize

Class Method Details

.loggerObject



38
39
40
# File 'lib/resque/plugins/multi_step_task/finalization_job.rb', line 38

def self.logger
  Resque::Plugins::MultiStepTask.logger
end

.perform(task_id, job_module_name, *args) ⇒ Object

Handle job invocation



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/resque/plugins/multi_step_task/finalization_job.rb', line 11

def self.perform(task_id, job_module_name, *args)
  task = MultiStepTask.find(task_id)
  
  begin
    klass = constantize(job_module_name)
    klass.singleton_class.class_eval "def multi_step_task; @@task ||= MultiStepTask.find('#{task_id}'); end"
    klass.singleton_class.class_eval "def multi_step_task_id; @@task_id ||= '#{task_id}'; end"
    klass.perform(*args)
  rescue Exception
    logger.info("[Resque Multi-Step-Task] Incrementing failed_count: Finalization job #{job_module_name} failed for task id #{task_id} at #{Time.now} (args: #{args})")
    task.increment_failed_count
    raise
  end
  logger.info("[Resque Multi-Step-Task] Incrementing completed_count: Finalization job #{job_module_name} completed for task id #{task_id} at #{Time.now} (args: #{args})")          
  task.increment_completed_count

  if fin_job_info = task.redis.lpop('finalize_jobs')
    # Queue the next finalization job
    Resque::Job.create(task.queue_name, FinalizationJob, task.task_id, 
                       *Yajl::Parser.parse(fin_job_info))
  else
    # There is nothing left to do so cleanup.
    task.nuke
  end

end