<?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.
-->
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>htraced.log.level</name>
    <value>TRACE</value>
  </property>
  <property>
    <name>htraced.log.path</name>
    <value>/tmp/htraced.log</value>
  </property>
  <property>
    <name>web.address</name>
    <value>localhost:9096</value>
  </property>
  <property>
    <name>data.store.directories</name>
    <value>/tmp/htraced1:/tmp/htraced2</value>
  </property>
  <property>
    <name>data.store.clear</name>
    <value>true</value>
  </property>
  <property>
    <name>data.store.span.buffer.size</name>
    <value>100</value>
  </property>
  <property>
    <name>metrics.heartbeat.period.ms</name>
    <value>60000</value>
  </property>
</configuration>
