class Assistor::Assistant

Attributes

pid[R]

Public Class Methods

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

Public Instance Methods

assist() click to toggle source
# File lib/assistor/assistant.rb, line 22
def assist
  @pid = Process.fork do
    start
    process
    stop
  end
  detach
rescue => e
  log_file.error e
end
assists?() click to toggle source
# File lib/assistor/assistant.rb, line 33
def assists?
  Process.kill(0, pid)
rescue Errno::ESRCH
  false
end
id() click to toggle source
# File lib/assistor/assistant.rb, line 14
def id
  @id ||= [@configuration.id, @job.id].join ':'
end
name() click to toggle source
# File lib/assistor/assistant.rb, line 18
def name
  @name ||= [:assistor, id].join ':'
end

Private Instance Methods

detach() click to toggle source
# File lib/assistor/assistant.rb, line 98
def detach
  Process.detach pid
end
handle_int_signal() click to toggle source
# File lib/assistor/assistant.rb, line 81
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/assistant.rb, line 88
def handle_quit_signal
  Signal.trap('QUIT') do
    Thread.new { stop }.join
  end
end
handle_signals() click to toggle source
# File lib/assistor/assistant.rb, line 68
def handle_signals
  handle_term_signal
  handle_int_signal
  handle_quit_signal
end
handle_term_signal() click to toggle source
# File lib/assistor/assistant.rb, line 74
def handle_term_signal
  Signal.trap('TERM') do
    Thread.new { stop! }.join
    exit
  end
end
pid_file() click to toggle source
# File lib/assistor/assistant.rb, line 102
def pid_file
  @pid_file ||= PidFile.new File.join(Dir.tmpdir, format('%s.pid', Process.pid))
end
process() click to toggle source
# File lib/assistor/assistant.rb, line 47
def process
  with_pid_file { @job.run }
rescue => e
  log_file.error e
  @job.fail e
end
set_process_title() click to toggle source
# File lib/assistor/assistant.rb, line 94
def set_process_title
  $0 = name
end
start() click to toggle source
# File lib/assistor/assistant.rb, line 41
def start
  log_file.reopen
  handle_signals
  set_process_title
end
stop() click to toggle source
# File lib/assistor/assistant.rb, line 54
def stop
  return if pid_file.exist?
  exit!(0)
rescue => e
  log_file.error e
end
stop!() click to toggle source
# File lib/assistor/assistant.rb, line 61
def stop!
  pid_file.delete
  exit!(1)
rescue => e
  log_file.error e
end
with_pid_file() { || ... } click to toggle source
# File lib/assistor/assistant.rb, line 106
def with_pid_file
  pid_file.create Process.pid
  yield
  pid_file.delete
end