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

<!--
 Copyright 2002-2005 The Apache Software Foundation

 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_arm4.xml.meta">

<name>mod_arm4</name>
<description>Application Response Measurement (ARM) 4.0 Instrumentation</description>
<status>Base</status>
<sourcefile>mod_arm4.c</sourcefile>
<identifier>arm4_module</identifier>
<compatibility>2.0 and 2.1(?)</compatibility>

<summary>
    <p>This module makes the Apache HTTP Server version 2.0 aware of
    and a participant in ARM instrumentation flows. This module
    requires the services of an ARM agent library. 
    http://www.opengroup.org/tech/management/arm/</p>
</summary>

<directivesynopsis>
<name>ArmLoadLibrary</name>
<description>Sets the path to the ARM4 agent shared library.</description>
<syntax>ArmLoadLibrary <var>file-path</var></syntax>
<default>ArmLoadLibrary libarm4 (.dll on windows, .a on AIX, .so everywhere else)</default>
<contextlist><context>server config</context>
</contextlist>
<override></override>

<usage>
    <p>The <directive>ArmLoadLibrary</directive> can be used to
    configure <module>mod_arm4</module> to use a specific ARM4 agent
    library. <var>File-path</var> is the path to the ARM4 agent library.
    q: abs or relative path?</p>

    <example><title>Example:</title>
      ArmLoadLibrary  libewlmarm4.so
      ArmLoadLibrary  ewlmarm4.dll
    </example> 

</usage>
</directivesynopsis>

<directivesynopsis>
<name>ArmTransactionName</name>
<description>Sets the transaction name registered with the ARM agent</description>
<syntax>ArmTransactionName <var>string</var></syntax>
<default>ArmTransactionName "HTTP Request"</default>
<contextlist><context>server config</context>
</contextlist>
<override></override>

<usage>
    <p>The <directive>ArmTransactionName</directive> directive sets the name
    of the transaction registered to the ARM agent. (need more...)
    </p>

    <example><title>Example:</title>
      ArmTransactionName  "HTTP"
    </example>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>ArmApplicationName</name>
<description>Sets the name of the application registered with the ARM4 agent</description>
<syntax>ArmApplicationName <var>string</var></syntax>
<default>ArmApplicationName "Apache HTTP Server"</default>
<contextlist><context>server config</context>
</contextlist>
<override></override>

<usage>
    <p>The directive is used to control the name of the application as
    registered with the ARM4 agent. 
    </p>

    <example><title>Example:</title>
      ArmApplicationName  "httpd"
    </example>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>ArmInstrumentHandler</name>
<description>Enables the arm_block/arm_unlock calls to be made across
invocations of module handlers. </description>
<syntax>ArmInstrumentHandler <var>"on|off"</var></syntax>
<default>ArmInstrumentHandler off</default>
<contextlist><context>server config</context>
</contextlist>
<override></override>

<usage>
    <p>The ARM4 standard defines agent functions, arm_block() and
    arm_unblock() that can be called to record when a process is about
    to perform an 'out-of-process' operation (e.g., network i/o) and
    to record when that 'out-of-process' operation completes. Ideally,
    Apache HTTP Server handlers that go "out-of-process" would be
    instrumented to make use of the optional callbacks defined by
    <module>mod_arm4</module>, arm_ap_block_transaction() and 
    arm_ap_unblock_transaction to record "out-of-process" events with
    the ARM4 agent.</p> 
    <p>Setting "ArmInstrumentHandler on" causes this module to call
    arm_block() and arm_unblock on behalf of a handler that is not
    instrumented. There are a couple of problems with using this
    directive as implemented. First, <module>mod_arm4</module> has no
    knowledge if a handler really goes "out-of-process". Second, the
    arm_block() is called in the fixups hook and the arm_unblock is
    called in the logging hook, so it is relatively coarse grained. A
    lot of "in-process" cycles can be consumed between these two hooks
    which would be incorrectly attributed to the "out-of-process"
    activity.
    </p>

    <example><title>Example:</title>
      ArmInstrumentHandler on
    </example>
</usage>
</directivesynopsis>

</modulesynopsis>
