#!/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; 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; } 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"; print "graph_category webserver\n"; 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"; } } 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"; } } }