<?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"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
  
  
  <property>
    <name>chukwaAgent.tags</name>
    <value>cluster="${TODO_CLUSTER_NAME}"</value>
    <description>The cluster's name for this agent</description>
  </property>
  
  <property>
    <name>chukwaAgent.control.port</name>
    <value>9093</value>
    <description>The socket port number the agent's control interface can be contacted at.</description>
  </property>

  <property>
    <name>chukwaAgent.hostname</name>
    <value>localhost</value>
    <description>The hostname of the agent on this node. Usually localhost, this is used by the chukwa instrumentation agent-control interface library</description>
  </property>

  <property>
    <name>chukwaAgent.checkpoint.name</name>
    <value>chukwa_agent_checkpoint</value>
    <description>the prefix to to prepend to the agent's checkpoint file(s)</description>
  </property>
  
  <property>
    <name>chukwaAgent.checkpoint.dir</name>
    <value>${CHUKWA_LOG_DIR}/</value>
    <description>the location to put the agent's checkpoint file(s)</description>
  </property>

  <property>
    <name>chukwaAgent.checkpoint.interval</name>
    <value>5000</value>
    <description>the frequency interval for the agent to do checkpoints, in milliseconds</description>
  </property>

  <property>
    <name>chukwaAgent.sender.fastRetries</name>
    <value>4</value>
    <description>the number of post attempts to make to a single collector, before marking it failed</description>
  </property>

  <property>
    <name>chukwaAgent.collector.retries</name>
    <value>144000</value>
    <description>the number of attempts to find a working collector</description>
  </property>

  <property>
    <name>chukwaAgent.collector.retryInterval</name>
    <value>500</value>
    <description>the number of milliseconds to wait between searches for a collector</description>
  </property>

  <property>
    <name>chukwa.pipeline</name>
    <value>org.apache.hadoop.chukwa.datacollection.writer.hbase.HBaseWriter,org.apache.hadoop.chukwa.datacollection.writer.solr.SolrWriter</value>
    <description>
     The pipeline writer implementation to use for writing Chukwa logs.
     Options include:
       org.apache.hadoop.chukwa.datacollection.writer.ConsoleWriter
       org.apache.hadoop.chukwa.datacollection.writer.NullWriter
       org.apache.hadoop.chukwa.datacollection.writer.InMemoryWriter
       org.apache.hadoop.chukwa.datacollection.writer.SeqFileWriter
       org.apache.hadoop.chukwa.datacollection.writer.gora.GoraWriter
       org.apache.hadoop.chukwa.datacollection.writer.hbase.HBaseWriter
       org.apache.hadoop.chukwa.datacollection.writer.localfs.LocalWriter
       org.apache.hadoop.chukwa.datacollection.writer.solr.SolrWriter
     </description>
  </property>

  <property>
    <name>chukwaAgent.chunk.queue</name>
    <value>org.apache.hadoop.chukwa.datacollection.agent.MemLimitQueue</value>
  </property>

  <property>
    <name>chukwaAgent.chunk.queue.limit</name>
    <value>10485760</value>
  </property>


  <property>
    <name>syslog.adaptor.port.9095.facility.LOCAL1</name>
    <value>HADOOP</value>
  </property>

  <property>
    <name>solr.cloud.address</name>
    <value>localhost:2181</value>
  </property>

  <property>
    <name>solr.collection</name>
    <value>chukwa</value>
  </property>
</configuration>
