class Subservient::Job

Attributes

bs_job[R]
input[R]
task[R]
task_method[R]

Public Class Methods

new(bs_job) click to toggle source
# File lib/subservient/job.rb, line 7
def initialize bs_job
  @bs_job      = bs_job
  @input       = JSON.parse (@bs_job.body)

  task_str     = @input.fetch('task')
  arr          = task_str.rpartition('#').reject { |e| e.empty? or e == '#' }
  @task_method = (arr[1] || :process).to_sym
  task_class   = Object.const_get(arr[0])
  raise MissingTaskError unless task_class.ancestors.include? Subservient::Task
  @task        = task_class.new self
  raise MissingTaskError unless @task.respond_to? @task_method
rescue JSON::JSONError, KeyError
  raise MalformedJobError
rescue NameError
  raise MissingTaskError
end

Public Instance Methods

execute() click to toggle source
# File lib/subservient/job.rb, line 24
def execute
  @bs_job.delete
  @task.execute_job
rescue RetryJob => e
  if e.max_retries and e.max_retries < @bs_job.stats.retries
    puts "#{e.inspect} - RELEASING JOB #{@job.bs_job.id}"
    puts e.backtrace
    @bs_job.release
  else
    puts "#{e.inspect} - BURYING JOB (EXCEEDED MAX RETRIES) #{@job.bs_job.id}"
    puts e.backtrace
    @bs_job.bury
  end
rescue BuryJob => e
  puts "#{e.inspect} - BURYING JOB #{@job.bs_job.id}"
  puts e.backtrace
  @bs_job.bury
end