Révision 8b1e467b
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.
| plugins/http/http_request_time | ||
|---|---|---|
| 10 | 10 |
=head1 CONFIGURATION |
| 11 | 11 |
|
| 12 | 12 |
[http_request_time] |
| 13 |
env.url http://127.0.0.1/1 http://127.0.0.1/2 http://127.0.0.1/3 |
|
| 13 |
env.url http://127.0.0.1/1 |
|
| 14 |
env.url2 http://127.0.0.1/2 |
|
| 15 |
env.url3 http://www.example.com |
|
| 16 |
env.url3_name some_munin_internal_name |
|
| 17 |
env.url3_label Some random page on our website |
|
| 18 |
env.url3_proxy http://firewall:3128 |
|
| 14 | 19 |
|
| 15 | 20 |
=head1 MAGIC MARKERS |
| 16 | 21 |
|
| ... | ... | |
| 41 | 46 |
return $surl; |
| 42 | 47 |
}; |
| 43 | 48 |
|
| 44 |
|
|
| 45 | 49 |
if (! eval "require LWP::UserAgent;") |
| 46 | 50 |
{
|
| 47 | 51 |
$ret = "LWP::UserAgent not found"; |
| ... | ... | |
| 50 | 54 |
} |
| 51 | 55 |
} |
| 52 | 56 |
|
| 53 |
my $URL = $ENV{'url'}?$ENV{'url'}:"http://127.0.0.1/";
|
|
| 54 | 57 |
my %URLS; |
| 55 |
foreach $_ (split(/ /,$URL)){
|
|
| 56 |
$URLS{$_}={
|
|
| 57 |
url=>$_, |
|
| 58 |
surl=>clean($_), |
|
| 58 |
|
|
| 59 |
for (my $i = 1; $ENV{"url$i"}; $i++)
|
|
| 60 |
{
|
|
| 61 |
my $url = $ENV{"url$i"};
|
|
| 62 |
my $proxy = $ENV{"url${i}_proxy"};
|
|
| 63 |
my $name = $ENV{"url${i}_name"} || clean($url);
|
|
| 64 |
my $label = $ENV{"url${i}_label"} || $url;
|
|
| 65 |
|
|
| 66 |
$URLS{$name}={
|
|
| 67 |
url=>$url, |
|
| 68 |
proxy=>$proxy, |
|
| 69 |
label=>$label, |
|
| 59 | 70 |
time=>'U' |
| 60 | 71 |
}; |
| 61 | 72 |
} |
| ... | ... | |
| 94 | 105 |
print "graph_category other\n"; |
| 95 | 106 |
|
| 96 | 107 |
my @go; |
| 97 |
foreach my $url (values %URLS) {
|
|
| 98 |
print "$$url{'surl'}.label $$url{'url'}\n";
|
|
| 99 |
print "$$url{'surl'}.info The response time of a single request\n";
|
|
| 100 |
print "$$url{'surl'}.min 0\n";
|
|
| 101 |
print "$$url{'surl'}.draw LINE1\n";
|
|
| 102 |
push(@go,$$url{'surl'});
|
|
| 108 |
foreach my $name (keys %URLS) {
|
|
| 109 |
my $url = $URLS{$name};
|
|
| 110 |
print "$name.label $$url{'label'}\n";
|
|
| 111 |
print "$name.info The response time of a single request\n"; |
|
| 112 |
print "$name.min 0\n"; |
|
| 113 |
print "$name.draw LINE1\n"; |
|
| 114 |
push(@go, $name); |
|
| 103 | 115 |
} |
| 104 | 116 |
|
| 105 | 117 |
# multigraphs |
| 106 | 118 |
|
| 107 |
foreach my $url (values %URLS) {
|
|
| 108 |
print "\nmultigraph http_request_time.$$url{'surl'}\n";
|
|
| 119 |
foreach my $name (keys %URLS) {
|
|
| 120 |
my $url = $URLS{$name};
|
|
| 121 |
print "\nmultigraph http_request_time.$name\n"; |
|
| 109 | 122 |
print "graph_title $$url{'url'}\n";
|
| 110 | 123 |
print "graph_args --base 1000\n"; |
| 111 | 124 |
print "graph_vlabel response time in ms\n"; |
| 112 | 125 |
print "graph_category other\n"; |
| 113 |
print "$$url{'surl'}.label $$url{'url'}\n";
|
|
| 114 |
print "$$url{'surl'}.info The response time of a single request\n";
|
|
| 115 |
print "$$url{'surl'}.min 0\n";
|
|
| 116 |
print "$$url{'surl'}.draw LINE1\n";
|
|
| 126 |
print "$name.label $$url{'label'}\n";
|
|
| 127 |
print "$name.info The response time of a single request\n";
|
|
| 128 |
print "$name.min 0\n";
|
|
| 129 |
print "$name.draw LINE1\n";
|
|
| 117 | 130 |
} |
| 118 | 131 |
|
| 119 | 132 |
exit 0; |
| 120 | 133 |
} |
| 121 | 134 |
|
| 122 | 135 |
my $ua = LWP::UserAgent->new(timeout => 15); |
| 136 |
foreach my $name (keys %URLS) {
|
|
| 137 |
my $url = $URLS{$name};
|
|
| 123 | 138 |
|
| 124 |
foreach my $url (values %URLS) {
|
|
| 125 |
my $t1=[gettimeofday]; |
|
| 139 |
if ($url->{proxy}) {
|
|
| 140 |
$ua->proxy(['http', 'ftp'], $url->{proxy});
|
|
| 141 |
} |
|
| 142 |
else {
|
|
| 143 |
$ua->proxy(['http', 'ftp'], undef); |
|
| 144 |
} |
|
| 145 |
|
|
| 146 |
# warm up |
|
| 126 | 147 |
my $response = $ua->request(HTTP::Request->new('GET',$$url{'url'}));
|
| 148 |
|
|
| 149 |
# timed run |
|
| 150 |
my $t1=[gettimeofday]; |
|
| 151 |
$response = $ua->request(HTTP::Request->new('GET',$$url{'url'}));
|
|
| 127 | 152 |
my $t2=[gettimeofday]; |
| 153 |
|
|
| 128 | 154 |
if ($response->is_success) {
|
| 129 | 155 |
$$url{'time'}=sprintf("%d",tv_interval($t1,$t2)*1000);
|
| 130 | 156 |
}; |
| 131 | 157 |
}; |
| 132 | 158 |
|
| 133 | 159 |
print("multigraph http_request_time\n");
|
| 134 |
foreach my $url (values %URLS) {
|
|
| 135 |
print("$$url{'surl'}.value $$url{'time'}\n");
|
|
| 136 |
} |
|
| 137 |
foreach my $url (values %URLS) {
|
|
| 138 |
print("\nmultigraph http_request_time.$$url{'surl'}\n");
|
|
| 139 |
print("$$url{'surl'}.value $$url{'time'}\n");
|
|
| 160 |
foreach my $name (keys %URLS) {
|
|
| 161 |
my $url = $URLS{$name};
|
|
| 162 |
print("$name.value $$url{'time'}\n");
|
|
| 140 | 163 |
} |
| 141 | 164 |
|
| 165 |
foreach my $name (keys %URLS) {
|
|
| 166 |
my $url = $URLS{$name};
|
|
| 167 |
print("\nmultigraph http_request_time.$name\n");
|
|
| 168 |
print("$name.value $$url{'time'}\n");
|
|
| 169 |
} |
|
| 142 | 170 |
|
| 143 | 171 |
# vim:syntax=perl |
Formats disponibles : Unified diff