munin-contrib/plugins/http/multi_http_responsetime

117 lines
2.8 KiB
Perl
Executable File

#! /usr/bin/perl
# This plugin based on http_responestime designed by Anders Nordby
#
# It is written to control the quality of an internet conneting by
# downloading a favicon.ico file from a lot - unlimited - count of
# domains.
#
# Don't forget zu fill in the following lines into the munin-node
# - ormally at /etc/muni/plugin-conf.d/ - an than restart munin
#
# [multi_http_responsetime]
# user root
# Jo Hartmann (Version 08-0912)
#
# Now working under munin 1.4.5
# Jo Hartmann (Version 11-0426)
use Sys::Hostname;
use Time::HiRes qw( time );
use IO::Socket;
# ----- config -----
push(@url_array, "http://www.google.de");
push(@url_array, "http://www.t-online.de");
push(@url_array, "http://www.telekom.de");
push(@url_array, "http://www.ebay.de");
push(@url_array, "http://www.tus-vahrenwald.de");
$host = "localhost";
$comment = "HTTP-Ladezeiten von Web-Seiten";
#$host = hostname;
# ----- config -----
sub geturl {
my $data;
my $sock = new IO::Socket::INET (
PeerAddr => $host,
PeerPort => 80,
Proto => 'tcp'
);
return(0) unless ($sock);
print $sock "GET $baseurl HTTP/1.1\nHost: $vhost\nConnection: close\n\n";
while (<$sock>) {
$data .= $_;
}
close($sock);
# Debug
#my @response = split(/\n/, $data);
#my $httpresponse = $response[0];
#chomp($httpresponse);
#$httpresponse =~ s@\r@@g;
#print "HTTP response code: $httpresponse\n";
}
sub cktime {
for ($i=0; $i <= $max_index; ++$i) {
$url = $url_array[$i], "/favicon.ico";
$vhost = $url;
$vhost =~ s@^\w+://(.+?)/.*@\1@;
$proto = $url;
$proto =~ s@^(\w+)://.*@\1@;
$baseurl = $url;
$baseurl =~ s@^\w+://.+?(/)@\1@;
$tick1 = time();
geturl;
$tick2 = time();
$tspent = $tick2-$tick1;
$msecs = ($tspent * 1000);
printf "timespent$i.value %.3f\n", $msecs;
}
}
# Count of urls
$max_index = $#url_array;
if ($ARGV[0] && $ARGV[0] eq "autoconf") {
print "yes\n";
} elsif ($ARGV[0] && $ARGV[0] eq "config") {
if ($comment) {
print "graph_title $comment\n";
} else {
print "graph_title HTTP response time \n";
}
print "graph_scale no\n";
print "graph_vlabel ms\n";
print "graph_category webserver\n";
print "graph_info This graph shows the response time in milliseconds, to load a web page\n";
for ($i=0; $i <= $max_index; ++$i) {
$vhost = $url_array[$i];
$proto = $url_array[$i];
$vhost =~ s@^\w+://(.+?)/.*@\1@;
$proto =~ s@^(\w+)://.*@\1@;
# If url_array[] is a domain, vhost will be contain the the strinf "http://"
if($vhost =~ /http/) {
print "timespent$i.label $vhost\n";
} else {
print "timespent$i.label $proto://$vhost\n";
}
print "timespent$i.info Ladezeit von $url_array[$i]/favicon.ico\n";
print "timespent$i.type GAUGE\n";
print "timespent$i.graph yes\n";
}
} else {
cktime;
}