100 lines
2.6 KiB
Perl
Executable File
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 apache\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;
|
|
|
|
|