Module: Onering::CLI::Report

Defined in:
lib/onering/cli/reporter.rb

Class Method Summary collapse

Class Method Details

.configure(global = {}) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/onering/cli/reporter.rb', line 4

def self.configure(global={})
  @api = (Onering::CLI.connect(global.merge({
    :autoconnect => false
  })) rescue nil)

  @opts = ::Trollop::options do
    banner "Generate a system report that can be saved or submitted to a Onering server\n\nUsage:\n    onering [global] report [options]\n\nOptions:\n"
    opt :id,             "Override the autodetected Hardware ID for this node", :short => '-I', :type => :string
    opt :fields,         "Set the named FIELD to equal VALUE in the format FIELD=VALUE. Can be specified multiple times", :short => '-o', :type => :string, :multi => true
    opt :save,           "Save the report output to the configured Onering server"
    opt :timeout,        "The maximum amount of time to wait for a report to be generated", :type => :integer, :default => 60
    opt :plugin_timeout, "The maximum amount of time to wait for a report plugin to return data", :type => :integer, :default => 10
  end

# initialize report generator with user options
  Onering::Reporter.setup({
    :id             => @opts[:id],
    :timeout        => @opts[:timeout],
    :plugin_timeout => @opts[:plugin_timeout]
  }.compact)
end

.run(args) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/onering/cli/reporter.rb', line 33

def self.run(args)
  begin
    Onering::Logger.debug("Gathering local data for report")
    report = Onering::Reporter.report().stringify_keys()

  # pull report overrides from the config file
    Onering::Config.get('reporter.fields',{}).each do |key, value|
      Onering::Logger.debug("Override value #{key} from config file")

      if value.is_a?(Hash)
        value.coalesce(key, nil, '.').each do |k,v|
          v = nil if ['null', '', '-'].include?(v.to_s.strip.chomp)
          report = report.set(k, v)
        end
      else
        value = nil if ['null', '', '-'].include?(value.to_s.strip.chomp)
        report = report.set(key, value)
      end
    end

  # pull overrides from CLI arguments
    @opts[:fields].each do |field|
      key, value = field.split('=', 2)
      Onering::Logger.debug("Override value #{key} from command line argument")

      value = nil if ['null', '', '-'].include?(value.to_s.strip.chomp)
      report = report.set(key, value)
    end


  # save if specified
    if @opts[:save] === true
      @api.connect()
      @api.devices.save(report['id']) do
        MultiJson.dump(report)
      end
    end

    return report
  rescue Timeout::Error
    Onering::Logger.fatal!("Report took too long to generate, exiting...")
  end
end