Sha256: 4050d273d21e998f1f2a97ea2c8ca15133d6f46f4c439f33b58a423bed9fbfa8

Contents?: true

Size: 1.23 KB

Versions: 2

Compression:

Stored size: 1.23 KB

Contents

require 'logger'

module Quebert
  class Worker
    attr_accessor :exception_handler, :logger, :backend
    
    def initialize
      yield self if block_given?
    end
    
    # Start the worker backend and intercept exceptions if a handler is provided
    def start
      logger.info "Worker pid##{Process.pid} started with #{backend.class.name} backend"
      while consumer = backend.reserve do
        begin
          log consumer.job, "performing with args #{consumer.job.args.inspect}"
          consumer.perform
          log consumer.job, "complete"
        rescue Exception => e
          log consumer.job, "fault #{e}", :error
          exception_handler ? exception_handler.call(e) : raise(e)
        end
      end
    end
    
  protected
    # Setup a bunch of stuff with Quebert config defaults the we can override later.
    def logger
      @logger ||= Quebert.logger
    end
    
    def backend
      @backend ||= Quebert.config.backend
    end
    
    def exception_handler
      @exception_handler ||= Quebert.config.worker.exception_handler
    end
    
    # Making logging jobs a tiny bit easier..
    def log(job, message, level=:info)
      logger.send(level, "#{job.class.name}##{job.object_id}: #{message}")
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
quebert-0.0.4 lib/quebert/worker.rb
quebert-0.0.3 lib/quebert/worker.rb