lib/choria/colt/cli.rb in choria-colt-0.7.0 vs lib/choria/colt/cli.rb in choria-colt-0.8.0

- old
+ new

@@ -42,11 +42,11 @@ task_name = args.shift targets, targets_with_classes = extract_targets_and_filters_from_options environment = options['environment'] results = colt.run_bolt_task task_name, input: input, targets: targets, targets_with_classes: targets_with_classes, environment: environment do |result| - $stdout.puts formatter.process_result(result) + $stdout.puts formatter.format(result) end File.write 'last_run.json', JSON.pretty_generate(results) rescue Choria::Orchestrator::Error # This error is already logged and displayed. @@ -84,16 +84,28 @@ long_desc <<~DESC Show results from a previously ran task. A task ID is required to request Choria services and retrieve results. DESC + option :style, + aliases: ['-S'], + desc: "Output style; can be 'continuous' or 'summary'", + default: 'summary' define_targets_and_filters_options def status(task_id) + supported_styles = %i[summary continous] + raise Thor::Error, "Invalid style: '#{options['style']}' (available: #{supported_styles})" unless supported_styles.include? options['style'].to_sym + targets, targets_with_classes = extract_targets_and_filters_from_options - results = colt.wait_bolt_task(task_id, targets: targets, targets_with_classes: targets_with_classes) do |result| - $stdout.puts formatter.process_result(result) + case options['style'] + when 'continous' + results = colt.wait_bolt_task(task_id, targets: targets, targets_with_classes: targets_with_classes) do |result| + $stdout.puts formatter.format(result) + end + when 'summary' + show_summarized_status(task_id, targets: targets, targets_with_classes: targets_with_classes) end File.write 'last_run.json', JSON.pretty_generate(results) rescue Choria::Orchestrator::Error # This error is already logged and displayed. @@ -109,10 +121,11 @@ config.handlers = [ [:console, { output: $stderr, level: options['log_level'].to_sym }], [:stream, { output: File.open('colt-debug.log', 'a'), level: :debug }], ] config.metadata = %i[date time] + Choria::Colt::Debugger.enabled = true end end def formatter @formatter ||= Formatter.new(colored: $stdout.tty?) @@ -181,9 +194,36 @@ #{metadata['description']} OUTPUT output += " Default: #{metadata['default']}" unless metadata['default'].nil? output end.join "\n" + end + + def summarize(results) + results_grouped_by_result_content = results.group_by { |result| result[:result] } + results_grouped_by_result_content.each do |_content, grouped_results| + # Display each host + grouped_results.each do |result| + $stdout.puts formatter.format(result).host + end + # Display the result content + content = formatter.format(grouped_results.first).content + content = pastel.bright_white '(no output)' if content.nil? || content.empty? + $stdout.puts content + end + end + + def show_summarized_status(task_id, targets:, targets_with_classes:) + require 'tty-progressbar' + + bar = TTY::ProgressBar.new('[:bar] :current/:total ET::elapsed ETA::eta :rate/s') + results = colt.wait_bolt_task(task_id, targets: targets, targets_with_classes: targets_with_classes) do |_result, count, total_count| + bar.update total: total_count + bar.current = count + end + + puts "\nSummary:" + summarize(results) end def pastel @pastel ||= _pastel end