module Pushr::Daemon

Attributes

config[RW]
feedback_handler[RW]
logger[RW]

Public Class Methods

start(config) click to toggle source
# File lib/pushr/daemon.rb, line 19
def self.start(config)
  self.config = config
  self.logger = Logger.new(foreground: config.foreground, error_notification: config.error_notification)
  setup_signal_hooks

  daemonize unless config.foreground

  start_app

  logger.info('[Daemon] Ready')

  sleep 1 until @shutting_down
end

Protected Class Methods

daemonize() click to toggle source
# File lib/pushr/daemon.rb, line 87
def self.daemonize
  exit if fork
  Process.setsid
  exit if fork

  Dir.chdir '/'
  File.umask 0000

  STDIN.reopen '/dev/null'
  STDOUT.reopen '/dev/null', 'a'
  STDERR.reopen STDOUT
  PidFile.write(config.pid_file)
end
handle_shutdown_signal() click to toggle source
# File lib/pushr/daemon.rb, line 68
def self.handle_shutdown_signal
  exit 1 if @shutting_down
  @shutting_down = true
  shutdown
end
load_stats_processor() click to toggle source
# File lib/pushr/daemon.rb, line 52
def self.load_stats_processor
  require "#{Dir.pwd}/#{config.stats_processor}" if config.stats_processor
rescue => e
  logger.error("Failed to stats_processor: #{e.inspect}")
end
scale_redis_connections() click to toggle source
# File lib/pushr/daemon.rb, line 44
def self.scale_redis_connections
  # feedback handler + app + app.totalconnections
  connections = 1 + 1 + App.total_connections
  Pushr::Core.configure do |config|
    config.redis = { size: connections }
  end
end
setup_signal_hooks() click to toggle source
# File lib/pushr/daemon.rb, line 58
def self.setup_signal_hooks
  @shutting_down = false

  %w(SIGINT SIGTERM).each do |signal|
    Signal.trap(signal) do
      handle_shutdown_signal
    end
  end
end
shutdown() click to toggle source
# File lib/pushr/daemon.rb, line 74
def self.shutdown
  print "\nShutting down..."
  feedback_handler.stop
  App.stop

  while Thread.list.count > 1
    sleep 0.1
    print '.'
  end
  print "\n"
  PidFile.delete(config.pid_file)
end
start_app() click to toggle source
# File lib/pushr/daemon.rb, line 35
def self.start_app
  load_stats_processor
  App.load
  scale_redis_connections
  App.start
  self.feedback_handler = FeedbackHandler.new(config.feedback_processor)
  feedback_handler.start
end