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
|
#!/usr/bin/perl
#
# See LICENSE for copyright information
#
# check_load.pl <host> [warn] [critical] [port]
#
# NetSaint host script to get the load and uptime from a client that is running
# netsaint_statd.
#
require 5.003;
BEGIN { $ENV{PATH} = '/bin' }
use Socket;
use POSIX;
use strict;
sub usage;
my $TIMEOUT = 15;
my %ERRORS = ('UNKNOWN', '-1',
'OK', '0',
'WARNING', '1',
'CRITICAL', '2');
my $remote = shift || &usage(%ERRORS);
my $warn = shift || 5;
my $crit = shift || ($warn + 5);
my $port = shift || 1040;
my $remoteaddr = inet_aton("$remote");
my $paddr = sockaddr_in($port, $remoteaddr) || die "Can't create info for connection: #!\n";;
my $proto = getprotobyname('tcp');
socket(Server, PF_INET, SOCK_STREAM, $proto) || die "Can't create socket: $!";
setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, 1);
# Just in case of problems, let's not hang NetSaint
$SIG{'ALRM'} = sub {
close(Server);
select(STDOUT);
print "No Answer from Client\n";
exit $ERRORS{"UNKNOWN"};
};
alarm($TIMEOUT);
# send ourselves a SIGALRM if we cannot connect to the client
unless (connect(Server, $paddr)) {
kill 'ALRM', $$;
}
my $state = "OK";
my $answer = undef;
select(Server);
$| = 1;
print Server "uptime\n";
my ($servanswer) = <Server>;
alarm(0);
close(Server);
select(STDOUT);
if ($servanswer =~ /^(.*) - (.*) /)
{
my $uptime = $1;
my $load = $2;
if ($load < $warn)
{
$answer = "Load ok - up $uptime, 5-min load $load\n";
}
elsif ($load < $crit)
{
$state = "WARNING";
$answer = "5-min load currently $load, up $uptime\n";
}
else
{
$state = "CRITICAL";
$answer = "5-min load currently $load, up $uptime\n";
}
}
else
{
$state = "UNKNOWN";
$answer = "Information unknown!\n";
}
print $answer;
exit $ERRORS{$state};
sub usage {
print "Minimum arguments not supplied!\n";
print "\n";
print "Perl Check Load/Uptime plugin for NetSaint\n";
print "Copyright (c) 1999 Charlie Cook\n";
print "\n";
print "Usage: $0 <host> [<warn [<crit> [<port>]]]\n";
print "\n";
print "<warn> = 5-min load average at which a warning message will be generated.\n Defaults to 5.\n";
print "<crit> = 5-min load average at which a critical message will be generated.\n Defaults to warning level + 5.\n";
print "<port> = Port that the status daemon is running on <host>.\n Defaults to 1040.\n";
exit $ERRORS{"UNKNOWN"};
}
|