class Rpush::Daemon::SignalHandler

Attributes

thread[R]

Public Class Methods

handle_hup() click to toggle source
# File lib/rpush/daemon/signal_handler.rb, line 57
def self.handle_hup
  Rpush.logger.reopen
  Rpush.logger.info('Received HUP signal.')
  Rpush::Daemon.store.reopen_log
  Synchronizer.sync
  Feeder.wakeup
end
handle_usr2() click to toggle source
# File lib/rpush/daemon/signal_handler.rb, line 65
def self.handle_usr2
  Rpush.logger.info('Received USR2 signal.')
  AppRunner.debug
end
start() click to toggle source
# File lib/rpush/daemon/signal_handler.rb, line 10
def self.start
  return unless trap_signals?

  read_io, @write_io = IO.pipe
  start_handler(read_io)
  %w(INT TERM HUP USR2).each do |signal|
    Signal.trap(signal) { @write_io.puts(signal) }
  end
end
start_handler(read_io) click to toggle source
# File lib/rpush/daemon/signal_handler.rb, line 30
def self.start_handler(read_io)
  @thread = Thread.new do
    while readable_io = IO.select([read_io]) # rubocop:disable AssignmentInCondition
      signal = readable_io.first[0].gets.strip

      begin
        case signal
        when 'HUP'
          handle_hup
        when 'USR2'
          handle_usr2
        when 'INT', 'TERM'
          Thread.new { Rpush::Daemon.shutdown }
          break
        when 'break'
          break
        else
          Rpush.logger.error("Unhandled signal: #{signal}")
        end
      rescue StandardError => e
        Rpush.logger.error("Error raised when handling signal '#{signal}'")
        Rpush.logger.error(e)
      end
    end
  end
end
stop() click to toggle source
# File lib/rpush/daemon/signal_handler.rb, line 20
def self.stop
  @write_io.puts('break') if @write_io
  @thread.join if @thread
rescue StandardError => e
  log_error(e)
  reflect(:error, e)
ensure
  @thread = nil
end
trap_signals?() click to toggle source
# File lib/rpush/daemon/signal_handler.rb, line 70
def self.trap_signals?
  !Rpush.config.embedded
end