Class: Aspera::Nagios
- Inherits:
-
Object
- Object
- Aspera::Nagios
- Defined in:
- lib/aspera/nagios.rb
Instance Attribute Summary collapse
-
#data ⇒ Object
readonly
Returns the value of attribute data.
Class Method Summary collapse
-
.process(data) ⇒ Object
process results of a analysis and display status and exit with code.
Instance Method Summary collapse
- #check_product_version(component, _product, version) ⇒ Object
-
#check_time_offset(remote_date, component) ⇒ Object
compare remote time with local time.
-
#initialize ⇒ Nagios
constructor
A new instance of Nagios.
-
#result ⇒ Object
translate for display.
Constructor Details
#initialize ⇒ Nagios
Returns a new instance of Nagios.
49 50 51 |
# File 'lib/aspera/nagios.rb', line 49 def initialize @data = [] end |
Instance Attribute Details
#data ⇒ Object (readonly)
Returns the value of attribute data.
47 48 49 |
# File 'lib/aspera/nagios.rb', line 47 def data @data end |
Class Method Details
.process(data) ⇒ Object
process results of a analysis and display status and exit with code
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/aspera/nagios.rb', line 23 def process(data) raise 'INTERNAL ERROR, result must be list and not empty' unless data.is_a?(Array) && !data.empty? %w[status component message].each{|c|raise "INTERNAL ERROR, result must have #{c}" unless data.first.key?(c)} res_errors = data.reject{|s|s['status'].eql?('ok')} # keep only errors in case of problem, other ok are assumed so data = res_errors unless res_errors.empty? # first is most critical data.sort!{|a, b|LEVELS.index(a['status'].to_sym) <=> LEVELS.index(b['status'].to_sym)} # build message: if multiple components: concatenate # message = data.map{|i|"#{i['component']}:#{i['message']}"}.join(', ').gsub("\n",' ') = data .map{|i|i['component']} .uniq .map{|comp|comp + ':' + data.select{|d|d['component'].eql?(comp)}.map{|d|d['message']}.join(',')} .join(', ') .tr("\n", ' ') status = data.first['status'].upcase # display status for nagios puts("#{status} - [#{message}]\n") # provide exit code to nagios Process.exit(LEVELS.index(data.first['status'].to_sym)) end |
Instance Method Details
#check_product_version(component, _product, version) ⇒ Object
70 71 72 73 |
# File 'lib/aspera/nagios.rb', line 70 def check_product_version(component, _product, version) add_ok(component, "version #{version}") # TODO: check on database if latest version end |
#check_time_offset(remote_date, component) ⇒ Object
compare remote time with local time
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/aspera/nagios.rb', line 54 def check_time_offset(remote_date, component) # check date if specified : 2015-10-13T07:32:01Z remote_time = DateTime.strptime(remote_date) diff_time = (remote_time - DateTime.now).abs diff_rounded = diff_time.round(-2) Log.log.debug{"DATE: #{remote_date} #{remote_time} diff=#{diff_rounded}"} msg = "offset #{diff_rounded} sec" if diff_time >= DATE_CRIT_OFFSET add_critical(component, msg) elsif diff_time >= DATE_WARN_OFFSET add_warning(component, msg) else add_ok(component, msg) end end |
#result ⇒ Object
translate for display
76 77 78 79 |
# File 'lib/aspera/nagios.rb', line 76 def result raise 'missing result' if @data.empty? {type: :object_list, data: @data.map{|i|{'status' => LEVELS[i[:code]].to_s, 'component' => i[:comp], 'message' => i[:msg]}}} end |