- Repository
- Munin (2.0)
- Last change
- 2018-08-17
- Graph Categories
- Family
- auto
- Capabilities
- Language
- Perl
- Authors
squid_requests
Name
squid_requests - Plugin to monitor squid requests.
Configuration
Configuration variables:
squidhost - host (default "localhost")
squidport - port (default "3128")
squiduser - username (default "")
squidpasswd - password (default "")
Author
Copyright (C) 2004 Jimmy Olsen, Audun Ytterdal, Tore Anderson
License
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 dated June, 1991.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Magic Markers
#%# family=auto
#%# capabilities=autoconf
#!@@PERL@@ -w
# -*- perl -*-
=head1 NAME
squid_requests - Plugin to monitor squid requests.
=head1 CONFIGURATION
Configuration variables:
squidhost - host (default "localhost")
squidport - port (default "3128")
squiduser - username (default "")
squidpasswd - password (default "")
=head1 AUTHOR
Copyright (C) 2004 Jimmy Olsen, Audun Ytterdal, Tore Anderson
=head1 LICENSE
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; version 2 dated June,
1991.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
=head1 MAGIC MARKERS
#%# family=auto
#%# capabilities=autoconf
=cut
my $ret = undef;
if (! eval "require IO::Socket;")
{
$ret = "IO::Socket not found";
}
if (! eval "require MIME::Base64;")
{
$ret = "MIME::Base64 not found";
}
$squid_host = $ENV{squidhost} || "localhost";
$squid_port = $ENV{squidport} || 3128;
$user = $ENV{squiduser} || "";
$passwd = $ENV{squidpasswd} || "";
$target = "client_http\.(requests|hits|errors)";
if($ARGV[0] and $ARGV[0] eq "autoconf") {
&autoconf($squid_host, $squid_port, $user, $passwd);
}
sub autoconf {
my ($host, $port, $user, $passwd) = @_;
if ($ret)
{
print "no ($ret)\n";
exit 0;
}
my $cachemgr = IO::Socket::INET->new(PeerAddr => $host,
PeerPort => $port,
Proto => 'tcp',
Timeout => 5);
if (!$cachemgr)
{
print "no (could not connect: $!)\n";
exit 0;
}
my $request = "GET cache_object://$host/counters HTTP/1.0\r\n" .
"Accept: */*\r\n" .
&make_auth_header($user, $passwd) .
"\r\n";
$cachemgr->syswrite($request, length($request));
my @lines = $cachemgr->getlines();
print "yes\n";
exit 0;
}
sub make_auth_header {
my ($user, $passwd) = @_;
if(!defined $passwd || $passwd eq "") {
return "";
} else {
my $auth = MIME::Base64::encode_base64(($user ? $user : "") . ":$passwd", "");
return "Authorization: Basic $auth\r\n" .
"Proxy-Authorization: Basic $auth\r\n";
}
}
sub query_squid {
my ($host, $port, $user, $passwd) = @_;
my $cachemgr = IO::Socket::INET->new(PeerAddr => $host,
PeerPort => $port,
Proto => 'tcp') or die($!);
my $request = "GET cache_object://$host/counters HTTP/1.0\r\n" .
"Accept: */*\r\n" .
&make_auth_header($user, $passwd) .
"\r\n";
$cachemgr->syswrite($request, length($request));
my @lines = $cachemgr->getlines();
for(my $i = 0; $i <= $#lines; $i++) {
if($lines[$i] =~ /$target = (\d+)/) {
print "$1.value $2\n";
}
}
}
if($ARGV[0] and $ARGV[0] eq "config") {
print "graph_title Squid client requests\n";
print "graph_args --base 1000 -l 0\n";
print "graph_vlabel requests / \${graph_period}\n";
print "graph_order hits errors requests\n";
print "graph_total total\n";
print "graph_scale no\n";
print "graph_category squid\n";
print "hits.label hits\n";
print "hits.type DERIVE\n";
print "hits.draw AREA\n";
print "hits.min 0\n";
print "hits.max 500000\n";
print "errors.label errors\n";
print "errors.type DERIVE\n";
print "errors.draw STACK\n";
print "errors.min 0\n";
print "errors.max 500000\n";
print "requests.label misses\n";
print "requests.cdef requests,hits,-,errors,-\n";
print "requests.type DERIVE\n";
print "requests.draw STACK\n";
print "requests.min 0\n";
print "requests.max 500000\n";
exit 0;
}
&query_squid($squid_host, $squid_port, $user, $passwd, $target);
# vim:syntax=perl