Code

Initial revision
[nagiosplug.git] / contrib / aix / check_ping
1 #!/usr/bin/perl -w
3 #================================================================
4 #
5 # This perl script will accept an argument and simply pass it
6 # to ping.  It works by sending 2 ping to the specified host
7 # and evaluating on the average delta time of those 2 pings.
8 #
9 #    Author: SpEnTBoY 
10 #    Email: lonny@abyss.za.org
11 #    April 5,2000
12 #
13 #================================================================
15 #============================
16 # State predefined stuff and
17 #       requirements
18 #============================
20 require 5.004;
21 use POSIX;
22 use strict;
24 sub usage;
26 my $ipaddr = $ARGV[0];
28 my $TIMEOUT = 15;
30 my %ERRORS = ('UNKNOWN' , '-1',
31               'OK' , '0',
32               'WARNING', '1',
33               'CRITICAL', '2');
35 my $remote = shift || &usage(%ERRORS);
36 my $warning = shift || 750;
37 my $critical = shift || 1000;
39 my $state = "OK";
40 my $answer = undef;
41 my $offset = undef;
42 my $line = undef;
44 #============================================================
45 # If theres no response we can exit the bloody thing cleanly
46 # last thing I want to do is hang an AIX system ;-)
47 #============================================================
49 $SIG{'ALRM'} = sub {
50      print ("ERROR: No response from PING! (alarm)\n");
51      exit $ERRORS{"UNKNOWN"};
52 };
53 alarm($TIMEOUT);
55 #================================================
56 # Pass stddn from $ARGV to the command and parse
57 # the info we need (namely the value for "max"
58 #================================================
62 open(PING,"/usr/sbin/ping -c 2 '$ipaddr' >&1|");
63 while (<PING>) {
64         $line = $_;
65         if (/round-trip min\/avg\/max = (.+)\/(.+)\/(.+) ms/) {
66         $offset = $3;
67         last;
68     }
69 }
71 #==================================================
72 # Do some error checking on the output of the file
73 # and implement values for <crit> and <warn> 
74 # deffinitions if they were specified by the user
75 # or sub in the predefined ones
76 #==================================================
78 if (defined $offset) {
79     if (abs($offset) > $warning) {
80         if (abs($offset) > $critical) {
81             $state = "CRITICAL";
82             $answer = ": Ping Time $offset MS greater than +/- $critical MS\n";
83         } else {
84             $state = "WARNING";
85             $answer = ": Ping Time $offset MS greater than +/- $warning MS\n";
86         }
87     } else {
88         $state = "OK";
89         $answer = ": Ping Time $offset MS\n";
90     }
91 } else {
92     $state = "UNKNOWN";
93     $answer = ": $line\n";
94 }
95 print ("$state$answer");
96 exit $ERRORS{$state};
98 sub usage {
99         print "\n";
100         print "#=========================================\n";
101         print "Check_Ping 0.02 script by Lonny Selinger\n";
102         print "Made with AIX in mind ;-)\n";
103         print "#=========================================\n";
104         print "\n";
105         print "#================================================\n";
106         print " I'm going to need a few more arguments from you\n";
107         print "#================================================\n";
108         print "\n";
109         print "#================================================\n";
110         print "Usage: check_ping <host> [<warn> [<crit>]\n";
111         print "#================================================\n";
112         print "\n";
113         print "<warn> = Ping in MS at which a warning message will be generated.\n      Defaults to 750.\n";
114         print "<crit> = Ping in MS at which a critical message will be generated.\n     Defaults to 1000.\n\n";
115         exit $ERRORS{"UNKNOWN"};