bin/controller in robot-controller-2.0.0 vs bin/controller in robot-controller-2.0.1

- old
+ new

@@ -1,111 +1,122 @@ #!/usr/bin/env ruby require 'yaml' require 'robot-controller' -if ARGV.size == 0 - puts ' -Usage: controller ( boot | quit ) - controller ( start | status | stop | restart | log ) [worker] - controller verify [--verbose] - controller [--help] +# bin/controller tool +module RobotController + # + class CLI + # meta command + def self.run(args) + if args.size == 0 || args.first == '--help' + puts ' + Usage: controller ( boot | quit ) + controller ( start | status | stop | restart | log ) [worker] + controller verify [--verbose] + controller [--help] -Example: - % controller boot # start bluepilld and jobs - % controller status # check on status of jobs - % controller log dor_accessionWF_descriptive-metadata # view log for worker - % controller verify # verify robots are running as configured - % controller stop # stop jobs - % controller quit # stop bluepilld + Example: + % controller boot # start bluepilld and jobs + % controller status # check on status of jobs + % controller log dor_accessionWF_descriptive-metadata # view log for worker + % controller verify # verify robots are running as configured + % controller stop # stop jobs + % controller quit # stop bluepilld -Environment: - BLUEPILL_BASEDIR - where bluepill stores its state (default: run/bluepill) - BLUEPILL_LOGFILE - output log (default: log/bluepill.log) - ROBOT_ENVIRONMENT - (default: development) -' - exit(-1) -end + Environment: + BLUEPILL_BASEDIR - where bluepill stores its state (default: run/bluepill) + BLUEPILL_LOGFILE - output log (default: log/bluepill.log) + ROBOT_ENVIRONMENT - (default: development) + ' + exit(-1) + end -ENV['ROBOT_ENVIRONMENT'] ||= 'development' -ENV['BLUEPILL_BASE_DIR'] ||= File.expand_path('run/bluepill') -ENV['BLUEPILL_LOGFILE'] ||= File.expand_path('log/bluepill.log') + ENV['ROBOT_ENVIRONMENT'] ||= 'development' + ENV['BLUEPILL_BASE_DIR'] ||= File.expand_path('run/bluepill') + ENV['BLUEPILL_LOGFILE'] ||= File.expand_path('log/bluepill.log') -fail 'bluepill requires config directory' unless File.directory?('config') -fail 'bluepill requires run directory' unless File.directory?(File.dirname(ENV['BLUEPILL_BASE_DIR'])) -fail 'bluepill requires log directory' unless File.directory?(File.dirname(ENV['BLUEPILL_LOGFILE'])) + fail 'bluepill requires config directory' unless File.directory?('config') + fail 'bluepill requires run directory' unless File.directory?(File.dirname(ENV['BLUEPILL_BASE_DIR'])) + fail 'bluepill requires log directory' unless File.directory?(File.dirname(ENV['BLUEPILL_LOGFILE'])) -cmd = 'bluepill' -cmd << ' --no-privileged' -cmd << " --base-dir #{ENV['BLUEPILL_BASE_DIR']}" -cmd << " --logfile #{ENV['BLUEPILL_LOGFILE']}" + cmd = 'bluepill' + cmd << ' --no-privileged' + cmd << " --base-dir #{ENV['BLUEPILL_BASE_DIR']}" + cmd << " --logfile #{ENV['BLUEPILL_LOGFILE']}" -case ARGV[0].downcase -when 'boot' - fn = 'config/bluepill.rb' # allow override - fn = RobotController.bluepill_config unless File.file?(fn) - if File.file?(fn) - # puts "Loading #{fn}" - exec "#{cmd} load #{fn}" - # NOTREACHED - end - puts "ERROR: Cannot find bluepill configuration file for #{ENV['ROBOT_ENVIRONMENT']}" - exit(-1) -when 'verify' - verbose = (ARGV[1] == '--verbose') + case args.first.downcase + when 'boot' + fn = 'config/bluepill.rb' # allow override + fn = RobotController.bluepill_config unless File.file?(fn) + if File.file?(fn) + # puts "Loading #{fn}" + exec "#{cmd} load #{fn}" + # NOTREACHED + end + puts "ERROR: Cannot find bluepill configuration file for #{ENV['ROBOT_ENVIRONMENT']}" + exit(-1) + when 'verify' + verbose = (args[1] == '--verbose') - # load list of all possible robots - robots = YAML.load_file('config/robots.yml') - fail ArgumentError unless robots.is_a? Array + # load list of all possible robots + robots = YAML.load_file('config/robots.yml') + fail ArgumentError unless robots.is_a? Array - # determine how many processes should be running for each robot - running = {} - robots.each do |robot| - running[robot] = 0 - end - RobotController::Parser.load("robots_#{ENV['ROBOT_ENVIRONMENT']}.yml").each do |h| - running[h[:robot]] = h[:n] - end + # determine how many processes should be running for each robot + running = {} + robots.each do |robot| + running[robot] = 0 + end + RobotController::Parser.load("robots_#{ENV['ROBOT_ENVIRONMENT']}.yml").each do |h| + running[h[:robot]] = h[:n] + end - # verify that all robots running are known to the config/robots.yml - running.each_key do |robot| - if !robots.include?(robot) - puts "ERROR: '#{robot}' robot is unknown to the suite. Check config/robots.yml" - running.delete(robot) - end - end + # verify that all robots running are known to the config/robots.yml + running.each_key do |robot| + unless robots.include?(robot) + puts "ERROR: '#{robot}' robot is unknown to the suite. Check config/robots.yml" + running.delete(robot) + end + end - # verify suite - verify = RobotController::Verify.new(running) - begin - statuses = verify.verify - rescue => e - puts "ERROR: Cannot run verification for any robots. #{e.class}: #{e.message}" - exit(-1) - end + # verify suite + verify = RobotController::Verify.new(running) + begin + statuses = verify.verify + rescue => e + puts "ERROR: Cannot run verification for any robots. #{e.class}: #{e.message}" + exit(-1) + end - # print output for each status - ok = true - puts 'ERROR: No robots to verify?' if statuses.size == 0 - statuses.each_pair do |robot, status| - case status[:state] - when :up - puts "OK: #{robot} is up (#{status[:running]} running)" if verbose - when :not_enabled - if status[:running] == 0 - puts "OK: #{robot} is not enabled (0 running)" if verbose + # print output for each status + ok = true + puts 'ERROR: No robots to verify?' if statuses.size == 0 + statuses.each_pair do |robot, status| + case status[:state] + when :up + puts "OK: #{robot} is up (#{status[:running]} running)" if verbose + when :not_enabled + if status[:running] == 0 + puts "OK: #{robot} is not enabled (0 running)" if verbose + else + puts "ERROR: #{robot} is not enabled (but #{status[:running]} running)" + end + when :down + ok = false + puts "ERROR: #{robot} is down (#{status[:running]} of #{running[robot]} running)" + else + ok = false + puts "ERROR: #{robot} cannot be verified (state=#{status[:state]})" + end + end + puts 'OK' if ok && !verbose && statuses.size > 0 + exit(0) else - puts "ERROR: #{robot} is not enabled (but #{status[:running]} running)" + exec "#{cmd} #{args.join(' ')}" + # NOTREACHED end - when :down - ok = false - puts "ERROR: #{robot} is down (#{status[:running]} of #{running[robot]} running)" - else - ok = false - puts "ERROR: #{robot} cannot be verified (state=#{status[:state]})" end end - puts 'OK' if ok && !verbose && statuses.size > 0 - exit(0) -else - exec "#{cmd} #{ARGV.join(' ')}" - # NOTREACHED end + +RobotController::CLI.run(ARGV)