class Daemons::Controller
def catch_exceptions(&block)
def catch_exceptions(&block) begin block.call rescue CmdException, OptionParser::ParseError => e puts "ERROR: #{e.to_s}" puts print_usage() rescue RuntimeException => e puts "ERROR: #{e.to_s}" end end
def initialize(options = {}, argv = [])
def initialize(options = {}, argv = []) @options = options @argv = argv # Allow an app_name to be specified. If not specified use the # basename of the script. @app_name = options[:app_name] if options[:script] @script = File.expand_path(options[:script]) @app_name ||= File.split(@script)[1] end @app_name ||= 'unknown_application' @command, @controller_part, @app_part = Controller.split_argv(argv) #@options[:dir_mode] ||= :script @optparse = Optparse.new(self) end
def print_usage
def print_usage puts "Usage: #{@app_name} <command> <options> -- <application options>" puts puts "* where <command> is one of:" puts " start start an instance of the application" puts " stop stop all instances of the application" puts " restart stop all instances and restart them afterwards" puts " reload send a SIGHUP to all instances of the application" puts " run start the application and stay on top" puts " zap set the application to a stopped state" puts " status show status (PID) of application instances" puts puts "* and where <options> may contain several of the following:" puts @optparse.usage end
def run
def run @options.update @optparse.parse(@controller_part).delete_if {|k,v| !v} setup_options() #pp @options @group = ApplicationGroup.new(@app_name, @options) @group.controller_argv = @controller_part @group.app_argv = @app_part @group.setup case @command when 'start' @group.new_application.start when 'run' @options[:ontop] ||= true @group.new_application.start when 'stop' @group.stop_all(@options[:no_wait]) when 'restart' unless @group.applications.empty? @group.stop_all sleep(1) @group.start_all else puts "Warning: no instances running. Starting..." @group.new_application.start end when 'reload' @group.reload_all when 'zap' @group.zap_all when 'status' unless @group.applications.empty? @group.show_status else puts "#{@group.app_name}: no instances running" end when nil raise CmdException.new('no command given') #puts "ERROR: No command given"; puts #print_usage() #raise('usage function not implemented') else raise Error.new("command '#{@command}' not implemented") end end
def setup_options
Note that this function should only update @options and no other variables.
before they are really used.
This function is used to do a final update of the options passed to the application
def setup_options #@options[:ontop] ||= true end