1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 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: 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
|