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);
> }
> 
>