bin/flapjack in flapjack-0.9.6 vs bin/flapjack in flapjack-1.0.0rc1
- old
+ new
@@ -1,229 +1,40 @@
#!/usr/bin/env ruby
-# add lib to the default include path
-unless $:.include?(File.dirname(__FILE__) + '/../lib/')
- $: << File.dirname(__FILE__) + '/../lib'
-end
+require 'gli'
-require 'dante'
+include GLI::App
+subcommand_option_handling :normal
+sort_help :manually
+commands_from 'flapjack/cli'
-module Dante
- class Runner
+program_desc 'Flexible monitoring notification routing system'
- def start
- # skip signal traps
- @startup_command.call(self.options) if @startup_command
- end
- end
-end
+version Flapjack::VERSION
-require 'optparse'
-require 'ostruct'
+desc 'Configuration file to use'
+default_value '/etc/flapjack/flapjack.yaml'
+arg_name '/path/to/flapjack.yaml'
+flag [:c,:config]
-require 'oj'
-Oj.mimic_JSON
-Oj.default_options = { :indent => 0, :mode => :strict }
-require 'active_support/json'
+desc 'Environment to boot'
+default_value 'production'
+arg_name '<environment>'
+flag [:n, :env, :environment]
-require 'flapjack/configuration'
-require 'flapjack/version'
-
-options = OpenStruct.new
-options.config = Flapjack::Configuration::DEFAULT_CONFIG_PATH
-options.daemonize = nil
-
-@exe = File.basename(__FILE__)
-
-optparse = OptionParser.new do |opts|
- opts.banner = "Usage: flapjack COMMAND [OPTIONS]"
-
- opts.separator ""
- opts.separator "Commands"
- opts.separator " start #{" " * 25} start flapjack"
- opts.separator " stop #{" " * 26} stop flapjack"
- opts.separator " restart #{" " * 23} (re)start flapjack"
- opts.separator " reload #{" " * 24} reload flapjack configuration"
- opts.separator " status #{" " * 24} see if flapjack is running"
- opts.separator " version #{" " * 23} display flapjack version and exit"
- opts.separator " help #{" " * 26} display this usage info"
- opts.separator ""
- opts.separator "Options"
-
- opts.on("-c", "--config [PATH]", String, "PATH to the config file to use") do |c|
- options.config = c
- end
-
- opts.on("-n", "--environment [ENV]", String, "Environment to boot") do |e|
- options.environment = e
- end
-
- opts.on("-d", "--[no-]daemonize", "Daemonize?") do |d|
- options.daemonize = d
- end
-
- opts.on('-r', '--rbtrace', 'Enable rbtrace profiling') do
- require 'rbtrace'
- end
-
- opts.on("-p", "--pidfile [PATH]", String, "PATH to the pidfile to write to") do |pid|
- options.pidfile = pid
- end
-
- opts.on("-l", "--logfile [PATH]", String, "PATH to the logfile to write to") do |l|
- options.log_path = l
- end
-
- opts.on("-v", "--version", "display flapjack version") do |v|
- options.version = v
- end
-
+accept Array do |value|
+ value.split(/,/).map(&:strip)
end
-optparse.parse!(ARGV)
-if options.help
- puts optparse
- exit
-elsif options.version
- puts Flapjack::VERSION
- exit
-elsif !["start", "stop", "restart", "reload", "status"].include?(ARGV[0])
- if ARGV.nil? || ARGV.empty?
- puts "No command provided"
- else
- puts "Unknown command provided: '#{ARGV[0]}'"
- end
- puts "\n#{optparse}"
- exit 1
+pre do |global,command,options,args|
+ FLAPJACK_ENV = ENV["FLAPJACK_ENV"] || global[:environment]
+ true
end
-FLAPJACK_ENV = options.environment || ENV['FLAPJACK_ENV'] || 'production'
-
-config = Flapjack::Configuration.new
-config.load(options.config)
-config_env = config.all
-
-if config_env.nil? || config_env.empty?
- puts "No config data for environment '#{FLAPJACK_ENV}' found in '#{options.config}'"
- exit(false)
+post do |global,command,options,args|
end
-pidfile = options.pidfile.nil? ?
- (config_env['pid_file'] || 'tmp/pids/flapjack.pid') :
- options.pidfile
-
-logfile = options.logfile.nil? ?
- (config_env['log_file'] || 'log/flapjack.log') :
- options.logfile
-
-daemonize = options.daemonize.nil? ?
- !!config_env['daemonize'] :
- options.daemonize
-
-flapjack_coord = Proc.new {
- require 'flapjack/coordinator'
- coordinator = Flapjack::Coordinator.new(config)
- coordinator.start(:signals => true)
-}
-
-@runner_opts = { :pid_path => pidfile, :log_path => logfile }
-def get_runner
- Dante::Runner.new(@exe, @runner_opts)
+on_error do |exception|
+ true
end
-def process_exists(pid)
- return unless pid
- begin
- Process.kill(0, pid)
- return true
- rescue Errno::ESRCH
- return false
- end
-end
-
-# wait until the specified pid no longer exists, or until a timeout is reached
-def wait_pid_gone(pid, timeout = 30)
- print "waiting for a max of #{timeout} seconds for process #{pid} to exit" if process_exists(pid)
- started_at = Time.now.to_i
- while process_exists(pid)
- break unless (Time.now.to_i - started_at < timeout)
- print '.'
- sleep 1
- end
- puts ''
- return !process_exists(pid)
-end
-
-begin
- pid = IO.read(pidfile).chomp.to_i
-rescue StandardError
- pid = nil
-end
-
-case ARGV[0]
-when "start"
- runner = get_runner
- if runner.daemon_running?
- puts "Flapjack is already running."
- else
- print "Flapjack starting..."
- print "\n" unless daemonize
- return_value = nil
- runner.execute(:daemonize => daemonize) {
- return_value = flapjack_coord.call
- }
- puts " done."
- exit(return_value) unless return_value.nil?
- end
-
-when "stop"
- runner = get_runner
- if runner.daemon_running?
- print "Flapjack stopping..."
- runner.execute(:kill => true)
- puts " done."
- else
- puts "Flapjack is not running."
- end
- exit 1 unless wait_pid_gone(pid)
-
-when "restart"
- runner = get_runner
- if runner.daemon_running?
- print "Flapjack stopping..."
- runner.execute(:kill => true)
- puts " done."
- end
- exit 1 unless wait_pid_gone(pid)
-
- runner = get_runner
- print "Flapjack starting..."
- runner.execute(:daemonize => daemonize) {
- flapjack_coord.call
- }
- puts " done."
-
-when "reload"
- runner = get_runner
- if runner.daemon_running?
- print "Reloading Flapjack configuration..."
- begin
- Process.kill('HUP', pid)
- puts " sent HUP to pid #{pid}."
- rescue => e
- puts " couldn't send HUP to pid '#{pid}'."
- end
- else
- puts "Flapjack is not running daemonized."
- exit 1
- end
-
-when "status"
- runner = get_runner
- uptime = (runner.daemon_running?) ? Time.now - File.stat(pidfile).ctime : 0
- if runner.daemon_running?
- puts "Flapjack is running: pid #{pid}, uptime #{uptime}"
- else
- puts "Flapjack is not running"
- exit 3
- end
-end
+exit run(ARGV)