class Sidekiq::Superworker::SuperjobProcessor

Public Class Methods

complete(superjob_id) click to toggle source
# File lib/sidekiq/superworker/superjob_processor.rb, line 33
def self.complete(superjob_id)
  Superworker.debug "Superworker ##{superjob_id}: Complete"

  Subjob.delete_subjobs_for(superjob_id) if Superworker.options[:delete_subjobs_after_superjob_completes]
  
  # Set the superjob Sidekiq::Monitor::Job as being complete
  if defined?(Sidekiq::Monitor)
    job = Sidekiq::Monitor::Job.where(queue: queue_name, jid: superjob_id).first
    if job
      job.update_attributes(
        status: 'complete',
        finished_at: Time.now
      )
    end
  end
end
create(superjob_id, superworker_class_name, args, subjobs, options={}) click to toggle source
# File lib/sidekiq/superworker/superjob_processor.rb, line 8
def self.create(superjob_id, superworker_class_name, args, subjobs, options={})
  Superworker.debug "Superworker ##{superjob_id}: Create"
  
  options ||= {}
  
  # If sidekiq_monitor is being used, create a Sidekiq::Monitor::Job for the superjob
  if defined?(Sidekiq::Monitor)
    now = Time.now
    Sidekiq::Monitor::Job.create(
      jid: superjob_id,
      queue: queue_name,
      class_name: superworker_class_name,
      args: args,
      enqueued_at: now,
      started_at: now,
      status: 'running',
      name: options[:name]
    )
  end

  # Enqueue the first root-level subjob
  first_subjob = subjobs.find { |subjob| subjob.parent_id.nil? }
  SubjobProcessor.enqueue(first_subjob)
end
error(superjob_id, worker, item, exception) click to toggle source
# File lib/sidekiq/superworker/superjob_processor.rb, line 50
def self.error(superjob_id, worker, item, exception)
  Superworker.debug "Superworker ##{superjob_id}: Error"

  if defined?(Sidekiq::Monitor)
    job = Sidekiq::Monitor::Job.where(queue: queue_name, jid: superjob_id).first
    if job
      result = {
        message: "#{exception.message} (thrown in #{worker.class}, JID: #{item['jid']})",
        backtrace: exception.backtrace
      }
      job.update_attributes(
        finished_at: DateTime.now,
        status: 'failed',
        result: result
      )
    end
  end
end
queue_name() click to toggle source
# File lib/sidekiq/superworker/superjob_processor.rb, line 4
def self.queue_name
  :superworker
end