<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
<!-- $LastChangedRevision$ -->

<!--
 Copyright 2002-2005 The Apache Software Foundation or its licensors, as
 applicable.

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<modulesynopsis metafile="mod_status.xml.meta">

<name>mod_status</name>
<description>Provides information on server activity and
performance</description>
<status>Base</status>
<sourcefile>mod_status.c</sourcefile>
<identifier>status_module</identifier>


<summary>
    <p>The Status module allows a server administrator to find out
    how well their server is performing. A HTML page is presented
    that gives the current server statistics in an easily readable
    form. If required this page can be made to automatically
    refresh (given a compatible browser). Another page gives a
    simple machine-readable list of the current server state.</p>

    <p>The details given are:</p>

    <ul>
      <li>The number of worker serving requests</li>

      <li>The number of idle worker</li>

      <li>The status of each worker, the number of requests that
      worker has performed and the total number of bytes served by
      the worker (*)</li>

      <li>A total number of accesses and byte count served (*)</li>

      <li>The time the server was started/restarted and the time it
      has been running for</li>

      <li>Averages giving the number of requests per second, the
      number of bytes served per second and the average number of
      bytes per request (*)</li>

      <li>The current percentage CPU used by each worker and in
      total by Apache (*)</li>

      <li>The current hosts and requests being processed (*)</li>
    </ul>

    <p>A compile-time option must be used to display the details
    marked "(*)" as the instrumentation required for obtaining
    these statistics does not exist within standard Apache.</p>
</summary>

<section id="enable">
    <title>Enabling Status Support</title>

    <p>To enable status reports only for browsers from the foo.com
    domain add this code to your <code>httpd.conf</code>
    configuration file</p>
<example>
    &lt;Location /server-status&gt;<br />
    SetHandler server-status<br />
<br />
    Order Deny,Allow<br />
    Deny from all<br />
    Allow from .foo.com<br />
    &lt;/Location&gt;
</example>

    <p>You can now access server statistics by using a Web browser
    to access the page
    <code>http://your.server.name/server-status</code></p>
</section>

<section id="autoupdate">

    <title>Automatic Updates</title>
    <p>You can get the status page to update itself automatically if
    you have a browser that supports "refresh". Access the page
    <code>http://your.server.name/server-status?refresh=N</code> to
    refresh the page every N seconds.</p>

</section>

<section id="machinereadable">

    <title>Machine Readable Status File</title>
    <p>A machine-readable version of the status file is available by
    accessing the page
    <code>http://your.server.name/server-status?auto</code>. This
    is useful when automatically run, see the Perl program in the
    <code>/support</code> directory of Apache,
    <code>log_server_status</code>.</p>

    <note>
      <strong>It should be noted that if <module>mod_status</module> is
      compiled into the server, its handler capability is available
      in <em>all</em> configuration files, including
      <em>per</em>-directory files (<em>e.g.</em>,
      <code>.htaccess</code>). This may have security-related
      ramifications for your site.</strong>
    </note>

</section>

<directivesynopsis>

<name>ExtendedStatus</name>
<description>Keep track of extended status information for each 
request</description>
<syntax>ExtendedStatus On|Off</syntax>
<default>ExtendedStatus Off</default>
<contextlist><context>server config</context></contextlist>
<compatibility>ExtendedStatus is only available in Apache 1.3.2 and 
later.</compatibility>

<usage>
    <p>This setting applies to the entire server, and cannot be
    enabled or disabled on a virtualhost-by-virtualhost basis.
    The collection of extended status information can slow down
    the server.</p>
</usage>

</directivesynopsis>
</modulesynopsis>

