class Asperalm::Nagios
Constants
- ADD_PREFIX
- DATE_CRIT_OFFSET
- DATE_WARN_OFFSET
date offset levels
- LEVELS
nagios levels
Attributes
data[R]
Public Class Methods
new()
click to toggle source
# File lib/asperalm/nagios.rb, line 20 def initialize @data=[] end
process(data)
click to toggle source
process results of a analysis and display status and exit with code
# File lib/asperalm/nagios.rb, line 53 def self.process(data) raise "INTERNAL ERROR, result must be list and not empty" unless data.is_a?(Array) and !data.empty? ['status','component','message'].each{|c|raise "INTERNAL ERROR, result must have #{c}" unless data.first.has_key?(c)} res_errors = data.select{|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",' ') message = data.map{|i|i['component']}.uniq.map{|comp|comp+':'+data.select{|d|d['component'].eql?(comp)}.map{|d|d['message']}.join(',')}.join(', ').gsub("\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
Public Instance Methods
check_product_version( component, product, version )
click to toggle source
# File lib/asperalm/nagios.rb, line 41 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 )
click to toggle source
comparte remote time with local time
# File lib/asperalm/nagios.rb, line 25 def check_time_offset( remote_date, component ) # check date if specified : 2015-10-13T07:32:01Z rtime = DateTime.strptime(remote_date) diff_time = (rtime - DateTime.now).abs diff_disp=diff_time.round(-2) Log.log.debug("DATE: #{remote_date} #{rtime} diff=#{diff_disp}") msg="offset #{diff_disp} 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()
click to toggle source
translate for display
# File lib/asperalm/nagios.rb, line 47 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