[Nagios-devel] ANNOUNCE: appletalk ping plugin

Support forum for Nagios Core, Nagios Plugins, NCPA, NRPE, NSCA, NDOUtils and more. Engage with the community of users including those using the open source solutions.
Locked
Guest

[Nagios-devel] ANNOUNCE: appletalk ping plugin

Post by Guest »

Hi,

I've developed a small appletalk ping plugin.
It uses the "aecho" binary which sends Apple Echo Protocol (AEP) packets
(similar to ICMP echo requests (ping)).

regards
Stefan Beck


----------------------------------------------------------------------------
#! /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.0 $
#
# Copyright Notice: GPL
#
BEGIN {
if ( $0 =~ m/^(.*?)[\/\\]([^\/\\]+)$/ ) {
$runtimedir = $1;
$PROGNAME = $2;
}
delete $ENV{'LANG'};
}

use strict;
use lib $main::runtimedir;

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

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 () {
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.0 $ ' );
print "Copyright (c) 2002 Stefan Beck\n";
print "\n";
print "Check if an atalkhost responds to an atalk echo using\n";
print " aecho -c \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 ,% where is the round trip average
travel\n";
print
"time (ms) which triggers a WARNING or CRITICAL state, and
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 ,% -c ,%\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.0 $ ' );
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 (

...[email truncated]...


This post was automatically imported from historical nagios-devel mailing list archives
Original poster: becks@itereu.de
Locked