Sha256: 2e52a943f2ccebdc28d23f7121d8fa26030472800d7f728702e4b05760a1ae83

Contents?: true

Size: 1016 Bytes

Versions: 1

Compression:

Stored size: 1016 Bytes

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
    def log(job, message, level=:info)
      logger.send(level, "#{job.class.name}##{job.object_id}: #{message}")
    end
    
    def logger
      @logger ||= Quebert.logger
    end
    
    def backend
      @backend ||= Quebert.config.backend
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
quebert-0.0.1 lib/quebert/worker.rb