#
# 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.
#

#############################
# Fluo Application properties
#############################

# NOTE - All properties that have a default are set with it. Uncomment
# a property if you want to use a value different than the default.
# Properties that have no default are uncommented and must be set by
# the user.

## Application properties
## ----------------------
## Specifies an observer provider.  This should be the name of a class that
## implements org.apache.fluo.api.observer.ObserverProvider.
#fluo.observer.provider=com.foo.AppObserverProvider
## Observer jars in this directory are copied to the DFS (specified by fluo.dfs.root) during initialization.
## If this property is set, fluo.observer.jars.url should not be set.
#fluo.observer.init.dir=/path/to/observer/jars/
## Observer jars are retreived from this URL. If set, fluo.observer.init.dir should not be set.
#fluo.observer.jars.url=hdfs://localhost:8020/path/to/observer/jars/
## Properties with a prefix of fluo.app.* can easily be retrieved by a Fluo
## application running on any node in the cluster.
#fluo.app.key1=val1

## DFS properties
## ---------------
## Fluo DFS root path. Should be prefixed with 'fs.defaultFS' property in Hadoop's core-site.xml
fluo.dfs.root={{ hdfs_root }}/fluo

## Accumulo properties
## -------------------
## Accumulo instance to connect to
fluo.accumulo.instance={{ accumulo_instance }}
## Accumulo table to initialize
fluo.accumulo.table=\${fluo.connection.application.name}
## Accumulo user
fluo.accumulo.user=root
## Accumulo password
fluo.accumulo.password={{ accumulo_password }}
## Accumulo zookeepers
fluo.accumulo.zookeepers={{ zookeeper_connect }}
## Optional - List of jars to provide to Accumulo. If not set, Fluo will find jars on classpath.
#fluo.accumulo.jars=/path/to/a.jar,/path/to/b.jar

# Transaction properties
# ----------------------
# Amount of time (in milliseconds) clients wait before rolling back transaction
#fluo.tx.rollback.time=300000

## Worker properties
## -----------------
# Number of threads in each worker instance
#fluo.worker.num.threads=10

## Loader properties
## -----------------
## Number of threads each loader runs.  Can set to zero for no threads, thread
## adding Loader will execute.  Must also set fluo.loader.queue.size to zero
## when setting this to zero.
#fluo.loader.num.threads=10
## Queue size of loader
#fluo.loader.queue.size=10

## Metrics
## -------
## Configure reporters for metrics. The frequency for each type of reporter is in seconds.

#fluo.metrics.reporter.console.enable=false
#fluo.metrics.reporter.console.target=stdout
#fluo.metrics.reporter.console.rateUnit=seconds
#fluo.metrics.reporter.console.durationUnit=milliseconds
#fluo.metrics.reporter.console.frequency=60

#fluo.metrics.reporter.csv.enable=false
#fluo.metrics.reporter.csv.dir=/tmp/
#fluo.metrics.reporter.csv.rateUnit=seconds
#fluo.metrics.reporter.csv.durationUnit=milliseconds
#fluo.metrics.reporter.csv.frequency=60

{% if 'metrics' in groups %}
fluo.metrics.reporter.graphite.enable=true
fluo.metrics.reporter.graphite.host={{ groups['metrics'][0] }}
fluo.metrics.reporter.graphite.port=2003
#fluo.metrics.reporter.graphite.rateUnit=seconds
#fluo.metrics.reporter.graphite.durationUnit=milliseconds
fluo.metrics.reporter.graphite.frequency=30
#fluo.metrics.reporter.graphite.prefix=
{% else %}
#fluo.metrics.reporter.graphite.enable=false
#fluo.metrics.reporter.graphite.host=carbon.server.com
#fluo.metrics.reporter.graphite.port=8080
#fluo.metrics.reporter.graphite.rateUnit=seconds
#fluo.metrics.reporter.graphite.durationUnit=milliseconds
#fluo.metrics.reporter.graphite.frequency=60
#fluo.metrics.reporter.graphite.prefix=
{% endif %}

#fluo.metrics.reporter.jmx.enable=false
#fluo.metrics.reporter.jmx.rateUnit=seconds
#fluo.metrics.reporter.jmx.durationUnit=milliseconds

#fluo.metrics.reporter.slf4j.enable=false
#fluo.metrics.reporter.slf4j.logger=metrics
#fluo.metrics.reporter.slf4j.rateUnit=seconds
#fluo.metrics.reporter.slf4j.durationUnit=milliseconds
