Nagios status.dat
From Federal Burro of Information
Jump to navigationJump to search
#!/usr/bin/perl -w use strict; use CGI qw(:standard); use File::Slurp; print header; my $h = param('h'); # host list, comma seperated. my $v = param('v'); # which variable to grep out. my $type ; my $data; # big data strcuture. my $rawtype = param('type'); my $statfile = "/usr/local/nagios/var/status.dat"; if ( ! defined ( $h )) { $h = "MCC-Cap1_PRD"; } if ( ! defined ( $v )) { $v = "current_state"; } if ( $h =~ /(\w+)/ ) { print "query string is $h<br>\n"; } else { die "query string is not valid.\n"; } if ( length($h ) < 3 ) { die "Query too short \n"; } my %hostlist = map { $_ => 1 } split ( ",", $h ) ; my $file = read_file( $statfile ) ; $file =~ s/\t//; my @services = $file =~ /servicestatus {[\\S\\s]*?}/gm; while ( $file =~ /servicestatus \{\n([\S\s]*?)\}/mg ) { my $service = $1; $service =~ s/([ \t]+)//g; my @pairs = split ( /\n/ , $service ); my ($name , $value ); my %hash; foreach ( @pairs ) { ($name , $value ) = split /=/; if ( defined $value ) { $hash{$name} = $value; } else { $hash{$name} = "NULL"; } } if ( $hostlist{$hash{'host_name'}} ) { $data->{$hash{'service_description'}}->{$hash{'host_name'}} = $hash{$v}; } } print "<table border=\"1\">"; # print the host header print "<tr><td>"; foreach my $host ( sort keys %hostlist ) { print "<td>".$host."</td>"; } print "</tr>\n"; #print per test lines foreach my $var ( sort keys ( %$data ) ) { print "\t<tr><td>".$var."</td>"; my $tmp = $data->{$var}; foreach my $host ( sort keys %hostlist ) { my $color; if ( $tmp->{$host} eq "0" ) { $color = "green" }; if ( $tmp->{$host} eq "1" ) { $color = "yellow" }; if ( $tmp->{$host} eq "2" ) { $color = "red" }; if ( $tmp->{$host} eq "" ) { $color = "purple" }; print "<td bgcolor=\"".$color."\">".$tmp->{$host}."</td>"; } print "</tr>\n"; } print "</table>\n";