munin-contrib/plugins/http/http-response-times

100 lines
2.6 KiB
Perl
Executable File

#!/usr/bin/perl
use strict;
# HTTP response times for either entire page views
# or just the index, depending on configuration.
# Full or index resource pulling is determined by the suffix of the
# script name. ie. http_response_full or http_response_index
#
# Parameters:
#
# config
#
# Configuration variables:
#
# domain - domain of the server to measure (default takelessons.com)
# url[1..n] - url to measure against
my $domain = $ENV{'domain'} || 'http://takelessons.com';
# determine the intended "action" of the script
# this is determined by the end of the script name
# http_response_full or http_response_index
my ($action) = ($0 =~ m/http_response_(\S+)$/);
$ENV{'action'} = $action;
if (! $ENV{'action'} =~ m/(full|index)/) {
die "invalid action (determined by script suffix)";
}
my @urls;
#debug mode
#build urls manually
if ($ARGV[0] eq "debug") {
push(@urls, ( "/",
"/san-diego-ca-92106/piano-lessons",
"/category/browse",
"/cities-music-lessons",
"/new-york-music-lessons",
"/category/singing-lessons"));
}
#get the urls - build from configuration variables
my $i = 1;
while (defined ($ENV{"url$i"})) {
push(@urls, $ENV{"url$i"});
$i++;
}
if (! @urls) {
die "No urls defined\n";
}
#output configuration and exit - required by Munin
if (exists $ARGV[0] and $ARGV[0] eq "config") {
print "graph_title $domain Site Response Times - $ENV{'action'}\n";
print "graph_category webserver\n";
print "graph_vlabel request time (seconds)\n";
print "graph_info Response times for public areas of $domain.\n";
foreach my $url (@urls) {
my $label = $url;
#fix up our label name to be a valid variable name
$label =~ s@[^A-Za-z0-9_]@_@g;
print "$label.label $url\n";
print "$label.type GAUGE\n";
}
exit 0;
}
#function to make the request and get the response time
sub req_time {
my $url = shift;
my $time;
my $outdir = '/tmp/munin/' . int(rand(32000));
system("mkdir -p $outdir");
if ($ENV{'action'} eq "full") {
$time = `/usr/bin/time -f "%e" wget -pq -P $outdir --header "Accept-Encoding: gzip,deflate" "$url" 2>&1`;
} elsif ($ENV{'action'} eq "index") {
$time = `/usr/bin/time -f "%e" wget -q -P $outdir --header "Accept-Encoding: gzip,deflate" "$url" 2>&1`;
}
system("rm -rf $outdir");
return $time;
}
#loop over every url and output the responses
foreach my $url (@urls) {
my $label = $url;
#fix up our label name to be a valid name
$label =~ s@[^A-Za-z0-9_]@_@g;
print "$label.value " . req_time($domain.$url);
}
exit 0;