[Nagiosplug-checkins] Nagios-Plugin/t check_stuff.pl, NONE, 1.1 check_stuff.t, NONE, 1.1
Nathan Vonnahme
n8v at users.sourceforge.net
Thu Sep 7 02:53:53 CEST 2006
Update of /cvsroot/nagiosplug/Nagios-Plugin/t
In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv10810/t
Added Files:
check_stuff.pl check_stuff.t
Log Message:
adding example script and test for it, and fixing POD according to warnings from POD::Checker
--- NEW FILE: check_stuff.t ---
#!/usr/local/bin/perl
#
use strict; use warnings;
#use Test::More qw(no_plan);
use Test::More tests => 16;
my ($r,$args);
my $s = 't/check_stuff.pl';
$s = 'perl -Ilib '.$s;
my $n = 'CHECK_STUFF';
# Nagios status strings and exit codes
my %e = qw(
OK 0
WARNING 1
CRITICAL 2
UNKNOWN 3
);
$r = `$s`;
is $?>>8 , $e{UNKNOWN}, "exits($e{UNKNOWN}) with no args";
like $r, qr/^$n UNKNOWN/, "UNKNOWN with no args";
#TODO:
SKIP: {
local $TODO = q~d'oh! we'll have to redirect STDERR and check it with like() here instead of checking `` which only gets STDIN. Maybe use IPC::Open3?~;
skip "too noisy, see TODO here", 6;
$r = `$s -V`;
is $?>>8 , $e{UNKNOWN}, "exits($e{UNKNOWN}) with -V arg";
like $r, qr/\d+\.\d/i, "looks like there's a version"; # broken
is $r, '', "prints nothing to STDOUT";
$r = `$s -h`;
is $?>>8 , $e{UNKNOWN}, "exits($e{UNKNOWN}) with -h arg";
like $r, qr/usage/i, "looks like there's something helpful"; # broken
is $r, '', "prints nothing to STDOUT";
}
$args = " -r 99 ";
diag "running `$s $args`" if $ENV{TEST_VERBOSE};
$r = `$s $args`;
diag "output: '$r'" if $ENV{TEST_VERBOSE};
is $?>>8 , $e{UNKNOWN}, "exits($e{UNKNOWN}) with $args";
like $r, qr/UNKNOWN.+invalid/i, "UNKNOWN (warning: invalid -r) with $args";
my $expected = {
" -w 10:15 -c~:15 -r 0" => 'WARNING',
" -w 10:15 -c~:15 -r 11" => 'OK',
" -w 10:15 -c~:15 -r 15.8" => 'CRITICAL',
};
test_expected( $s, $expected );
sub test_expected {
my $s = shift;
my $expected = shift;
foreach ( keys %$expected ) {
diag "running `$s $_`" if $ENV{TEST_VERBOSE};
$r = `$s $_`;
diag "output: '$r'" if $ENV{TEST_VERBOSE};
is $?>>8 , $e{$expected->{$_}}, "exits($e{$expected->{$_}}) with $_";
like $r, qr/^$n $expected->{$_}/i, "looks $expected->{$_} with $_";
}
}
--- NEW FILE: check_stuff.pl ---
#!/usr/local/bin/perl
### check_stuff.pl
# an example Nagios plugin using the Nagios::Plugin modules.
# Originally by Nathan Vonnahme, n8v at users dot sourceforge
# dot net, July 19 2006
# Please modify to your heart's content and use as the basis for all
# the really cool Nagios monitoring scripts you're going to create.
# You rock.
# $Id: check_stuff.pl,v 1.1 2006/09/07 00:53:51 n8v Exp $
##############################################################################
# prologue
use strict;
use warnings;
use Nagios::Plugin qw(%ERRORS);
use Nagios::Plugin::Getopt;
use vars qw($VERSION $PROGNAME $verbose $warn $critical $timeout $result);
'$Revision: 1.1 $' =~ /^.*(\d+.\d+) \$$/; # Use The Revision from RCS/CVS/Subversion
$VERSION = $1;
$0 =~ m!^.*/([^/]+)$!;
$PROGNAME = $1;
# shortname is the identifier this script will give to Nagios.
# it's set here to the uppercase program name with file extension removed,
# e.g. check_stuff.pl -> CHECK_STUFF
my $short_name = uc $PROGNAME;
$short_name =~ s/\.\w+$//;
##############################################################################
# define and get the command line options.
# see the command line option guidelines at
#
# Instantiate Nagios::Plugin::Getopt object (usage and version are mandatory)
my $nagopts = Nagios::Plugin::Getopt->new(
usage => "Usage: %s [ -v|--verbose ] [-H <host>] [-t <timeout>]
[ -c|--critical=<critical threshold> ]
[ -w|--warning=<warning threshold> ]
[ -r|--result = <INTEGER> ]",
version => $VERSION,
blurb => 'This plugin is an example of a Nagios plugin written in Perl using the Nagios::Plugin modules. It will generate a random integer between 1 and 20 (though you can specify the number with the -n option for testing), and will output OK, WARNING or CRITICAL if the resulting number is outside the specified thresholds.',
extra => qq{
THRESHOLDs for -w and -c are specified 'min:max' or 'min:' or ':max'
(or 'max'). If specified '\@min:max', a warning status will be generated
if the count *is* inside the specified range.
See more threshold examples at
http://nagiosplug.sourceforge.net/developer-guidelines.html#THRESHOLDFORMAT
Examples:
$PROGNAME -w 10 -c 18
Returns a warning if the resulting number is greater than 10, or a
critical error if it is greater than 18.
$PROGNAME -w 10: -c 4:
Returns a warning if the resulting number is less than 10, or a
critical error if it is less than 4.
}
);
# Define and document the valid command line options
# usage, help, version, timeout and verbose are defined by default.
$nagopts->arg(
spec => 'warning|w=s',
help =>
qq{-w, --warning=INTEGER:INTEGER
Minimum and maximum number of allowable result, outside of which a
warning will be generated. If omitted, no warning is generated.},
# required => 1,
# default => 10,
);
$nagopts->arg(
spec => 'critical|c=s',
help =>
qq{-c, --critical=INTEGER:INTEGER
Minimum and maximum number of the generated result, outside of
which a critical will be generated. If omitted, a critical is
generated if no processes are running.},
);
$nagopts->arg(
spec => 'result|r=f',
help =>
qq{-r, --result=INTEGER
Specify the result on the command line rather than generating a
random number. For testing.},
);
# Parse arguments and process standard ones (e.g. usage, help, version)
$nagopts->getopts;
my $p = Nagios::Plugin->new;
$p->shortname($short_name);
# sanity checking on command line options
if ( (defined $nagopts->result) && ($nagopts->result < 0 || $nagopts->result > 20) ) {
$p->die(
return_code => $ERRORS{UNKNOWN},
message => 'invalid number supplied for the -r option'
);
}
unless ( defined $nagopts->warning || defined $nagopts->critical ) {
$p->die(
return_code => $ERRORS{UNKNOWN},
message => "you didn't supply a threshold argument"
);
}
##############################################################################
# define a Nagios::Threshold object based on the command line options
my $t = $p->set_thresholds( warning => $nagopts->warning, critical => $nagopts->critical );
##############################################################################
# check stuff.
# THIS is where you'd do your actual checking to get a real value for $result
# don't forget to timeout after $nagopts->timeout seconds, if applicable.
my $result;
if (defined $nagopts->result) {
$result = $nagopts->result;
print "using supplied result $result from command line\n" if $nagopts->verbose;
}
else {
$result = int rand(20)+1;
print "generated random result $result\n" if $nagopts->verbose;
}
print "status of result ($result) is ", $t->get_status($result), "\n"
if $nagopts->verbose;
##############################################################################
# output the result and exit
$p->die(
return_code => $t->get_status($result),
message => "sample result was $result"
);
More information about the Commits
mailing list