#!/usr/bin/perl # # $Id: nagios_check_gmirror 666 2007-10-24 13:17:07Z root $ use strict; use lib "/usr/local/libexec/nagios"; use utils qw (%ERRORS &print_revision &support); my @mirrors_fail = (); my @mirrors_ok = (); my $check_all = 0; if ( int(@ARGV) == 0 or $ARGV[0] eq '-h' ) { print "Usage: $0 (-a | mirror_name [mirror_name ..])\n"; exit $ERRORS{'UNKNOWN'} } if ( $ARGV[0] eq '-a' ) { $check_all = 1; } else { while ( int(@ARGV) > 0 ) { unless ( $ARGV[0] =~ /^[a-zA-Z0-9_]+$/ ) { print "Invalid characters in mirror list, bailing out\n"; exit $ERRORS{'UNKNOWN'}; } push @mirrors_fail, shift @ARGV; } } unless (open STATUS, "gmirror status|") { print "gmirror exec failed: $!\n"; exit $ERRORS{'UNKNOWN'}; } while () { if ( m!^mirror/! ) { if ( m!^mirror/(\S+)\s+COMPLETE! ) { push @mirrors_ok, $1; for ( my $i = 0; $i < int(@mirrors_fail); $i++ ) { if ( $mirrors_fail[$i] eq $1 ) { my $tmp = pop @mirrors_fail; int (@mirrors_fail) > 0 and $mirrors_fail[$i] = $tmp; last; } } } else { if ( m!^mirror/(\S+)\s+DEGRADED! and $check_all == 1 ) { push @mirrors_fail, $1; } } } } close STATUS; if ( int(@mirrors_fail) == 0 ) { print "OK - all gmirror volumes are operational:"; foreach my $mirror (@mirrors_ok) { print " $mirror"; } print "\n"; exit $ERRORS{'OK'}; } else { print "CRITICAL - the following gmirror volumes are degraded or missing:"; foreach my $mirror (@mirrors_fail) { print " $mirror"; } print "\n"; exit $ERRORS{'CRITICAL'}; }