class Outliers::CLI::Process

Public Instance Methods

command_name() click to toggle source
# File lib/outliers/cli/process.rb, line 69
def command_name
  'process'
end
command_summary() click to toggle source
# File lib/outliers/cli/process.rb, line 73
def command_summary
  'Process evaluations in config folder.'
end
process() click to toggle source
# File lib/outliers/cli/process.rb, line 4
def process
  @options = { threads: 1, log_level: 'info' }

  option_parser.parse!

  Outliers.config_path @options[:directory]

  @logger = Outliers.logger
  @run    = Run.new

  if @options[:threads] > 1
    @run.threaded     = true
    @run.thread_count = @options[:threads]
  end

  log_level = @options.fetch(:log_level).upcase

  unless ["DEBUG", "INFO", "WARN", "ERROR"].include? log_level
    @logger.error "Invalid log level. Valid levels are debug, info, warn, error."
    exit 1
  end

  @logger.level = Logger.const_get log_level

  begin
    @run.account = Account.load_from_file "#{ENV['HOME']}/.outliers.yml"
    @run.process_evaluations_in_dir
  rescue Outliers::Exceptions::Base => e
    @logger.error e.message
    exit 1
  end

  passing_count = @run.results.select {|r| r.passed? }.count
  failing_count = @run.results.select {|r| r.failed? }.count

  @logger.info "Evaluations completed."

  if key
    @logger.info "Running report handlers."
    @run.results.each do |result|
      unless Outliers::Handlers::OutliersApi.new.post result, key, results_url
        @logger.error "Report handler failed."
        exit 1
      end
    end
    @logger.info "Report handlers completed."
  else
    @logger.info "OUTLIERS_KEY not set, not sending results."
  end

  failed_results = @run.results.select {|r| r.failed? }

  failed_results.each do |r|
    if r.name
      @logger.info "Results of '#{r.name}', verifying '#{r.verification_name}' of '#{r.provider_name}:#{r.resource_name}' via '#{r.account_name}' failed."
    else
      @logger.info "Verification '#{r.verification_name}' of '#{r.provider_name}:#{r.resource_name}' via '#{r.account_name}' failed."
    end
  end

  @logger.info "(#{failing_count} evaluations failed, #{passing_count} evaluations passed.)"

  exit 1 unless failing_count.zero?
end

Private Instance Methods

key() click to toggle source
# File lib/outliers/cli/process.rb, line 79
def key
  ENV['OUTLIERS_KEY']
end
option_parser() click to toggle source
# File lib/outliers/cli/process.rb, line 91
def option_parser
  OptionParser.new do |opts|
    opts.banner = "Usage: outliers process [options]"

    opts.on("-d", "--directory [DIRECTORY]", "Directory containing evaluations to load.") do |o|
      @options[:directory] = o
    end

    opts.on("-l", "--log_level [LOG_LEVEL]", "Log level (Default: info).") do |o|
      @options[:log_level] = o
    end

    opts.on("-t", "--threads [THREADS]", "Maximum number of evaluations threads to run concurrently (Default: 1).") do |o|
      @options[:threads] = o.to_i
    end
  end
end
results_url() click to toggle source
# File lib/outliers/cli/process.rb, line 87
def results_url
  "#{url}/results"
end
url() click to toggle source
# File lib/outliers/cli/process.rb, line 83
def url
  ENV['OUTLIERS_URL'] ||= 'https://api.getoutliers.com'
end