class Backdat::Application

The backdat application class for both server and worker.

Public Class Methods

new() click to toggle source

Initialize the application, setting up default handlers.

Calls superclass method
# File lib/backdat/application.rb, line 11
def initialize
  super

  trap("TERM") do
    Backdat::Application.fatal!("SIGTERM received, stopping", 1)
  end

  trap("INT") do
    Backdat::Application.fatal!("SIGINT received, stopping", 2)
  end

  trap("QUIT") do
    Backdat::Log.info("SIGQUIT received, call stack:\n ", caller.join("\n "))
  end

  trap("HUP") do
    Backdat::Log.info("SIGHUP received, reconfiguring")
    reconfigure
  end
end

Private Class Methods

debug_stacktrace(e) click to toggle source

Present a debug stracktrace upon an error. Gives a readable backtrace with a timestamp.

@param [ Exception ] e The raised exception.

# File lib/backdat/application.rb, line 106
def debug_stacktrace(e)
  message = "#{e.class}: #{e}\n#{e.backtrace.join("\n")}"
  stacktrace_out = "Generated at #{Time.now.to_s}\n"
  stacktrace_out += message

  Backdat::Log.debug(message)
end
exit!(msg, err = -1) click to toggle source

Log a fatal error message to both STDERR and the Logger, exit the application with a debug message.

@param [ String ] msg The message to log. @param [ Fixnum ] err The exit level.

# File lib/backdat/application.rb, line 129
def exit!(msg, err = -1)
  Backdat::Log.debug(msg)
  Process.exit err
end
fatal!(msg, err = -1) click to toggle source

Log a fatal error message to both STDERR and the Logger, exit the application with a fatal message.

@param [ String ] msg The message to log. @param [ Fixnum ] err The exit level.

# File lib/backdat/application.rb, line 119
def fatal!(msg, err = -1)
  Backdat::Log.fatal(msg)
  Process.exit err
end

Public Instance Methods

configure_backdat() click to toggle source

Configure the application throwing a warning when there is no config file.

# File lib/backdat/application.rb, line 39
def configure_backdat
  parse_options

  begin
    ::File.open(config[:config_file]) { |f| apply_config(f.path) }
  rescue Errno::ENOENT => error
    msg =  "Did not find the config file: #{config[:config_file]}"
    msg << ", Using command line options."
    Backdat::Log.warn "*****************************************"
    Backdat::Log.warn msg
    Backdat::Log.warn "*****************************************"
  end
end
configure_logging() click to toggle source

Configures the logging in a relatively sane fashion. Only prints to STDOUT given a valid tty. Does not write to STDOUT when daemonizing.

# File lib/backdat/application.rb, line 56
def configure_logging
  Backdat::Log.init(Backdat::Config[:log_location])
  if ( Backdat::Config[:log_location] != STDOUT ) && STDOUT.tty? &&
    ( !Backdat::Config[:daemonize] )
    stdout_loger = Logger.new(STDOUT)
    STDOUT.sync = true
    stdout_logger = Backdat::Log.logger.formatter
    Backdat::Log.loggers << stdout_logger
  end
  Backdat::Log.level = Backdat::Config[:log_level]
end
reconfigure() click to toggle source

Reconfigure the application and logging.

# File lib/backdat/application.rb, line 33
def reconfigure
  configure_backdat
  configure_logging
end
run() click to toggle source

Run the application itself. Configure, setup, and then run.

# File lib/backdat/application.rb, line 69
def run
  reconfigure
  setup_application
  run_application
end
run_application() click to toggle source

Placeholder for run_application, intended to be overridden.

@raise Backdat::Exceptions::Application Must be overridden.

# File lib/backdat/application.rb, line 86
def run_application
  error_msg = "#{self.to_s}: you must override run_application"
  raise Backdat::Exceptions::Application, error_msg
end
setup_application() click to toggle source

Placeholder for setup_application, intended to be overridden.

@raise Backdat::Exceptions::Application Must be overridden.

# File lib/backdat/application.rb, line 78
def setup_application
  error_msg = "#{self.to_s}: you must override setup_application"
  raise Backdat::Exceptions::Application, error_msg
end

Private Instance Methods

apply_config(config_file_path) click to toggle source

Apply the configuration given a file path.

@param [ String ] config_file_path The path to the configuration file.

# File lib/backdat/application.rb, line 96
def apply_config(config_file_path)
  Backdat::Config.from_file(config_file_path)
  Backdat::Config.merge!(config)
end