<?xml version="1.0" encoding="UTF-8"?>
<!--
 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.
-->
<componentConfig>

  <!--
    LoggingInterceptorService

    isEnabled := is the interceptor enabled
    maxArgLength := maximum argument length for debug output
    monitorAllExceptions := monitor all exceptions ignoring the configured services
    services := the list of services being monitored
    services/service@name := the name of the service being monitored
  -->

  <LoggingInterceptorService>
    <isEnabled>true</isEnabled>
    <maxArgLength>2000</maxArgLength>
    <monitorAllExceptions>true</monitorAllExceptions>
    <services>
      <service name="*"/>
    </services>
  </LoggingInterceptorService>

  <!--
    PerformanceInterceptorService

    isEnabled := is the interceptor enabled
    tresholds := list of tresholds determining the trace level
    tresholds/debug@millis := the treshold for the debug trace level
    tresholds/info@millis := the treshold for the info trace level
    tresholds/warn@millis := the treshold for the warn trace level
    tresholds/error@millis := the treshold for the error trace level
    tresholds/fatal@millis := the treshold for the fatal trace level
    services := the list of services being monitored
    services/service@name := the name of the service being monitored
  -->

  <PerformanceInterceptorService>
    <isEnabled>true</isEnabled>
    <maxArgLength>2000</maxArgLength>
    <tresholds>
      <debug millis="0"/>
      <info  millis="100"/>
      <warn  millis="500"/>
      <error millis="1000"/>
      <fatal millis="5000"/>
    </tresholds>
    <services>
      <service name="*"/>
    </services>
  </PerformanceInterceptorService>

  <!--
    JamonInterceptorService

    isEnabled := is the interceptor enabled
    performanceMonitorClassName := the performance monitor implementation to interact with JAMon
    reportTimeout := the timeout between generating a JAMON report (No report = 0)
    reportFile := the file for the JAMON report
    reportOnExit := create a HTML report on disposal
    services := the list of services being monitored
    services/service@name := the name of the service being monitored
  -->

  <JamonInterceptorService>
    <isEnabled>true</isEnabled>
    <performanceMonitorClassName>org.apache.fulcrum.yaafi.interceptor.jamon.Jamon2PerformanceMonitorImpl</performanceMonitorClassName>
    <reportTimeout>60000</reportTimeout>
    <reportFile>./target/jamon.html</reportFile>
    <reportOnExit>true</reportOnExit>
    <services>
      <service name="*"/>
    </services>
  </JamonInterceptorService>

  <!--
    JavaSimonInterceptorSerivce

    isEnabled := is the interceptor enabled
    performanceMonitorClassName := the performance monitor implementation to interact with JAMon
    reportTimeout := the timeout between generating a JAMON report (No report = 0)
    reportFile := the file for the JAMON report
    reportOnExit := create a HTML report on disposal
    services := the list of services being monitored
    services/service@name := the name of the service being monitored
  -->

  <JavaSimonInterceptorSerivce>
    <isEnabled>true</isEnabled>
    <performanceMonitorClassName>org.apache.fulcrum.yaafi.interceptor.javasimon.JavaSimonInterceptorServiceImpl</performanceMonitorClassName>
    <reportTimeout>60000</reportTimeout>
    <reportFile>./target/javasimon.html</reportFile>
    <reportOnExit>true</reportOnExit>
    <services>
      <service name="*"/>
    </services>
  </JavaSimonInterceptorSerivce>

  <!--
    AdviceService

    interceptors := the list of interceptors for an advised object
    interceptors/interceptor := the name of an interceptor service
  -->

  <AdviceService>
    <interceptors>
      <interceptor>org.apache.fulcrum.yaafi.interceptor.performance.PerformanceInterceptorService</interceptor>
      <interceptor>org.apache.fulcrum.yaafi.interceptor.logging.LoggingInterceptorService</interceptor>
    </interceptors>
  </AdviceService>

  <TestComponent>
    <FOO>FOO</FOO>
  </TestComponent>

  <SystemPropertyService>
    <property name="FOO">BAR</property>
  </SystemPropertyService>

  <ReconfigurationService interval="5000">
    <entry>
      <location>./src/test/TestComponentConfig.xml</location>
    </entry>
    <entry>
      <location>./src/test/TestParameters.properties</location>
      <services>
        <service name="org.apache.fulcrum.yaafi.TestComponent"/>
        <service name="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyService"/>
      </services>
    </entry>
  </ReconfigurationService>

  <ShutdownService interval="5000">
    <entry>
      <location>./src/test/shutdown.txt</location>
      <useSystemExit>true</useSystemExit>
    </entry>
  </ShutdownService>

</componentConfig>
