From 12ce0ac8b9ac2deea8fd499566b4247c0edfc28a Mon Sep 17 00:00:00 2001 From: Stefan Fritsch Date: Sat, 28 Apr 2012 23:08:09 +0000 Subject: [PATCH] Merge r1325218,1325227,1325250,1325265,1325275, add CHANGES entry: log_server_status: Bring Perl style forward to the present, use standard modules, update for new format of server-status output. Submitted by: rbowen, Dave Brondsema, igalic, humbedooh Reviewed by: rbowen, jim, sf git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1331851 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 4 ++ STATUS | 7 --- support/log_server_status.in | 88 ++++++++++++++++++------------------ 3 files changed, 47 insertions(+), 52 deletions(-) diff --git a/CHANGES b/CHANGES index a93194e183..87daa45b62 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,10 @@ Changes with Apache 2.4.3 + *) log_server_status: Bring Perl style forward to the present, use + standard modules, update for new format of server-status output. + PR 45424. [Richard Bowen, Dave Brondsema, and others] + *) mod_sed, mod_log_debug: Symbol namespace cleanups. [Joe Orton] *) core: Prevent "httpd -k restart" from killing server in presence of diff --git a/STATUS b/STATUS index 00358b3d26..703e5762ce 100644 --- a/STATUS +++ b/STATUS @@ -88,13 +88,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * log_server_status: Bring Perl style forward to the present, use - standard modules, update for new format of server-status output. - Trunk patch: http://people.apache.org/~rbowen/log_server_status.trunk.patch - (Revisions r1325218 through r1325275) - 2.4 patch: Trunk patch works - +1: rbowen, jim, sf - PATCHES PROPOSED TO BACKPORT FROM TRUNK: [ New proposals should be added at the end of the list ] diff --git a/support/log_server_status.in b/support/log_server_status.in index b788ab1913..ba08d7e571 100644 --- a/support/log_server_status.in +++ b/support/log_server_status.in @@ -25,54 +25,52 @@ # it to a file. Make sure the directory $wherelog is writable by the # user who runs this script. # -require 'sys/socket.ph'; +use IO::Socket; +use strict; +use warnings; -$wherelog = "/var/log/graph/"; # Logs will be like "/var/log/graph/19960312" -$server = "localhost"; # Name of server, could be "www.foo.com" -$port = "80"; # Port on server -$request = "/status/?auto"; # Request to send +my $wherelog = "@exp_logfiledir@/"; # Logs will be like "@exp_logfiledir@/19960312" +my $server = "localhost"; # Name of server, could be "www.foo.com" +my $port = "@PORT@"; # Port on server +my $request = "/server-status/?auto"; # Request to send -sub tcp_connect -{ - local($host,$port) =@_; - $sockaddr='S n a4 x8'; - chop($hostname=`hostname`); - $port=(getservbyname($port, 'tcp'))[2] unless $port =~ /^\d+$/; - $me=pack($sockaddr,&AF_INET,0,(gethostbyname($hostname))[4]); - $them=pack($sockaddr,&AF_INET,$port,(gethostbyname($host))[4]); - socket(S,&PF_INET,&SOCK_STREAM,(getprotobyname('tcp'))[2]) || - die "socket: $!"; - bind(S,$me) || return "bind: $!"; - connect(S,$them) || return "connect: $!"; - select(S); - $| = 1; - select(stdout); - return ""; -} +my @ltime = localtime(time); -### Main +my $day = + $ltime[5] + 1900 + . sprintf( "%02d", $ltime[4] + 1 ) + . sprintf( "%02d", $ltime[3] ); -{ - $year=`date +%y`; - chomp($year); - $year += ($year < 70) ? 2000 : 1900; - $date = $year . `date +%m%d:%H%M%S`; - chomp($date); - ($day,$time)=split(/:/,$date); - $res=&tcp_connect($server,$port); - open(OUT,">>$wherelog$day"); - if ($res) { - print OUT "$time:-1:-1:-1:-1:$res\n"; - exit 1; - } - print S "GET $request\n"; - while () { - $requests=$1 if ( m|^BusyServers:\ (\S+)|); - $idle=$1 if ( m|^IdleServers:\ (\S+)|); - $number=$1 if ( m|sses:\ (\S+)|); - $cpu=$1 if (m|^CPULoad:\ (\S+)|); - } - print OUT "$time:$requests:$idle:$number:$cpu\n"; -} +my $time = + sprintf( "%02d", $ltime[2] ) + . sprintf( "%02d", $ltime[1] ) + . sprintf( "%02d", $ltime[0] ); + +open(OUT,">>$wherelog$day"); +my $socket = new IO::Socket::INET( + PeerAddr => $server, + PeerPort => $port, + Proto => "tcp", + Type => SOCK_STREAM + ) + or do { + print OUT "$time:-1:-1:-1:-1:$@\n"; + close OUT; + die "Couldn't connect to $server:$port : $@\n"; + }; +$| = 1; + +print $socket + "GET $request HTTP/1.1\r\nHost: $server\r\nConnection: close\r\n\r\n\r\n"; + +my ( $requests, $idle, $number, $cpu ); +while (<$socket>) { + $requests = $1 if (m|^BusyWorkers:\ (\S+)|); + $idle = $1 if (m|^IdleWorkers:\ (\S+)|); + $number = $1 if (m|sses:\ (\S+)|); + $cpu = $1 if (m|^CPULoad:\ (\S+)|); +} +print OUT "$time:$requests:$idle:$number:$cpu\n"; +close OUT; -- 2.50.1