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