class Coolie::Worker

Constants

UNCAUGHT_ERROR

Public Class Methods

new(job, output) click to toggle source
# File lib/coolie/worker.rb, line 5
def initialize(job, output)
  @job = job
  @output = output
  setup
end

Public Instance Methods

start() click to toggle source
# File lib/coolie/worker.rb, line 11
def start
  trap_signals

  loop do
    break if stopped?
    perform_job
  end

  exit 0
end

Private Instance Methods

perform_job() click to toggle source
# File lib/coolie/worker.rb, line 24
def perform_job
  if child = fork
    _, status = Process.waitpid2 child
    @output.write UNCAUGHT_ERROR unless status.success? || stopped?
  else
    self.process_name = "Child of worker #{Process.ppid}"
    begin
      @job.perform
      exit 0
    rescue Exception
      exit 1
    end
  end
end
process_name=(name) click to toggle source
# File lib/coolie/worker.rb, line 57
def process_name=(name)
  $0 = name
end
setup() click to toggle source
# File lib/coolie/worker.rb, line 53
def setup
  @job.setup if @job.respond_to? :setup
end
stop() click to toggle source
# File lib/coolie/worker.rb, line 45
def stop
  @stopped = true
end
stopped?() click to toggle source
# File lib/coolie/worker.rb, line 49
def stopped?
  @stopped
end
trap_signals() click to toggle source
# File lib/coolie/worker.rb, line 39
def trap_signals
  Signal.trap('INT') do
    stop
  end
end