Class: Souffle::Application

Inherits:
Object
  • Object
show all
Includes:
Mixlib::CLI
Defined in:
lib/souffle/application.rb

Overview

The souffle application class for both server and worker.

Direct Known Subclasses

Server

Defined Under Namespace

Classes: Server, Wakeup

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeApplication

Initialize the application, setting up default handlers.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/souffle/application.rb', line 14

def initialize
  @commands = []
  super

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

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

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

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

Instance Attribute Details

#commandsObject

The commands that were left unparsed from parse_options.



8
9
10
# File 'lib/souffle/application.rb', line 8

def commands
  @commands
end

Class Method Details

.debug_stacktrace(e) ⇒ Object

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

Parameters:

  • e (Exception)

    The raised exception.



110
111
112
113
114
115
116
# File 'lib/souffle/application.rb', line 110

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

  Souffle::Log.debug(message)
end

.exit!(msg, err = -1)) ⇒ Object

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

Parameters:

  • msg (String)

    The message to log.

  • err (Fixnum) (defaults to: -1))

    The exit level.



133
134
135
136
# File 'lib/souffle/application.rb', line 133

def exit!(msg, err = -1)
  Souffle::Log.debug(msg)
  Process.exit err
end

.fatal!(msg, err = -1)) ⇒ Object

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

Parameters:

  • msg (String)

    The message to log.

  • err (Fixnum) (defaults to: -1))

    The exit level.



123
124
125
126
# File 'lib/souffle/application.rb', line 123

def fatal!(msg, err = -1)
  Souffle::Log.fatal(msg)
  Process.exit err
end

Instance Method Details

#configure_loggingObject

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



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/souffle/application.rb', line 60

def configure_logging
  Souffle::Log.init(Souffle::Config[:log_location])
  if ( Souffle::Config[:log_location] != STDOUT ) && STDOUT.tty? &&
    ( !Souffle::Config[:daemonize] )
    stdout_logger = Logger.new(STDOUT)
    STDOUT.sync = true
    stdout_logger.formatter = Souffle::Log.logger.formatter
    Souffle::Log.loggers << stdout_logger
  end
  Souffle::Log.level = Souffle::Config[:log_level]
end

#configure_souffleObject

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



43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/souffle/application.rb', line 43

def configure_souffle
  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."
    Souffle::Log.warn "*****************************************"
    Souffle::Log.warn msg
    Souffle::Log.warn "*****************************************"
  end
end

#reconfigureObject

Reconfigure the application and logging.



37
38
39
40
# File 'lib/souffle/application.rb', line 37

def reconfigure
  configure_souffle
  configure_logging
end

#runObject

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



73
74
75
76
77
# File 'lib/souffle/application.rb', line 73

def run
  reconfigure
  setup_application
  run_application
end

#run_applicationObject

Placeholder for run_application, intended to be overridden.

Raises:

  • Souffle::Exceptions::Application Must be overridden.



90
91
92
93
# File 'lib/souffle/application.rb', line 90

def run_application
  error_msg = "#{self.to_s}: you must override run_application"
  raise Souffle::Exceptions::Application, error_msg
end

#setup_applicationObject

Placeholder for setup_application, intended to be overridden.

Raises:

  • Souffle::Exceptions::Application Must be overridden.



82
83
84
85
# File 'lib/souffle/application.rb', line 82

def setup_application
  error_msg = "#{self.to_s}: you must override setup_application"
  raise Souffle::Exceptions::Application, error_msg
end