2006-10-12 14:35:48 +02:00
|
|
|
#!/usr/bin/perl
|
|
|
|
#
|
|
|
|
# Parameters supported:
|
|
|
|
#
|
|
|
|
# config
|
|
|
|
# autoconf
|
|
|
|
#
|
|
|
|
# Configurable variables
|
|
|
|
#
|
|
|
|
# url - Override default status-url
|
|
|
|
#
|
|
|
|
# Magic markers:
|
|
|
|
#%# family=auto
|
|
|
|
#%# capabilities=autoconf
|
|
|
|
|
|
|
|
my $ret = undef;
|
|
|
|
if (!eval "require LWP::UserAgent;") {
|
|
|
|
$ret = "LWP::UserAgent not found";
|
|
|
|
}
|
|
|
|
|
|
|
|
my $URL = exists $ENV{'url'} ? $ENV{'url'} : "http://127.0.0.1:%d/server-status?auto";
|
|
|
|
my @PORTS = exists $ENV{'ports'} ? split(' ', $ENV{'ports'}) : (80);
|
|
|
|
my %chars = (
|
|
|
|
# '\_' => 'Waiting',
|
|
|
|
# 'S' => 'Starting up',
|
|
|
|
'R' => 'Reading request',
|
|
|
|
'W' => 'Sending reply',
|
|
|
|
'K' => 'Keepalive',
|
|
|
|
'D' => 'DNS lookup',
|
|
|
|
'C' => 'Closing',
|
|
|
|
# 'L' => 'Logging',
|
|
|
|
# 'G' => 'Gracefully finishing',
|
|
|
|
# 'I' => 'Idle cleanup',
|
|
|
|
# '\.' => 'Open slot',
|
|
|
|
);
|
|
|
|
|
|
|
|
# "_" Waiting for Connection, "S" Starting up, "R" Reading Request,
|
|
|
|
# "W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
|
|
|
|
# "C" Closing connection, "L" Logging, "G" Gracefully finishing,
|
|
|
|
# "I" Idle cleanup of worker, "." Open slot with no current process
|
|
|
|
|
|
|
|
if (exists $ARGV[0] and $ARGV[0] eq "autoconf") {
|
|
|
|
if ($ret) {
|
|
|
|
print "no ($ret)\n";
|
|
|
|
exit 1;
|
|
|
|
}
|
|
|
|
my $ua = LWP::UserAgent->new(timeout => 30);
|
|
|
|
my @badports;
|
2018-08-02 02:03:42 +02:00
|
|
|
|
2006-10-12 14:35:48 +02:00
|
|
|
foreach my $port (@PORTS) {
|
|
|
|
my $url = sprintf $URL, $port;
|
|
|
|
my $response = $ua->request(HTTP::Request->new('GET',$url));
|
|
|
|
push @badports, $port unless $response->is_success and $response->content =~ /Scoreboard/im;
|
|
|
|
}
|
2018-08-02 02:03:42 +02:00
|
|
|
|
2006-10-12 14:35:48 +02:00
|
|
|
if (@badports) {
|
|
|
|
print "no (no apache server-status on ports @badports)\n";
|
|
|
|
exit 1;
|
|
|
|
} else {
|
|
|
|
print "yes\n";
|
|
|
|
exit 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (exists $ARGV[0] and $ARGV[0] eq "config") {
|
|
|
|
print "graph_title Apache activity\n";
|
|
|
|
print "graph_args --base 1000 -l 0\n";
|
2017-02-21 22:15:07 +01:00
|
|
|
print "graph_category webserver\n";
|
2006-10-12 14:35:48 +02:00
|
|
|
print "graph_vlabel processes\n";
|
|
|
|
foreach my $port (@PORTS) {
|
|
|
|
while (my ($char, $val) = each (%chars)) {
|
|
|
|
$char =~ s/\\\./dot/;
|
|
|
|
$char =~ s/\\\_/underline/;
|
|
|
|
print "activity_${port}_${char}.label ";
|
|
|
|
print $val, "\n";
|
|
|
|
print "activity_${port}_${char}.type GAUGE\n";
|
|
|
|
}
|
2018-08-02 02:03:42 +02:00
|
|
|
}
|
2006-10-12 14:35:48 +02:00
|
|
|
exit 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach my $port (@PORTS) {
|
|
|
|
my $ua = LWP::UserAgent->new (timeout => 30);
|
|
|
|
my $url = sprintf $URL, $port;
|
|
|
|
my $response = $ua->request (HTTP::Request->new('GET',$url));
|
|
|
|
if ($response->content =~ /^Scoreboard\:\s?(.*)$/sm) {
|
|
|
|
my $string = $1;
|
|
|
|
chomp $string;
|
|
|
|
my @act = split (//, $string);
|
|
|
|
foreach my $char (keys (%chars)) {
|
|
|
|
my $num = scalar (grep (/$char/, @act));
|
|
|
|
$char =~ s/\\\./dot/;
|
|
|
|
$char =~ s/\\\_/underline/;
|
|
|
|
print "activity_${port}_${char}.value $num\n";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|