diff options
Diffstat (limited to 'contrib/check_appletalk.pl')
-rw-r--r-- | contrib/check_appletalk.pl | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/contrib/check_appletalk.pl b/contrib/check_appletalk.pl new file mode 100644 index 00000000..0b7754fe --- /dev/null +++ b/contrib/check_appletalk.pl @@ -0,0 +1,210 @@ +#! /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$ +# +# 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$ ' ); + 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$ ' ); + 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 |