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
|
#!/usr/bin/perl
#
# See LICENSE for copyright information
#
# check_users.pl <host> [warn] [critical] [port]
#
# NetSaint host script to get the number of users 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 || 15;
my $crit = shift || ($warn + 20);
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 "users\n";
my ($servanswer) = <Server>;
alarm(0);
close(Server);
select(STDOUT);
if ($servanswer =~ /^(\d*)/) {
my ($users) = $1;
if ($users < $warn) {
$answer = "Users ok - $users - connected\n";
} elsif ($users < $crit) {
$state = "WARNING";
$answer = "$users users currently connected\n";
} else {
$state = "CRITICAL";
$answer = "$users users currently connected\n";
}
} else {
$state = "UNKNOWN";
$answer = "Number of users unknown!\n";
}
print $answer;
exit $ERRORS{$state};
sub usage {
print "Minimum arguments not supplied!\n";
print "\n";
print "Perl Check Users plugin for NetSaint\n";
print "Copyright (c) 1999 Charlie Cook & Nick Reinking\n";
print "\n";
print "Usage: $0 <host> [<warn> [<crit> [<port>]]]\n";
print "\n";
print "<warn> = Number of users at which a warning message will be generated.\n Defaults to 15.\n";
print "<crit> = Number of users at which a critical message will be generated.\n Defaults to warn+20.\n";
print "<port> = Port that the status daemon is running on <host>.\n Defaults to 1040.\n";
exit $ERRORS{"UNKNOWN"};
}
|