bin/check_check in ruby-nagios-0.2.2 vs bin/check_check in ruby-nagios-0.3.0

- old
+ new

@@ -56,12 +56,12 @@ status["current_state"] = status["last_hard_state"] # TODO(sissel): record that this service is currently # in a soft state transition. end - # TODO(sissel): Maybe also skip checks that are 'acknowledged' - matches << status + # Add status but not if the checks have been 'acknowledged' + matches << status if status["problem_has_been_acknowledged"] == "0" end end # hosts().each return matches end # def services @@ -76,11 +76,11 @@ # TODO(sissel): add a proper 'status' model that # has HostStatus, ServiceStatus, etc. end # class Nagios::Status::Model -Settings = Struct.new(:nagios_cfg, :status_path, :service_pattern, :host_pattern, :percent_critical, :percent_warning, :percent_unknown, :show_ok) +Settings = Struct.new(:nagios_cfg, :status_path, :service_pattern, :host_pattern, :percent_critical, :percent_warning, :percent_unknown, :show_ok, :quiet, :aggr) def main(args) progname = File.basename($0) settings = Settings.new settings.nagios_cfg = "/etc/nagios3/nagios.cfg" # debian/ubuntu default @@ -118,10 +118,16 @@ end opts.on( "--show-ok", "Show details for checks in OK state too") do settings.show_ok = true end + opts.on( "--quiet", "Quiet output") do + settings.quiet = true + end + opts.on( "--aggr", "Aggregate states") do + settings.aggr = true + end end # OptionParser.new opts.parse!(args) # hacky parsing, for now @@ -152,59 +158,81 @@ end results[state] << service_status end + total_results = ["OK", "WARNING", "CRITICAL", "UNKNOWN"].inject(0) {|aggr,state| aggr += results[state].length} # Output a summary line ["OK", "WARNING", "CRITICAL", "UNKNOWN"].each do | state| print "#{state}=#{results[state].length} " end print "services=/#{settings.service_pattern}/ " print "hosts=/#{settings.host_pattern}/ " + if settings.aggr + print "Problems: #{((results["UNKNOWN"].length + results["WARNING"].length + results["CRITICAL"].length).to_f / total_results) * 100}% " + end puts - total_results = ["OK", "WARNING", "CRITICAL", "UNKNOWN"].inject(0) {|aggr,state| aggr += results[state].length} - # More data output - ["WARNING", "CRITICAL", "UNKNOWN"].each do |state| - if results[state] && results[state].size > 0 - puts "Services in #{state}:" - results[state].sort { |a,b| a["host_name"] <=> b["host_name"] }.each do |service| - if service["long_plugin_output"] and !service["long_plugin_output"].empty? - puts " #{service["host_name"]} => #{service["service_description"]} (#{service["plugin_output"]})" - puts " #{service["long_plugin_output"]}" - else - puts " #{service["host_name"]} => #{service["service_description"]} (#{service["plugin_output"]})" + if !settings.quiet + ["WARNING", "CRITICAL", "UNKNOWN"].each do |state| + if results[state] && results[state].size > 0 + puts "Services in #{state}:" + results[state].sort { |a,b| a["host_name"] <=> b["host_name"] }.each do |service| + if service["long_plugin_output"] and !service["long_plugin_output"].empty? + puts " #{service["host_name"]} => #{service["service_description"]} (#{service["plugin_output"]})" + puts " #{service["long_plugin_output"]}" + else + puts " #{service["host_name"]} => #{service["service_description"]} (#{service["plugin_output"]})" + end end - end - end # if results[state] - end # for each non-OK state + end # if results[state] + end # for each non-OK state + end # for !quiet if settings.show_ok and results["OK"].size > 0 puts "OK Services:" results["OK"].sort { |a,b| a["host_name"] <=> b["host_name"] }.each do |service| puts " #{service["host_name"]} => #{service["service_description"]}" end end exitcode = 0 - if settings.percent_unknown - exitcode = 3 if results["UNKNOWN"].length > 0 && (results["UNKNOWN"].length.to_f / total_results) * 100 >= settings.percent_unknown - else - exitcode = 3 if results["UNKNOWN"].length > 0 - end + if !settings.aggr + if settings.percent_unknown + exitcode = 3 if results["UNKNOWN"].length > 0 && (results["UNKNOWN"].length.to_f / total_results) * 100 >= settings.percent_unknown + else + exitcode = 3 if results["UNKNOWN"].length > 0 + end - if settings.percent_warning - exitcode = 1 if results["WARNING"].length > 0 && ((results["WARNING"].length.to_f + results["CRITICAL"].length.to_f) / total_results) * 100 >= settings.percent_warning - else - exitcode = 1 if results["WARNING"].length > 0 - end + if settings.percent_warning + exitcode = 1 if results["WARNING"].length > 0 && ((results["WARNING"].length.to_f + results["CRITICAL"].length.to_f) / total_results) * 100 >= settings.percent_warning + else + exitcode = 1 if results["WARNING"].length > 0 + end - if settings.percent_critical - exitcode = 2 if results["CRITICAL"].length > 0 && (results["CRITICAL"].length.to_f / total_results) * 100 >= settings.percent_critical + if settings.percent_critical + exitcode = 2 if results["CRITICAL"].length > 0 && (results["CRITICAL"].length.to_f / total_results) * 100 >= settings.percent_critical + else + exitcode = 2 if results["CRITICAL"].length > 0 + end else - exitcode = 2 if results["CRITICAL"].length > 0 + if settings.percent_unknown + exitcode = 3 if results["UNKNOWN"].length > 0 && (results["UNKNOWN"].length.to_f / total_results) * 100 >= settings.percent_unknown + else + exitcode = 3 if results["UNKNOWN"].length > 0 + end + if settings.percent_warning + exitcode = 1 if ((results["UNKNOWN"].length + results["WARNING"].length + results["CRITICAL"].length).to_f / total_results) * 100 >= settings.percent_warning + else + exitcode = 1 if results["WARNING"].length > 0 + end + if settings.percent_critical + exitcode = 2 if ((results["UNKNOWN"].length + results["WARNING"].length + results["CRITICAL"].length).to_f / total_results) * 100 >= settings.percent_critical + else + exitcode = 2 if results["CRITICAL"].length > 0 + end end return exitcode end