* now can use as non root (using blkid cache file) release-0.2
authorChristian Arnold <arnold@schlittermann.de>
Wed, 20 Apr 2011 14:08:34 +0200
changeset 3 8c160b9b0a73
parent 2 c1d47261de24
child 4 2a5b096d7bc1
* now can use as non root (using blkid cache file) * more detailed output in nagios
check_dump.pl
debian/changelog
debian/control
--- 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 <http://www.gnu.org/licenses/>.
 #
-#	Christian Arnold <arnold@schlittermann.de>
+#   Christian Arnold <arnold@schlittermann.de>
 
 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<root>,
+the built-in B<blkid>(8) will get block device attributes from the default cache file I</etc/blkid.tab>.
 
 =head1 VERSION
 
-This man page is current for version 0.1 of B<check_dump>.
+This man page is current for version 0.2 of B<check_dump>.
 
 =head1 AUTHOR
 
--- a/debian/changelog	Tue Apr 19 16:36:02 2011 +0200
+++ b/debian/changelog	Wed Apr 20 14:08:34 2011 +0200
@@ -1,3 +1,10 @@
+nagios-plugin-dump (0.2) stable; urgency=low
+
+  * now can use as non root (using blkid cache file)
+  * more detailed output in nagios
+
+ -- Christian Arnold <arnold@schlittermann.de>  Wed, 20 Apr 2011 13:57:53 +0200
+
 nagios-plugin-dump (0.1) stable; urgency=low
 
   * Initial release
--- a/debian/control	Tue Apr 19 16:36:02 2011 +0200
+++ b/debian/control	Wed Apr 20 14:08:34 2011 +0200
@@ -7,6 +7,6 @@
 
 Package: nagios-plugin-dump
 Architecture: all
-Depends: ${shlibs:Depends}, ${misc:Depends}, perl-base, perl-doc, libperl6-slurp-perl, libtimedate-perl, dump
+Depends: perl-base, perl-doc, libperl6-slurp-perl, libtimedate-perl, dump
 Description: nagios plugin to check backup status from dump
  This nagios plugin check backup status from dump.