diff --git a/plugins/http/http_request_time b/plugins/http/http_request_time index 509db0d8..a5852a16 100755 --- a/plugins/http/http_request_time +++ b/plugins/http/http_request_time @@ -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