class Sidejobs::Daemon

Public Instance Methods

pid() click to toggle source
# File lib/sidejobs/daemon.rb, line 38
def pid
  File.read(pid_path).to_i rescue nil
end
restart() click to toggle source
# File lib/sidejobs/daemon.rb, line 30
def restart
  if running?
    Process.kill :HUP, pid
  else
    start
  end
end
running?() click to toggle source
# File lib/sidejobs/daemon.rb, line 5
def running?
  if pid
    begin
      Process.kill 0, pid
      true
    rescue Errno::ESRCH
      false
    end
  else
    false
  end
end
start() click to toggle source
# File lib/sidejobs/daemon.rb, line 18
def start
  unless running?
    spawn
  end
end
stop() click to toggle source
# File lib/sidejobs/daemon.rb, line 24
def stop
  if running?
    Process.kill :TERM, pid
  end
end

Private Instance Methods

daemonize() click to toggle source
# File lib/sidejobs/daemon.rb, line 51
def daemonize
  Process.daemon
end
delete_pid() click to toggle source
# File lib/sidejobs/daemon.rb, line 64
def delete_pid
  FileUtils.rm_rf pid_path
end
handle_signal() click to toggle source
# File lib/sidejobs/daemon.rb, line 81
def handle_signal
  case @signal
  when :stop
    delete_pid
  when :restart
    @signal = nil
    spawn
  end
end
pid_path() click to toggle source
# File lib/sidejobs/daemon.rb, line 73
def pid_path
  Rails.root.join 'tmp/sidejobs.pid'
end
process() click to toggle source
# File lib/sidejobs/daemon.rb, line 95
def process
  logger.info "Started #{pid} at #{Time.zone.now}"
  until signal_received? do
    processor.process
    sleep Sidejobs.configuration.sleep_delay
  end
  logger.info "Stopped #{pid} at #{Time.zone.now}"
  handle_signal
end
processor() click to toggle source
# File lib/sidejobs/daemon.rb, line 77
def processor
  @processor ||= Processor.new
end
signal_received?() click to toggle source
# File lib/sidejobs/daemon.rb, line 91
def signal_received?
  @signal.present?
end
spawn() click to toggle source
# File lib/sidejobs/daemon.rb, line 44
def spawn
  daemonize
  write_pid
  trap_signals
  process
end
trap_signals() click to toggle source
# File lib/sidejobs/daemon.rb, line 55
def trap_signals
  trap :TERM do
    @signal = :stop
  end
  trap :HUP do
    @signal = :restart
  end
end
write_pid() click to toggle source
# File lib/sidejobs/daemon.rb, line 68
def write_pid
  FileUtils.mkdir_p pid_path.dirname
  File.write pid_path, Process.pid
end