1
0
Fork 0
mirror of https://github.com/munin-monitoring/contrib.git synced 2025-07-22 02:51:03 +00:00

Improve the HTTP plugin by allowing configuring a proxy and friendly name per URL.

Note that the configuration file syntax has changed. You need one "url"
variable per URL now, numbered starting with 1, e.g. url1, url2, url3.
Each one can be configured by suffixing its variable, e.g. url1_proxy,
url2_proxy, etc.
This commit is contained in:
Chris Wilson 2012-11-01 08:52:06 +00:00
parent a9ce052bff
commit 8b1e467b7c

View file

@ -10,7 +10,12 @@
=head1 CONFIGURATION
[http_request_time]
env.url http://127.0.0.1/1 http://127.0.0.1/2 http://127.0.0.1/3
env.url http://127.0.0.1/1
env.url2 http://127.0.0.1/2
env.url3 http://www.example.com
env.url3_name some_munin_internal_name
env.url3_label Some random page on our website
env.url3_proxy http://firewall:3128
=head1 MAGIC MARKERS
@ -41,7 +46,6 @@ sub clean {
return $surl;
};
if (! eval "require LWP::UserAgent;")
{
$ret = "LWP::UserAgent not found";
@ -50,12 +54,19 @@ if (! eval "require LWP::UserAgent;")
}
}
my $URL = $ENV{'url'}?$ENV{'url'}:"http://127.0.0.1/";
my %URLS;
foreach $_ (split(/ /,$URL)){
$URLS{$_}={
url=>$_,
surl=>clean($_),
for (my $i = 1; $ENV{"url$i"}; $i++)
{
my $url = $ENV{"url$i"};
my $proxy = $ENV{"url${i}_proxy"};
my $name = $ENV{"url${i}_name"} || clean($url);
my $label = $ENV{"url${i}_label"} || $url;
$URLS{$name}={
url=>$url,
proxy=>$proxy,
label=>$label,
time=>'U'
};
}
@ -94,50 +105,67 @@ if ( defined $ARGV[0] and $ARGV[0] eq "config" )
print "graph_category other\n";
my @go;
foreach my $url (values %URLS) {
print "$$url{'surl'}.label $$url{'url'}\n";
print "$$url{'surl'}.info The response time of a single request\n";
print "$$url{'surl'}.min 0\n";
print "$$url{'surl'}.draw LINE1\n";
push(@go,$$url{'surl'});
foreach my $name (keys %URLS) {
my $url = $URLS{$name};
print "$name.label $$url{'label'}\n";
print "$name.info The response time of a single request\n";
print "$name.min 0\n";
print "$name.draw LINE1\n";
push(@go, $name);
}
# multigraphs
foreach my $url (values %URLS) {
print "\nmultigraph http_request_time.$$url{'surl'}\n";
foreach my $name (keys %URLS) {
my $url = $URLS{$name};
print "\nmultigraph http_request_time.$name\n";
print "graph_title $$url{'url'}\n";
print "graph_args --base 1000\n";
print "graph_vlabel response time in ms\n";
print "graph_category other\n";
print "$$url{'surl'}.label $$url{'url'}\n";
print "$$url{'surl'}.info The response time of a single request\n";
print "$$url{'surl'}.min 0\n";
print "$$url{'surl'}.draw LINE1\n";
print "$name.label $$url{'label'}\n";
print "$name.info The response time of a single request\n";
print "$name.min 0\n";
print "$name.draw LINE1\n";
}
exit 0;
}
my $ua = LWP::UserAgent->new(timeout => 15);
foreach my $name (keys %URLS) {
my $url = $URLS{$name};
foreach my $url (values %URLS) {
my $t1=[gettimeofday];
if ($url->{proxy}) {
$ua->proxy(['http', 'ftp'], $url->{proxy});
}
else {
$ua->proxy(['http', 'ftp'], undef);
}
# warm up
my $response = $ua->request(HTTP::Request->new('GET',$$url{'url'}));
# timed run
my $t1=[gettimeofday];
$response = $ua->request(HTTP::Request->new('GET',$$url{'url'}));
my $t2=[gettimeofday];
if ($response->is_success) {
$$url{'time'}=sprintf("%d",tv_interval($t1,$t2)*1000);
};
};
print("multigraph http_request_time\n");
foreach my $url (values %URLS) {
print("$$url{'surl'}.value $$url{'time'}\n");
}
foreach my $url (values %URLS) {
print("\nmultigraph http_request_time.$$url{'surl'}\n");
print("$$url{'surl'}.value $$url{'time'}\n");
foreach my $name (keys %URLS) {
my $url = $URLS{$name};
print("$name.value $$url{'time'}\n");
}
foreach my $name (keys %URLS) {
my $url = $URLS{$name};
print("\nmultigraph http_request_time.$name\n");
print("$name.value $$url{'time'}\n");
}
# vim:syntax=perl