2010-03-18 11:46:48 +01:00
|
|
|
#!/usr/bin/perl -w
|
|
|
|
#
|
|
|
|
# check_squid - Nagios check plugin for testing a Squid proxy
|
|
|
|
#
|
|
|
|
# Christoph Haas <email@christoph-haas.de>
|
|
|
|
# Andre Osti <andreoandre@gmail.com>
|
|
|
|
#
|
|
|
|
# License: GPL 2
|
|
|
|
#
|
|
|
|
# V0.2
|
|
|
|
#
|
|
|
|
|
|
|
|
require 5.004;
|
|
|
|
use POSIX;
|
|
|
|
use strict;
|
|
|
|
use Getopt::Long;
|
|
|
|
use vars qw($opt_V $opt_h $opt_t $opt_u $opt_n $opt_s
|
|
|
|
$opt_p $opt_l $opt_o $opt_m $opt_e);
|
|
|
|
use vars qw($PROGNAME);
|
|
|
|
use lib "/usr/lib/nagios/plugins";
|
|
|
|
use utils qw($TIMEOUT %ERRORS &print_revision &support &usage);
|
|
|
|
use LWP::UserAgent;
|
|
|
|
use HTTP::Request::Common qw(POST GET);
|
|
|
|
use HTTP::Headers;
|
2010-03-18 13:00:58 +01:00
|
|
|
use Time::HiRes;
|
2010-03-18 11:46:48 +01:00
|
|
|
my ($url, $urluser, $urlpass, $proxy, $proxyport,
|
|
|
|
$proxyuser, $proxypass, $expectstatus, $res, $req);
|
|
|
|
|
|
|
|
$PROGNAME = "check_squid_lw.pl";
|
|
|
|
|
|
|
|
sub print_help();
|
|
|
|
sub print_usage();
|
|
|
|
|
|
|
|
Getopt::Long::Configure('bundling');
|
|
|
|
GetOptions("V" => \$opt_V, "version" => \$opt_V,
|
|
|
|
"h" => \$opt_h, "help" => \$opt_h,
|
|
|
|
"t=s" => \$opt_t, "timeout=i" => \$opt_t,
|
|
|
|
"u=s" => \$opt_u, "url=s" => \$opt_u,
|
|
|
|
"n=s" => \$opt_n, "urluser=s" => \$opt_n,
|
|
|
|
"s=s" => \$opt_s, "urlpass=s" => \$opt_s,
|
|
|
|
"p=s" => \$opt_p, "proxy=s" => \$opt_p,
|
|
|
|
"l=s" => \$opt_l, "proxyport=s" => \$opt_l,
|
|
|
|
"o=s" => \$opt_o, "proxyuser=s" => \$opt_o,
|
|
|
|
"m=s" => \$opt_m, "proxypass=s" => \$opt_m,
|
|
|
|
"e=i" => \$opt_e, "status=i" => \$opt_e);
|
|
|
|
|
|
|
|
if ($opt_V) {
|
|
|
|
print_revision($PROGNAME,'$Revision: 0.1 $'); #'
|
|
|
|
exit $ERRORS{'OK'};
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($opt_h) {print_help(); exit $ERRORS{'OK'};}
|
|
|
|
|
|
|
|
($opt_u) || ($opt_u = shift) || usage("Use -h for more info\n");
|
|
|
|
$url = $opt_u;
|
|
|
|
|
|
|
|
($opt_p) || ($opt_p = shift) || usage("Use -h for more info\n");
|
|
|
|
$proxy = $opt_p;
|
|
|
|
|
|
|
|
($opt_l) || ($opt_l = shift) || usage("Use -h for more info\n");
|
|
|
|
$proxyport = $opt_l;
|
|
|
|
|
|
|
|
($opt_e) || ($opt_e = shift) || usage("Use -h for more info");
|
|
|
|
$expectstatus = $opt_e;
|
|
|
|
|
|
|
|
if(defined($opt_n)) { $urluser = $opt_n; }
|
|
|
|
|
|
|
|
if(defined($opt_s)) { $urlpass = $opt_s; }
|
|
|
|
|
|
|
|
if(defined($opt_o)) { $proxyuser = $opt_o; }
|
|
|
|
|
|
|
|
if(defined($opt_m)) { $proxypass = $opt_m; }
|
|
|
|
|
|
|
|
my $ua = new LWP::UserAgent;
|
|
|
|
my $h = HTTP::Headers->new();
|
|
|
|
|
|
|
|
if ($proxy)
|
|
|
|
{
|
|
|
|
$ua->proxy(['http', 'ftp'], "http://$proxy:$proxyport");
|
|
|
|
|
|
|
|
if ($proxyuser)
|
|
|
|
{
|
|
|
|
$h->proxy_authorization_basic($proxyuser,$proxypass);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($urluser)
|
|
|
|
{
|
|
|
|
$h->authorization_basic($urluser, $urlpass);
|
|
|
|
}
|
|
|
|
|
2010-03-18 13:00:58 +01:00
|
|
|
$t0 = [gettimeofday];
|
|
|
|
|
2010-03-18 11:46:48 +01:00
|
|
|
$req = HTTP::Request->new('GET', $url, $h);
|
|
|
|
|
|
|
|
$res = $ua->request($req);
|
|
|
|
|
2010-03-18 13:00:58 +01:00
|
|
|
$elapsed = tv_interval ( $t0 );
|
|
|
|
|
2010-03-18 11:46:48 +01:00
|
|
|
if ($res->status_line =~ /^$expectstatus/)
|
|
|
|
{
|
2010-03-18 13:00:58 +01:00
|
|
|
print "OK - Status: ".$res->status_line. " | 'response'=$elapsed\n";
|
2010-03-18 11:46:48 +01:00
|
|
|
exit $ERRORS{"OK"};
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
print "CRITICAL - Status: ".$res->status_line." (but expected $expectstatus...)\n";
|
|
|
|
exit $ERRORS{"CRITICAL"};
|
|
|
|
}
|
|
|
|
|
|
|
|
sub print_usage () {
|
|
|
|
print "Usage: $PROGNAME -u <internet site> -p <proxy> -l <port proxy> -e";
|
|
|
|
print "<return http code> \n";
|
|
|
|
}
|
|
|
|
|
|
|
|
sub print_help () {
|
|
|
|
print_revision($PROGNAME,'$Revision: 0.1 $');
|
|
|
|
print "Perl check squid proxy\n";
|
|
|
|
|
|
|
|
print_usage();
|
|
|
|
|
|
|
|
print "
|
|
|
|
-V, --version
|
|
|
|
Version this script
|
|
|
|
-h, --help
|
|
|
|
Help
|
|
|
|
-t, --timeout=INTEGER
|
|
|
|
default 15s
|
|
|
|
-u, --url=http://<site>
|
|
|
|
The URL to check on the internet (http://www.google.com)
|
|
|
|
-n, --urluser=username
|
|
|
|
Username if the web site required authentication
|
|
|
|
-s, --urlpass=password
|
|
|
|
Password if the web site required authentication
|
|
|
|
-p, --proxy=proxy
|
|
|
|
Server that squid runs on (proxy.mydomain)
|
|
|
|
-l, --proxyport=INTEGER
|
|
|
|
TCP port that Squid listens on (3128)
|
|
|
|
-o, --proxyuser=proxyuser
|
|
|
|
Username if the web site required authentication
|
|
|
|
-m, --proxypass=proxypass
|
|
|
|
Password if the web site required authentication
|
|
|
|
-e, --status=INTEGER
|
|
|
|
HTTP code that should be returned
|
|
|
|
|
|
|
|
";
|
|
|
|
|
|
|
|
support();
|
|
|
|
}
|