#!/usr/bin/perl # $Id: host_down_report_with_links,v 1.2 2006-08-21 14:18:19+10 sh1517 Exp sh1517 $ use strict ; use Nagios::Report ; use Getopt::Std ; use vars qw($opt_t) ; getopt 't' ; my $usage = < Displays those hosts with less than 100% total time up during the timeperiod. timeperiod ::= today | yesterday | thisweek | lastweek | thismonth | lastmonth | thisyear | lastyear | last12hours | last24hours | last7days | last31days | lastdays | lasthours | lastmin(ute)?(s)? | HHMM | HH:MM | DD.MM.YY | DD.MM.YYYY | MM/DD/YY | MM/DD/YYYY | 24hourtime date | date1 - date2 | 24hourtime date1 - 24hourtime date2 | Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec (YYYY)? Timeperiods other than 'yesterday', 'lastweek', 'lastmonth' or 'lastyear' end now. Quote the timeperiod if it contains spaces ('time date'). eg $0 -t '07:00 01.12.2005' $0 -t last7days $0 -t last2hours $0 -t '07:00 01.12.2005-07:00 02.12.2005' $0 -t '01.12.2005 - 02.12.2005' $0 -t 'Mar 2006' USAGE die $usage unless $opt_t ; my $valid_time = qr<^(?: today | yesterday | this (?:week|month|year) | last (?:week|24hours|12hours|7days|31days|\d+days?|\d+hours?|\d+min(ute)?s?) | (?: \d\d :? \d\d \s+ \d\d? [./] \d\d? [./] \d\d? (?:\d\d)?) | (?: \d\d :? \d\d) | (?: \d\d? [./] \d\d? [./] \d\d (?:\d\d)?) | (?: \d\d? [./] \d\d? [./] \d\d (?:\d\d)? \s* - \s* \d\d? [./] \d\d? [./] \d\d? (?:\d\d)?) | (?: \d\d :? \d\d \s+ \d\d? [./] \d\d? [./] \d\d (?:\d\d)? \s* - \s* \d\d :? \d\d \s+ \d\d? [./] \d\d? [./] \d\d (?:\d\d)?) | (?i: Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) | (?i: Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \s* \d{4} )$>x ; die $usage unless $opt_t =~ /$valid_time/ ; my $x = Nagios::Report->new(q, [ qw(24x7) ], $opt_t) or die "Can't construct Nagios::Report object." ; $x->mkreport( [ qw( HOST_NAME PERCENT_TOTAL_TIME_UP DOWN UP OUTAGE AVAIL_URL ) ], sub { my %F = @_; my $u = $F{PERCENT_TOTAL_TIME_UP}; $u =~ s/%//; $u < 100 }, # sub { 1 }, &comp(alpha => 0, ascend => 0, fields => [qw(TOTAL_TIME_DOWN TOTAL_TIME_UNREACHABLE)]), sub { my $F = shift @_; my $d = $F->{TOTAL_TIME_DOWN} ; my $u = $F->{TOTAL_TIME_UNREACHABLE} ; $F->{TOTAL_TIME_DOWN_HMS} = t2hms($d) ; $F->{TOTAL_TIME_UNREACHABLE_HMS} = t2hms($u) ; qw(TOTAL_TIME_DOWN_HMS TOTAL_TIME_UNREACHABLE_HMS) }, 1, ) ; $x->debug_dump(240, 2) ; # 240 chars is needed for the URLs.