#!/usr/bin/perl use Nagios::StatusLog; my $log = Nagios::StatusLog->new( Filename => "/var/spool/nagios/status.dat", Version => 3.0 ); my $host_down = 0; my $host_unr = 0; my $host_ack = 0; my $host_up = 0; my $svc_crit = 0; my $svc_warn = 0; my $svc_ok = 0; my $svc_ack = 0; my @hosts = $log->list_hosts; foreach my $host (@hosts) { my $hcs = $log->host( "$host" ); if ( $hcs->status eq 'OK') { if (!$hcs->problem_has_been_acknowledged ) { $host_up++; my @host_services = $log->list_services_on_host($host); foreach my $service (@host_services) { my $svcs = $log->service( $host, $service ); if ( $svcs->status ne 'OK') { if (!$svcs->problem_has_been_acknowledged ) { $svc_crit++ if ($svcs->status eq 'CRITICAL'); $svc_warn++ if ($svcs->status eq 'WARNING'); } else { $svc_ack++; } } else { $svc_ok++; } } } else { $host_ack++; } } else { $host_down++ if ($hcs->status eq 'DOWN'); $host_unr++ if ($hcs->status eq 'UNREACHABLE'); } } if (-f '/tmp/moodoff') { print "0 0 0 "; } elsif ($host_down) { print "255 0 0 "; } elsif ($svc_crit) { print "127 0 0 "; } elsif ($host_unr) { print "255 165 0 "; } elsif ($svc_warn) { print "127 82 0 "; } else { print "0 255 0 "; } print "\n"; print "Hst DOWN $host_down UNR $host_unr ACK $host_ack UP $host_up\n"; print "Svc CRIT $svc_crit WRN $svc_warn ACK $svc_ack OK $svc_ok\n"; 0;