diff -r c1d47261de24 -r 8c160b9b0a73 check_dump.pl --- a/check_dump.pl Tue Apr 19 16:36:02 2011 +0200 +++ b/check_dump.pl Wed Apr 20 14:08:34 2011 +0200 @@ -1,4 +1,4 @@ -#! /usr/bin/perl -w +#! /usr/bin/perl # Copyright (C) 2011 Christian Arnold # @@ -15,12 +15,12 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -# Christian Arnold +# Christian Arnold use 5.010; -use Perl6::Slurp; use strict; use warnings; +use Perl6::Slurp; use File::Basename; use Pod::Usage; use Getopt::Long; @@ -48,7 +48,7 @@ ); my $ME = basename $0; -my $VERSION = "0.1"; +my $VERSION = "0.2"; my $NAME = "DUMP"; my $NOW = time(); @@ -72,33 +72,58 @@ foreach my $devno ( keys %devs ) { if ( $devs{$devno}{date} ) { - if ( ( $NOW - $devs{$devno}{date} ) > - ( $devs{$devno}{dump} * 86400 ) ) + if ( ( $NOW - str2time( $devs{$devno}{date} ) ) > + ( $devs{$devno}{dump} * 86_400 * 2 ) ) + { + $rc{ $devs{$devno}{dev} } = { + rc => $ERRORS{CRITICAL}, + lastdump => "[$devs{$devno}{date}]" + }; + } + elsif ( ( $NOW - str2time( $devs{$devno}{date} ) ) > + ( $devs{$devno}{dump} * 86_400 ) ) { - $rc{ $devs{$devno}{dev} } = { rc => $ERRORS{WARNING} }; + $rc{ $devs{$devno}{dev} } = { + rc => $ERRORS{WARNING}, + lastdump => "[$devs{$devno}{date}]" + }; + } + else { + $rc{ $devs{$devno}{dev} } = { + rc => $ERRORS{OK}, + lastdump => "[$devs{$devno}{date}]" + }; } } else { - $rc{ $devs{$devno}{dev} } = { rc => $ERRORS{CRITICAL} }; + $rc{ $devs{$devno}{dev} } = { + rc => $ERRORS{CRITICAL}, + lastdump => "[NEVER]" + }; } } - my ( @critical, @warning ); + my ( @critical, @warning, @ok ); foreach my $dev ( keys %rc ) { if ( $rc{$dev}{rc} eq $ERRORS{CRITICAL} ) { - push @critical, $dev; + push @critical, "$dev last dump: $rc{$dev}{lastdump}"; + next; + } + elsif ( $rc{$dev}{rc} eq $ERRORS{WARNING} ) { + push @warning, "$dev last dump: $rc{$dev}{lastdump}"; + next; } else { - push @warning, $dev; + push @ok, "$dev last dump: $rc{$dev}{lastdump}"; } } - say "$NAME CRITICAL: @critical check dump backup" and exit $ERRORS{CRITICAL} + say "$NAME CRITICAL: " . join( ', ', @critical ) and exit $ERRORS{CRITICAL} if (@critical); - say "$NAME WARNING: @warning check dump backup" and exit $ERRORS{WARNING} + say "$NAME WARNING: " . join( ', ', @warning ) and exit $ERRORS{WARNING} if (@warning); - say "$NAME OK: all dump backups in limit" and exit $ERRORS{OK}; + say "$NAME OK: " . join( ', ', @ok ) and exit $ERRORS{OK}; } sub get_candidates() { @@ -127,9 +152,9 @@ my %devs = @_; say "$NAME CRITICAL: Command 'dump' not found." and exit $ERRORS{CRITICAL} - if system("command -v dump >/dev/null"); + if system("command -v /sbin/dump >/dev/null"); - foreach (`dump -W`) { + foreach (`/sbin/dump -W`) { chomp; /^ (?:\s+|>\s+) @@ -152,7 +177,7 @@ mp => $+{mp}, level => $+{level}, dump => $devs{"$major:$minor"}{dump}, - date => str2time( $+{date} ) + date => $+{date} }; } } @@ -163,15 +188,26 @@ sub real_device($) { my $dev = shift; + # get the real device if ( $dev ~~ /^(LABEL|UUID)=/ ) { - chomp( $dev = `blkid -c /dev/null -o device -t '$dev'` ); + + # only root can use blkid without cache + if ( not scalar($<) ) { + chomp( $dev = `/sbin/blkid -c /dev/null -o device -t '$dev'` ); + } + else { + chomp( $dev = `/sbin/blkid -o device -t '$dev'` ); + } } $dev = realpath($dev); } sub devno($) { - my @mm = ( ( stat shift )[6] >> 8, ( stat _ )[6] & 0xff ); + my $dev = shift; + + # get major and minor number for device + my @mm = ( ( stat($dev) )[6] >> 8, ( stat($dev) )[6] & 0xff ); return wantarray ? @mm : "$mm[0]:$mm[1]"; } @@ -223,11 +259,12 @@ =head1 DESCRIPTION -This nagios plugin check backup status from dump. +This nagios plugin check backup status from dump. If run as non B, +the built-in B(8) will get block device attributes from the default cache file I. =head1 VERSION -This man page is current for version 0.1 of B. +This man page is current for version 0.2 of B. =head1 AUTHOR