#! /usr/bin/perl -wT
#
# check_atalk_ping plugin for nagios
#
# usage:
#    check_atalk_ping atalkaddress
#
# Checks if an atalkhost responds to an atalk echo
# using "aecho"
#
# initial version: 23 October 2002 by Stefan Beck, IT Software Solutions
# current status: $Revision: 1.1 $
#
# Copyright Notice: GPL
#
BEGIN {
     if ( $0 =~ m/^(.*?)[\/\\]([^\/\\]+)$/ ) {
         $runtimedir = $1;
         $PROGNAME   = $2;
     }
     delete $ENV{'LANG'};
}

use strict;
use lib utils.pm;

use utils qw($TIMEOUT %ERRORS &print_revision &support);
use vars qw($PROGNAME);

$PROGNAME = "check_atalk";

my (
     $verbose,      $host,          $warning_avg, $warning_loss,
     $critical_avg, $critical_loss, $count,       $cmd,
     $avg,          $loss,          $line
);
my ( $opt_c, $opt_w, $opt_H, $opt_p );
$opt_c = $opt_w = $opt_p = $opt_H = '';

sub print_help ();
sub print_usage ();
sub help ();
sub version ();

# Just in case of problems, let's not hang NetSaint
$SIG{'ALRM'} = sub {
         print "Plugin Timeout\n";
         exit 2;
};
alarm($TIMEOUT);

delete @ENV{ 'PATH', 'IFS', 'CDPATH', 'ENV', 'BASH_ENV' };

use Getopt::Long;
Getopt::Long::Configure( 'bundling', 'no_ignore_case' );
GetOptions(
     "V|version"    => \&version,
     "h|help"       => \&help,
     "p|packets=i"  => \$opt_p,
     "c|critical=s" => \$opt_c,
     "w|warning=s"  => \$opt_w,
     "H|hostname=s" => \$opt_H
);


# appletalk  hostname ot address
$opt_H = shift unless ($opt_H);
unless ($opt_H) { print_usage (); exit $ERRORS{'UNKNOWN'}; }
if ( $opt_H && $opt_H =~ m/^([-a-zA-Z\.\:0-9]+)$/ ) {
     $host = $1;
}
else {
     print "$opt_H is not a valid host name\n";
     exit $ERRORS{'UNKNOWN'};
}

# number of packets
$opt_p = 5 unless $opt_p;
if ( $opt_p && $opt_p =~ m/^([1-9]+[0-9]*)$/ ) {
     $count = $1;
}
else {
     print "$opt_p is not a valid packet number\n";
     exit $ERRORS{'UNKNOWN'};
}

if ( $opt_w && $opt_w =~ m/^([1-9]+[0-9]*),([1-9][0-9]*)%$/ ) {
     $warning_avg  = $1;
     $warning_loss = $2;
}
else {
     print "$opt_w is not a valid threshold\n";
     exit $ERRORS{'UNKNOWN'};
}

if ( $opt_c && $opt_c =~ m/^([1-9]+[0-9]*),([1-9][0-9]*)%$/ ) {
     $critical_avg  = $1;
     $critical_loss = $2;
}
else {
     print "$opt_c is not a valid threshold\n";
     exit $ERRORS{'UNKNOWN'};
}

$cmd = "/usr/bin/aecho -c $count $host 2>&1 |";
print "$cmd\n" if ($verbose);
open CMD, $cmd;

while (<CMD>) {
     print $_ if ($verbose);
     $line = $_;

     # 5 packets sent, 5 packets received, 0% packet loss
     # round-trip (ms)  min/avg/max = 0/0/0

     if (/received, ([0-9]+)% packet loss/) {
         $loss = $1;
     }
     if (/min\/avg\/max = [0-9]+\/([0-9]+)\/[0-9]+/) {
         $avg = $1;
     }
}

sub print_help() {
     print_revision( $PROGNAME, '$Revision: 1.1 $ ' );
     print "Copyright (c) 2002 Stefan Beck\n";
     print "\n";
     print "Check if an atalkhost responds to an atalk echo using\n";
     print "      aecho -c <packets> <atalkhost>\n";
     print "\n";
     print_usage ();
     print "\n";
     print "-H, --hostname=HOST\n";
     print "   host to ping\n";
     print "-w, --warning=THRESHOLD\n";
     print "   warning threshold pair\n";
     print "-c, --critical=THRESHOLD\n";
     print "   critical threshold pair\n";
     print "-p, --packets=INTEGER\n";
     print "   number of ICMP ECHO packets to send (Default: 5)\n";
     print "\n";
     print
       "THRESHOLD is <rta>,<pl>% where <rta> is the round trip average 
travel\n";
     print
       "time (ms) which triggers a WARNING or CRITICAL state, and <pl> 
is the\n";
     print "percentage of packet loss to trigger an alarm state.\n";
     print "\n";

     support();
}

sub print_usage () {
     print "$PROGNAME -H atalkhost -w <wrta>,<wpl>% -c <crta>,<cpl>%\n";
     print "         [-p packets] [-t timeout] [-L]\n";
     print "$PROGNAME [-h | --help]\n";
     print "$PROGNAME [-V | --version]\n";
}

sub version () {
     print_revision( $PROGNAME, '$Revision: 1.1 $ ' );
     exit $ERRORS{'OK'};
}

sub help () {
     print_help ();
     exit $ERRORS{'OK'};
}

my $state  = "OK";
my $answer = undef;

if ( defined $loss && defined $avg ) {
     if ( $loss >= $critical_loss ) {
         $state = "CRITICAL";
     }
     elsif ( $avg >= $critical_avg ) {
         $state = "CRITICAL";
     }
     elsif ( $loss >= $warning_loss ) {
         $state = "WARNING";
     }
     elsif ( $avg >= $warning_avg ) {
         $state = "WARNING";
     }
     else {
         $state = "OK";
     }
     $answer = "Appletalk PING $state - Packet loss = $loss%, RTA = $avg 
ms\n";
}
else {
     $state  = "UNKNOWN";
     $answer = "UNKNOWN - $line";
}
print $answer;
exit $ERRORS{$state};




-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Nagios-devel mailing list
Nagios-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nagios-devel
