class Toro::Processor

Attributes

proxy_id[RW]

Public Class Methods

default_middleware() click to toggle source
# File lib/toro/processor.rb, line 8
def default_middleware
  Middleware::Chain.new do |middleware|
    middleware.add Middleware::Server::Properties
    middleware.add Middleware::Server::Retry
    middleware.add Middleware::Server::ErrorStorage
    middleware.add Middleware::Server::Error
  end
end
new(manager) click to toggle source
# File lib/toro/processor.rb, line 18
def initialize(manager)
  @manager = manager
end

Public Instance Methods

process(job) click to toggle source
# File lib/toro/processor.rb, line 22
def process(job)
  @manager.set_thread(proxy_id, Thread.current)

  Toro.logger.info "Processing #{job}"
  worker = job.class_name.constantize

  Toro::Database.with_connection do
    begin
      Toro.server_middleware.invoke(job, worker) do
        worker.new.perform(*job.args)
      end
    rescue Exception => exception
      Toro.logger.error "#{exception.class}: #{exception.message}"
      Toro.logger.error exception.backtrace.join("\n")
    else
      Toro.logger.info "Processed #{job}"
      job.update_attributes(
        status: 'complete',
        finished_at: Time.now
      )
    end
  end
  
  @manager.processor_complete(current_actor) if @manager.alive?
end