You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Andrew Wilson <aw...@hyperreal.com> on 1995/12/19 21:28:00 UTC
httpd_monitor problem (fwd)
ack sent. How does this compare with the new httpd monitor. Jim?
Forwarded message:
> From thomas@cldx.com Tue Dec 19 10:00:18 1995
> Date: Tue, 19 Dec 1995 13:01:02 -0500
> Message-Id: <19...@idx.cldx.com>
> To: apache-bugs@apache.org
> X-URL: mailto:apache-bugs@apache.org
> X-Mailer: Lynx, Version 2-4
> X-Personal_name: Thomas Bullinger
> From: rootmail@btoy1.rochester.ny.us
> Subject: httpd_monitor problem
>
> Hello!
>
> The perl script "httpd_monitor" does not work with Linux (1.2.13 ELF, Perl
> 5).
>
> Here is a changed and working version:
>
> #!/usr/bin/perl
>
> # ====================================================================
> # Copyright (c) 1995 The Apache Group. All rights reserved.
> #
> # Redistribution and use in source and binary forms, with or without
> # modification, are permitted provided that the following conditions
> # are met:
> #
> # 1. Redistributions of source code must retain the above copyright
> # notice, this list of conditions and the following disclaimer.
> #
> # 2. Redistributions in binary form must reproduce the above copyright
> # notice, this list of conditions and the following disclaimer in
> # the documentation and/or other materials provided with the
> # distribution.
> #
> # 3. All advertising materials mentioning features or use of this
> # software must display the following acknowledgment:
> # "This product includes software developed by the Apache Group
> # for use in the Apache HTTP server project (http://www.apache.org/)."
> #
> # 4. The names "Apache Server" and "Apache Group" must not be used to
> # endorse or promote products derived from this software without
> # prior written permission.
> #
> # 5. Redistributions of any form whatsoever must retain the following
> # acknowledgment:
> # "This product includes software developed by the Apache Group
> # for use in the Apache HTTP server project (http://www.apache.org/)."
> #
> # THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
> # EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR
> # IT'S CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
> # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
> # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
> # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
> # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
> # OF THE POSSIBILITY OF SUCH DAMAGE.
> # ====================================================================
> #
> # This software consists of voluntary contributions made by many
> # individuals on behalf of the Apache Group and was originally based
> # on public domain software written at the National Center for
> # Supercomputing Applications, University of Illinois, Urbana-Champaign.
> # For more information on the Apache Group and the Apache HTTP server
> # project, please see <http://www.apache.org/>.
>
> # Changes by Thomas Bullinger (consult@btoy1.rochester.ny.us):
> # 19-Dec-1995 TB Modified read loop to read one entry at a time
> # then unpack it's components
> # Some minor housekeeping
>
> # simple script to monitor the child Apache processes
> # Usage:
> # httpd_monitor N
> # Will give you an update ever N seconds
> # If you choose 0, it might chew up lots of CPU time.
> #
> # Output explanation..
> #
> # s = sleeping but "ready to go" child
> # R = active child
> # _ = dead child (no longer needed)
>
>
> $PID_FILE = "/var/run/httpd.pid";
> $SCB_FILE = "/tmp/htstatus";
> $MAX_PROC = 40; # we never have (or are interested in) more than 40 children
> $ENTRY_LEN = 8; # On Linux each entry has 8 bytes - ADAPT!
>
> #########################################################################
> select STDOUT; $| = 1;
>
> $delay = @ARGV[0];
>
> if ($delay =~ /\-h/i) {
> print STDERR "usage:\n$0 [i]\n i = interval in seconds (defaults to 1)\n";
> exit(0);
> }
>
> $delay = 1 unless $delay =~ /^[0-9]+$/;
>
> open (P, "$PID_FILE") || die "Unable to open $PID_FILE";
> $PID = <P>;
> $ext = sprintf("a%05d", $PID);
> close(P);
>
> open (SB, "$SCB_FILE.$ext") || die "Unable to open scoreboard file $SCB_FILE.$ext";
>
> $last_len = 0;
> while (1) {
>
> if ( ($last_mod = (stat("$SCB_FILE.$ext"))[9]) != $before) {
> open (SB, "$SCB_FILE.$ext") || die "Unable to open scoreboard file $SCB_FILE.$ext";
>
> $len = 0; $pad =""; $running = 0; $dead = 0; $total=0;
> for ( $child=1; $child<=$MAX_PROC; $child++) {
>
> read (SB, $entry, $ENTRY_LEN); # Read one entry
> ($p, $status, $junk) = unpack("LCC3",$entry);
> $c = sprintf("%X", $child);
>
> if ($p != 0 && $p != $PID) {
> $total++;
> if ($status == 1) {
> $c = "s";
> } else {
> $c = "R";
> ++$running;
> }
> $printed .= "$pad$c";
>
> $pad = "";
> $dead = 0;
> } else {
> $dead++;
> $pad = "_"x$dead;
> }
> } # end for $child
>
> $printed .= " ($running Run/$total Tot)";
> $len = length($printed);
>
> if ($last_len > $len) {
> print "\010"x$last_len ;
> print " "x$last_len ;
> print "\010"x$last_len ;
> } else {
> print "\010"x$len ;
> }
>
> print $printed; $printed = "";
>
> $before = $last_mod;
> close(SB);
> $last_len = $len;
> }
> sleep($delay) if ($delay);
> }
>
>