<!--
  ~  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.
  -->

<module name="MetricsAggregatorModule" class="org.apache.synapse.metrics.MetricsAggregatorModule">
    <inflow>
        <handler name="GlobalRequestCounter"
                 class="org.apache.synapse.metrics.GlobalRequestCountHandler">
            <order phase="Transport"/>
        </handler>
        <!--<handler name="ServiceRequestCounter"
                 class="">
            <order phaseLast="true" phase="Dispatch"/>
        </handler>
        <handler name="OperationInCounter"
                 class="">
            <order phase="OpPhase"/>
        </handler>-->
    </inflow>
    <!--<outflow>
        <handler name="GlobalResponseCounter"
                 class="">
            <order phase="OpPhase"/>
        </handler>
        <handler name="OperationOutCounter"
                 class="">
            <order phase="OpPhase"/>
        </handler>
        <handler name="ResponseTimeHandler"
                 class="">
            <order phase="MessageOut" phaseLast="true"/>
        </handler>
    </outflow>-->
    <!--<Outfaultflow>
        <handler name="FaultCounter"
                 class="">
            <order phase="MessageOut"/>
        </handler>
    </Outfaultflow>-->
</module>
