class DaemonKit::Initializer

This class does all the nightmare work of setting up a working environment for your daemon.

Attributes

configuration[R]

Public Class Methods

continue!() click to toggle source
# File lib/daemon_kit/initializer.rb, line 57
def self.continue!
  initializer = new DaemonKit.configuration
  initializer.after_daemonize
end
new( configuration ) click to toggle source
# File lib/daemon_kit/initializer.rb, line 89
def initialize( configuration )
  @configuration = configuration
end
run() { |configuration| ... } click to toggle source
# File lib/daemon_kit/initializer.rb, line 48
def self.run
  configuration = DaemonKit.configuration || Configuration.new

  yield configuration if block_given?
  initializer = new configuration
  initializer.before_daemonize
  initializer
end
safely_available?() click to toggle source
# File lib/daemon_kit/initializer.rb, line 85
def self.safely_available?
  defined? Safely
end
shutdown( clean = false, do_exit = false ) click to toggle source
# File lib/daemon_kit/initializer.rb, line 62
def self.shutdown( clean = false, do_exit = false )
  return unless $daemon_kit_shutdown_hooks_ran.nil?
  $daemon_kit_shutdown_hooks_ran = true

  DaemonKit.logger.info "Running shutdown hooks"

  DaemonKit.configuration.shutdown_hooks.each do |hook|
    begin
      hook.call
    rescue => e
      DaemonKit.logger.exception( e )
    end
  end

  if safely_available?
    Safely::Backtrace.safe_shutdown! if DaemonKit.configuration.backtraces && clean
  end

  DaemonKit.logger.warn "Shutting down #{DaemonKit.configuration.daemon_name}"

  exit if do_exit
end

Public Instance Methods

after_daemonize() click to toggle source
# File lib/daemon_kit/initializer.rb, line 103
def after_daemonize
  set_umask

  initialize_logger
  initialize_signal_traps

  include_core_lib
  load_postdaemonize_configs
  configure_exception_handling

  set_process_name

  DaemonKit.logger.info( "DaemonKit (#{DaemonKit.version}) booted, now running #{DaemonKit.configuration.daemon_name}" )

  if DaemonKit.configuration.user || DaemonKit.configuration.group
    euid = Process.euid
    egid = Process.egid
    uid = Process.uid
    gid = Process.gid
    DaemonKit.logger.info( "DaemonKit dropped privileges to: #{euid} (EUID), #{egid} (EGID), #{uid} (UID), #{gid} (GID)"  )
  end
end
before_daemonize() click to toggle source
# File lib/daemon_kit/initializer.rb, line 93
def before_daemonize
  DaemonKit.configuration = @configuration

  set_load_path
  load_gems
  load_patches
  load_environment
  load_predaemonize_configs
end
configure_exception_handling() click to toggle source
# File lib/daemon_kit/initializer.rb, line 210
def configure_exception_handling
  Thread.abort_on_exception = true

  configure_safely if self.class.safely_available?
end
configure_safely() click to toggle source
# File lib/daemon_kit/initializer.rb, line 216
def configure_safely
  DaemonKit.logger.info "Configuring safely for exception handling"
  Safely::Strategy::Log.logger = DaemonKit.logger

  Safely::Backtrace.trace_directory = File.join( DAEMON_ROOT, "log" )
  Safely::Backtrace.enable!
end
include_core_lib() click to toggle source
# File lib/daemon_kit/initializer.rb, line 204
def include_core_lib
  if File.exists?( core_lib = File.join( DAEMON_ROOT, 'lib', configuration.daemon_name + '.rb' ) )
    require core_lib
  end
end
initialize_logger() click to toggle source
# File lib/daemon_kit/initializer.rb, line 170
def initialize_logger
  return if DaemonKit.logger

  unless logger = configuration.logger
    logger = AbstractLogger.new( configuration.log_path )
    logger.level = configuration.log_level
    logger.copy_to_stdout = configuration.log_stdout
  end

  DaemonKit.logger = logger

  DaemonKit.logger.info "DaemonKit (#{DaemonKit.version}) booting in #{DAEMON_ENV} mode"

  configuration.trap("USR1") {
    DaemonKit.logger.level = DaemonKit.logger.debug? ? :info : :debug
    DaemonKit.logger.info "Log level changed to #{DaemonKit.logger.debug? ? 'DEBUG' : 'INFO' }"
  }
  configuration.trap("USR2") {
    DaemonKit.logger.level = :debug
    DaemonKit.logger.info "Log level changed to DEBUG"
  }
  configuration.trap("HUP") {
    DaemonKit::Application.reopen_logs
  }
end
initialize_signal_traps() click to toggle source
# File lib/daemon_kit/initializer.rb, line 196
def initialize_signal_traps
  # Only exit the process if we're not in the 'test' environment
  term_proc = Proc.new { DaemonKit::Initializer.shutdown( true, DAEMON_ENV != 'test' ) }
  configuration.trap( 'INT', term_proc )
  configuration.trap( 'TERM', term_proc )
  at_exit { DaemonKit::Initializer.shutdown }
end
load_environment() click to toggle source
# File lib/daemon_kit/initializer.rb, line 140
def load_environment
  # Needs to be global to prevent loading the files twice
  return if $_daemon_environment_loaded
  $_daemon_environment_loaded = true

  config = configuration

  eval(IO.read(configuration.environment_path), binding, configuration.environment_path)

  eval(IO.read(configuration.daemon_initializer), binding, configuration.daemon_initializer) if File.exist?( configuration.daemon_initializer )
end
load_gems() click to toggle source
# File lib/daemon_kit/initializer.rb, line 132
def load_gems

end
load_patches() click to toggle source
# File lib/daemon_kit/initializer.rb, line 136
def load_patches

end
load_postdaemonize_configs() click to toggle source
# File lib/daemon_kit/initializer.rb, line 160
def load_postdaemonize_configs
  Dir[ File.join( DAEMON_ROOT, 'config', 'post-daemonize', '*.rb' ) ].each do |f|
    require f
  end
end
load_predaemonize_configs() click to toggle source
# File lib/daemon_kit/initializer.rb, line 152
def load_predaemonize_configs
  Dir[ File.join( DAEMON_ROOT, 'config', 'pre-daemonize', '*.rb' ) ].each do |f|
    next if File.basename( f ) == File.basename( configuration.daemon_initializer )

    require f
  end
end
set_load_path() click to toggle source
# File lib/daemon_kit/initializer.rb, line 126
def set_load_path
  configuration.load_paths.each do |d|
    $:.unshift( "#{DAEMON_ROOT}/#{d}" ) if File.directory?( "#{DAEMON_ROOT}/#{d}" )
  end
end
set_process_name() click to toggle source
# File lib/daemon_kit/initializer.rb, line 224
def set_process_name
  $0 = configuration.daemon_name
end
set_umask() click to toggle source
# File lib/daemon_kit/initializer.rb, line 166
def set_umask
  File.umask configuration.umask
end