class Assistor::Daemon

Public Class Methods

new(configuration) click to toggle source
# File lib/assistor/daemon.rb, line 7
def initialize(configuration)
  @configuration = configuration
end

Public Instance Methods

name() click to toggle source
# File lib/assistor/daemon.rb, line 11
def name
  [:assistor, id].join ':'
end
run(queue) click to toggle source
# File lib/assistor/daemon.rb, line 15
def run(queue)
  start
  loop do
    sleep(delay) unless assist(queue)
  end
rescue => e
  log_file.error e
end

Private Instance Methods

assist(queue) click to toggle source
# File lib/assistor/daemon.rb, line 52
def assist(queue)
  assistant_group.flush
  return if assistant_group.filled?
  return unless job = queue.pop

  assistant = Assistant.new(@configuration, job)
  assistant.assist

  assistant_group.add(assistant)
rescue => e
  log_file.error e
end
assistant_group() click to toggle source
# File lib/assistor/daemon.rb, line 121
def assistant_group
  @assistant_group ||= AssistantGroup.new(size)
end
daemonize() click to toggle source
# File lib/assistor/daemon.rb, line 65
def daemonize
  Process.daemon(true, true)
end
decrease() click to toggle source
# File lib/assistor/daemon.rb, line 73
def decrease
  assistant_group.decrease
end
handle_int_signal() click to toggle source
# File lib/assistor/daemon.rb, line 100
def handle_int_signal
  Signal.trap('INT') do
    Thread.new { stop! }.join
    exit
  end
end
handle_quit_signal() click to toggle source
# File lib/assistor/daemon.rb, line 107
def handle_quit_signal
  Signal.trap('QUIT') do
    Thread.new { stop }.join
  end
end
handle_signals() click to toggle source
# File lib/assistor/daemon.rb, line 85
def handle_signals
  handle_term_signal
  handle_int_signal
  handle_quit_signal
  handle_usr1_signal
  handle_usr2_signal
end
handle_term_signal() click to toggle source
# File lib/assistor/daemon.rb, line 93
def handle_term_signal
  Signal.trap('TERM') do
    Thread.new { stop! }.join
    exit
  end
end
handle_usr1_signal() click to toggle source
# File lib/assistor/daemon.rb, line 113
def handle_usr1_signal
  Signal.trap('USR1') { increase }
end
handle_usr2_signal() click to toggle source
# File lib/assistor/daemon.rb, line 117
def handle_usr2_signal
  Signal.trap('USR2') { decrease }
end
increase() click to toggle source
# File lib/assistor/daemon.rb, line 69
def increase
  assistant_group.increase
end
pid() click to toggle source
# File lib/assistor/daemon.rb, line 81
def pid
  @pid ||= Process.pid
end
set_process_title() click to toggle source
# File lib/assistor/daemon.rb, line 77
def set_process_title
  $0 = name
end
start() click to toggle source
# File lib/assistor/daemon.rb, line 26
def start
  daemonize
  log_file.reopen
  handle_signals
  set_process_title
  pid_file.create pid
end
stop() click to toggle source
# File lib/assistor/daemon.rb, line 34
def stop
  assistant_group.wait
  assistant_group.flush
  pid_file.delete
  exit!(0)
rescue => e
  log_file.error e
end
stop!() click to toggle source
# File lib/assistor/daemon.rb, line 43
def stop!
  assistant_group.stop
  assistant_group.flush
  pid_file.delete
  exit!(1)
rescue => e
  log_file.error e
end