|
Server : Apache/2.2.2 (Fedora) System : Linux App1.pathumtani.go.th 2.6.20-1.2320.fc5smp #1 SMP Tue Jun 12 19:40:16 EDT 2007 i686 User : apache ( 48) PHP Version : 5.2.9 Disable Function : NONE Directory : /usr/local/src/munin-1.2.6/node/node.d/ |
Upload File : |
#!@@PERL@@ -w
#
# Copyright (C) 2004 Jimmy Olsen, Audun Ytterdal, Tore Anderson
#
# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
#
# Cache traffic
#
# Configuration variables:
#
# squidhost - host (default "localhost")
# squidport - port (default "3128")
# squiduser - username (default "")
# squidpasswd - password (default "")
#
# Parameters:
#
# config (required)
# autoconf (optional - only used by munin-config)
#
# $Log$
# Revision 1.8 2004/12/10 18:51:43 jimmyo
# linux/apt* has been forced to LANG=C, to get predictable output.
#
# Revision 1.7 2004/12/10 10:47:47 jimmyo
# Change name from ${scale} to ${graph_period}, to be more consistent.
#
# Revision 1.6 2004/12/09 22:12:55 jimmyo
# Added "graph_period" option, to make "graph_sums" usable.
#
# Revision 1.5 2004/11/16 20:18:09 jimmyo
# License cleanups.
#
# Revision 1.4 2004/09/26 22:03:52 jimmyo
# Changd COUNTER -> DERIVE for some plugins. Set min/max values.
#
# Revision 1.3 2004/05/20 13:57:12 jimmyo
# Set categories to some of the plugins.
#
# Revision 1.2 2004/03/14 11:33:13 auduny
# Added squidpatch from Jacques Caruso
#
# Revision 1.1 2004/01/02 18:50:00 jimmyo
# Renamed occurrances of lrrd -> munin
#
# Revision 1.1.1.1 2004/01/02 15:18:07 jimmyo
# Import of LRRD CVS tree after renaming to Munin
#
# Revision 1.7 2003/12/18 17:26:26 jimmyo
# Remove use of "use"
#
# Revision 1.6 2003/11/10 18:41:33 jimmyo
# Removed Data::Dumper dependency.
#
# Revision 1.5 2003/11/07 21:36:25 jimmyo
# Fixed typos and mental typos
#
# Revision 1.4 2003/11/07 17:43:16 jimmyo
# Cleanups and log entries
#
#
#
#%# family=auto
#%# capabilities=autoconf
# $Id: squid_traffic.in 860 2005-03-29 20:32:59Z ilmari $
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\.(kbytes_in|kbytes_out|hit_kbytes_out) =";
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 1;
}
my $cachemgr = IO::Socket::INET->new(PeerAddr => $host,
PeerPort => $port,
Proto => 'tcp');
if (!$cachemgr)
{
print "no (could not connect: $!)\n";
exit 1;
}
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\s+(\d+)/) {
print "$1.value $2\n";
}
}
}
if($ARGV[0] and $ARGV[0] eq "config") {
print "graph_title Squid traffic status\n";
print "graph_args --base 1000\n";
print "graph_vlabel bits per \${graph_period}\n";
print "graph_order kbytes_in kbytes_out hit_kbytes_out\n";
print "graph_category squid\n";
print "kbytes_in.label received\n";
print "kbytes_in.cdef kbytes_in,8096,*\n";
print "kbytes_in.type DERIVE\n";
print "kbytes_in.min 0\n";
print "kbytes_in.max 500000\n";
print "kbytes_out.label sent\n";
print "kbytes_out.cdef kbytes_out,8096,*\n";
print "kbytes_out.type DERIVE\n";
print "kbytes_out.min 0\n";
print "kbytes_out.max 500000\n";
print "hit_kbytes_out.label from cache\n";
print "hit_kbytes_out.type DERIVE\n";
print "hit_kbytes_out.min 0\n";
print "hit_kbytes_out.max 500000\n";
exit 0;
}
&query_squid($squid_host, $squid_port, $user, $passwd, $target);
# vim:syntax=perl