<?xml version="1.0"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You 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.
-->
<mbeans-descriptors>

  <mbean name="AccessLogValve"
         description="Valve that generates a web server access log"
         domain="Catalina"
         group="Valve"
         type="org.apache.catalina.valves.AccessLogValve">

    <attribute name="className"
               description="Fully qualified class name of the managed object"
               type="java.lang.String"
               writeable="false"/>

    <attribute name="info"
               description="Information about this implementation"
               type="java.lang.String"
               writeable="false"/>

     <attribute name="enabled"
               description="Enable Access Logging"
               is="false"
               type="boolean"/>

    <attribute name="containerName"
               description="Object name of the container"
               type="javax.management.ObjectName"/>

    <attribute name="directory"
               description="The directory in which log files are created"
               type="java.lang.String"/>

    <attribute name="encoding"
               description="Character set used to write the log file"
               type="java.lang.String"/>

    <attribute   name="pattern"
               description="The pattern used to format our access log lines"
               type="java.lang.String"/>

    <attribute name="prefix"
               description="The prefix that is added to log file filenames"
               type="java.lang.String"/>

    <attribute name="resolveHosts"
               description="Resolve hosts"
               is="true"
               type="boolean"/>

    <attribute name="rotatable"
               description="Flag to indicate automatic log rotation."
               is="true"
               type="boolean"/>

    <attribute name="suffix"
               description="The suffix that is added to log file filenames"
               type="java.lang.String"/>

    <attribute name="condition"
               description="The value to look for conditional logging."
               type="java.lang.String"/>

    <attribute name="fileDateFormat"
               description="The format for the date date based log rotation."
               type="java.lang.String"/>

    <attribute name="buffered"
               description="Flag to buffering."
               is="true"
               type="boolean"/>

    <attribute name="checkExists"
               description="Check for file existence before logging."
               is="true"
               type="boolean"/>
    
    <operation name="rotate"
               description="Move the existing log file to a new name"
               impact="ACTION"
               returnType="boolean">
      <parameter name="newFileName"
                 description="File name to move the log file to."
                 type="java.lang.String"/>
    </operation>
 
  </mbean>

  <mbean name="ErrorReportValve"
         description="Implementation of a Valve that outputs HTML error pages"
         domain="Catalina"
         group="Valve"
         type="org.apache.catalina.valves.ErrorReportValve">

    <attribute name="className"
               description="Fully qualified class name of the managed object"
               type="java.lang.String"
               writeable="false"/>

    <attribute name="containerName"
               description="Object name of the container"
               type="javax.management.ObjectName"/>

  </mbean>

  <mbean name="ExtendedAccessLogValve"
         description="Valve that generates a web server access log"
         domain="Catalina"
         group="Valve"
         type="org.apache.catalina.valves.ExtendedAccessLogValve">

    <attribute name="className"
               description="Fully qualified class name of the managed object"
               type="java.lang.String"
               writeable="false"/>

    <attribute name="info"
               description="Information about this implementation"
               type="java.lang.String"
               writeable="false"/>

     <attribute name="enabled"
               description="Enable Access Logging"
               is="false"
               type="boolean"/>
 
    <attribute name="containerName"
               description="Object name of the container"
               type="javax.management.ObjectName"/>

    <attribute name="directory"
               description="The directory in which log files are created"
               type="java.lang.String"/>

    <attribute name="encoding"
               description="Character set used to write the log file"
               type="java.lang.String"/>

    <attribute   name="pattern"
               description="The pattern used to format our access log lines"
               type="java.lang.String"/>

    <attribute name="prefix"
               description="The prefix that is added to log file filenames"
               type="java.lang.String"/>

    <attribute name="rotatable"
               description="Rotate log"
               is="true"
               type="boolean"/>

    <attribute name="condition"
               description="The value to look for conditional logging."
               type="java.lang.String"/>

    <attribute name="checkExists"
               description="Check for file existence before each logging."
               is="true"
               type="boolean"/>

    <attribute name="suffix"
               description="The suffix that is added to log file filenames"
               type="java.lang.String"/>

    <attribute name="fileDateFormat"
               description="The format for the date date based log rotation."
               type="java.lang.String"/>

    <attribute name="buffered"
               description="Flag to buffering."
               is="true"
               type="boolean"/>

    <operation name="rotate"
               description="Move the existing log file to a new name"
               impact="ACTION"
               returnType="boolean">
      <parameter name="newFileName"
                 description="File name to move the log file to."
                 type="java.lang.String"/>
    </operation>

  </mbean>

  <mbean name="FastCommonAccessLogValve"
         description="Valve that generates a web server access log"
         domain="Catalina"
         group="Valve"
         type="org.apache.catalina.valves.FastCommonAccessLogValve">

    <attribute name="className"
               description="Fully qualified class name of the managed object"
               type="java.lang.String"
               writeable="false"/>

    <attribute name="enabled"
               description="Enable Access Logging"
               is="true"
               type="boolean"/>

    <attribute name="containerName"
               description="Object name of the container"
               type="javax.management.ObjectName"/>

    <attribute name="directory"
               description="The directory in which log files are created"
               type="java.lang.String"/>

    <attribute   name="pattern"
               description="The pattern used to format our access log lines, which must be either common or combined"
               type="java.lang.String"/>

    <attribute name="prefix"
               description="The prefix that is added to log file filenames"
               type="java.lang.String"/>

    <attribute name="resolveHosts"
               description="Resolve hosts"
               is="true"
               type="boolean"/>

    <attribute name="rotatable"
               description="Flag to indicate automatic log rotation."
               is="true"
               type="boolean"/>

    <attribute name="suffix"
               description="The suffix that is added to log file filenames"
               type="java.lang.String"/>

    <attribute name="condition"
               description="The value to look for conditional logging."
               type="java.lang.String"/>

    <attribute name="fileDateFormat"
               description="The format for the date date based log rotation."
               type="java.lang.String"/>
  </mbean>

  <mbean name="SemaphoreValve"
         description="Valve that does concurrency control"
         domain="Catalina"
         group="Valve"
         type="org.apache.catalina.valves.SemaphoreValve">

    <attribute name="className"
               description="Fully qualified class name of the managed object"
               type="java.lang.String"
               writeable="false"/>

    <attribute name="containerName"
               description="Object name of the container"
               type="javax.management.ObjectName"/>

    <attribute name="concurrency"
               description="Desired concurrency level"
               type="int"/>

    <attribute name="fairness"
               description="Use a fair semaphore"
               type="boolean"/>

  </mbean>

  <mbean name="RemoteAddrValve"
         description="Concrete implementation of RequestFilterValve that filters based on the string representation of the remote client's IP address"
         domain="Catalina"
         group="Valve"
         type="org.apache.catalina.valves.RemoteAddrValve">

    <attribute name="addConnectorPort"
               description="Append the server connector port to the client IP separated by a semicolon"
               is="true"
               type="boolean"/>

    <attribute name="allow"
               description="The comma-delimited set of allow expressions"
               type="java.lang.String"/>

    <attribute name="allowValid"
               description="Becomes false if assigned value of allow expression is not syntactically correct"
               is="true"
               type="boolean"
               writeable="false"/>

    <attribute name="containerName"
               description="Object name of the container"
               type="javax.management.ObjectName"/>

    <attribute name="className"
               description="Fully qualified class name of the managed object"
               type="java.lang.String"
               writeable="false"/>

    <attribute name="deny"
               description="The comma-delimited set of deny expressions"
               type="java.lang.String"/>

    <attribute name="denyStatus"
               description="HTTP response status code that is used when rejecting denied request"
               type="int"/>

    <attribute name="denyValid"
               description="Becomes false if assigned value of deny expression is not syntactically correct"
               is="true"
               type="boolean"
               writeable="false"/>

    <operation name="isAllowed"
               description="Tests whether a client with this IP address value is allowed access by the current valve configuration"
               impact="INFO"
               returnType="boolean">
      <parameter name="ipAddress"
          description="IP address to be tested"
                 type="java.lang.String"/>
    </operation>
  </mbean>

  <mbean name="RemoteHostValve"
         description="Concrete implementation of RequestFilterValve that
         filters based on the string representation of the remote
         client's host name"
         domain="Catalina"
         group="Valve"
         type="org.apache.catalina.valves.RemoteHostValve">

    <attribute name="addConnectorPort"
               description="Append the server connector port to the client IP separated by a semicolon"
               is="true"
               type="boolean"/>

    <attribute name="allow"
               description="The comma-delimited set of allow expressions"
               type="java.lang.String"/>

    <attribute name="allowValid"
               description="Becomes false if assigned value of allow expression is not syntactically correct"
               is="true"
               type="boolean"
               writeable="false"/>

    <attribute name="containerName"
               description="Object name of the container"
               type="javax.management.ObjectName"/>

    <attribute name="className"
               description="Fully qualified class name of the managed object"
               type="java.lang.String"
               writeable="false"/>

    <attribute name="deny"
               description="The comma-delimited set of deny expressions"
               type="java.lang.String"/>

    <attribute name="denyStatus"
               description="HTTP response status code that is used when rejecting denied request"
               type="int"/>

    <attribute name="denyValid"
               description="Becomes false if assigned value of deny expression is not syntactically correct"
               is="true"
               type="boolean"
               writeable="false"/>

    <operation name="isAllowed"
               description="Tests whether a client with this host name is allowed access by the current valve configuration"
               impact="INFO"
               returnType="boolean">
      <parameter name="hostName"
          description="host name to be tested"
                 type="java.lang.String"/>
    </operation>

  </mbean>

  <mbean name="RequestDumperValve"
         description="Implementation of a Valve that logs interesting contents from the specified Request and the corresponding Response"
         domain="Catalina"
         group="Valve"
         type="org.apache.catalina.valves.RequestDumperValve">

    <attribute name="containerName"
               description="Object name of the container"
               type="javax.management.ObjectName"/>

    <attribute name="className"
               description="Fully qualified class name of the managed object"
               type="java.lang.String"
               writeable="false"/>

  </mbean>

  <mbean name="RequestListenerValve"
         description="Valve that handles request initialization and destroy events"
         domain="Catalina"
         group="Valve"
         type="org.apache.catalina.valves.RequestListenerValve">

    <attribute   name="className"
               description="Fully qualified class name of the managed object"
               type="java.lang.String"
               writeable="false"/>

    <attribute name="containerName"
               description="Object name of the container"
               type="javax.management.ObjectName"/>

  </mbean>

  <mbean name="RemoteIpValve"
         description="Valve that sets client information (eg IP address) based on data from a trusted proxy"
         domain="Catalina"
         group="Valve"
         type="org.apache.catalina.valves.RemoteIpValve">
    
    <attribute name="internalProxies"
               description="Comma delimited list of internal proxies"
               type="java.lang.String"
               writeable="false" />

    <attribute name="httpServerPort"
               description="Value returned by ServletRequest.getServerPort() when the protocolHeader indicates http protocol"
               type="java.lang.String"
               writeable="false" />
    
    <attribute name="httpsServerPort"
               description="Value returned by ServletRequest.getServerPort() when the protocolHeader indicates https protocol"
               type="java.lang.String"
               writeable="false" />
    
    <attribute name="protocolHeader"
               description="The protocol header (e.g. &quot;X-Forwarded-Proto&quot;)"
               type="java.lang.String"
               writeable="false" />
               
    <attribute name="protocolHeaderHttpsValue"
               description="The value of the protocol header for incoming https request (e.g. &quot;https&quot;)"
               type="java.lang.String"
               writeable="false" />
               
    <attribute name="proxiesHeader"
               description="The proxies header name (e.g. &quot;X-Forwarded-By&quot;)"
               type="java.lang.String"
               writeable="false" />
               
    <attribute name="remoteIpHeader"
               description="The remote IP header name (e.g. &quot;X-Forwarded-For&quot;)"
               type="java.lang.String"
               writeable="false" />
               
    <attribute name="trustedProxies"
               description="Comma delimited list of trusted proxies"
               type="java.lang.String"
               writeable="false" />
               
  </mbean>

  <mbean name="StuckThreadDetectionValve"
         description="Detect long requests for which their thread might be stuck"
         domain="Catalina"
         group="Valve"
         type="org.apache.catalina.valves.StuckThreadDetectionValve">

    <attribute name="className"
               description="Fully qualified class name of the managed object"
               type="java.lang.String"
               writeable="false"/>

    <attribute name="stuckThreadIds"
               description="IDs of the threads currently considered stuck. Each ID can then be used with the Threading MBean to retrieve data about it."
               type="long[]"
               writeable="false"/>

    <attribute name="stuckThreadNames"
               description="Names of the threads currently considered stuck."
               type="java.lang.String[]"
               writeable="false"/>

    <attribute name="threshold"
               description="Duration in seconds after which a request is considered as stuck"
               type="int"/>

  </mbean>
</mbeans-descriptors>
