
# Collect AWS EC2 custom tags as agent tags
collect_ec2_tags: <%= @collect_ec2_tags %>

# Collect instance metadata
# The Agent will try to collect instance metadata for EC2 and GCE instances by
# trying to connect to the local endpoint: http://169.254.169.254
# See http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html
# and https://developers.google.com/compute/docs/metadata
# for more information
collect_instance_metadata: <%= @collect_instance_metadata %>

# Set the threshold for accepting points to allow anything
# with recent_point_threshold seconds
# Defaults to 30 seconds if no value is provided

<% if @recent_point_threshold.empty? -%>
# recent_point_threshold: 30
<% else -%>
recent_point_threshold: <%= @recent_point_threshold %>
<% end -%>

# Change port the Agent is listening to
<% if @listen_port.empty? -%>
# listen_port: 17123
<% else -%>
listen_port: <%= @listen_port %>
<% end -%>

# Start a graphite listener on this port
<% if @graphite_listen_port.empty? -%>
# graphite_listen_port: 17124
<% else -%>
graphite_listen_port: <%= @graphite_listen_port %>
<% end -%>

# Additional directory to look for Datadog checks
<% if @additional_checksd.empty? -%>
# additional_checksd: /etc/dd-agent/checks.d/
<% else -%>
additional_checksd: <%= @additional_checksd %>
<% end -%>

# Allow non-local traffic to this Agent
# This is required when using this Agent as a proxy for other Agents
# that might not have an internet connection
# For more information, please see
# https://github.com/DataDog/dd-agent/wiki/Network-Traffic-and-Proxy-Configuration
non_local_traffic: <%= @non_local_traffic %>

# Select the Tornado HTTP Client in the forwarder
# Default to the simple http client
use_curl_http_client: <%= @use_curl_http_client %>

# The loopback address the Forwarder and Dogstatsd will bind.
# Optional, it is mainly used when running the agent on Openshift
<% if @bind_host.empty? -%>
# bind_host: localhost
<% else -%>
bind_host: <%= @bind_host %>
<% end -%>

# Sets how often checks should be run.
<% if @check_freq.empty? -%>
# check_freq: 15
<% else -%>
check_freq: <%= @check_freq %>
<% end -%>


# ========================================================================== #
# Pup configuration
# ========================================================================== #

# Pup is a small server that displays metric data collected by the Agent.
# Think of it as a fancy status page or a toe dip into the world of
# datadog. It can be connected to on the port below.

use_pup: <%= @use_pup ? "yes" : "no" %>

<% if @pup_port.empty? -%>
# pup_port: 17125
<% else -%>
pup_port: <%= @pup_port %>
<% end -%>

<% if @pup_interface.empty? -%>
# pup_interface: localhost
<% else -%>
pup_interface: <%= @pup_interface %>
<% end -%>

<% if @pup_url.empty? -%>
# pup_url: http://localhost:17125
<% else -%>
pup_url: <%= @pup_url %>
<% end -%>

# ========================================================================== #
# DogStatsd configuration                                                    #
# ========================================================================== #

# If you don't want to enable the DogStatsd server, set this option to no

use_dogstatsd: <%= @use_dogstatsd ? "yes" : "no" %>
# DogStatsd is a small server that aggregates your custom app metrics. For
# usage information, check out http://api.datadoghq.com

#  Make sure your client is sending to the same port.
<% if @dogstatsd_port.nil? -%>
# dogstatsd_port: 8125
<% else -%>
dogstatsd_port: <%= @dogstatsd_port %>
<% end -%>

# By default dogstatsd will post aggregate metrics to the Agent (which handles
# errors/timeouts/retries/etc). To send directly to the datadog api, set this
# to https://app.datadoghq.com.
<% if @dogstatsd_target.empty? -%>
# dogstatsd_target: http://localhost:17123
<% else -%>
dogstatsd_target: <%= @dogstatsd_target %>
<% end -%>

## The dogstatsd flush period.
<% if @dogstatsd_interval.empty? -%>
# dogstatsd_interval: 10
<% else -%>
dogstatsd_interval: <%= @dogstatsd_interval -%>
<% end -%>

## If 'yes', counters and rates will be normalized to 1 second (that is divided
## by the dogstatsd_interval) before being sent to the server. Defaults to 'yes'
dogstatsd_normalize: <%= @dogstatsd_normalize ? "yes" : "no" %>

histogram_percentiles: <%= @statsd_histogram_percentiles %>

# If you want to forward every packet received by the dogstatsd server
# to another statsd server, uncomment these lines.
# WARNING: Make sure that forwarded packets are regular statsd packets and not "dogstatsd" packets,
# as your other statsd server might not be able to handle them.
<% if @statsd_forward_host.empty? -%>
# statsd_forward_host: address_of_own_statsd_server
<% else -%>
statsd_forward_host: <%= @statsd_forward_host %>
<% end -%>
<% if @statsd_forward_port.empty? -%>
# statsd_forward_port: 8125
<% else -%>
statsd_forward_port: <%= @statsd_forward_port %>
<% end -%>

# ========================================================================== #
# Service-specific configuration                                             #
# ========================================================================== #

# -------------------------------------------------------------------------- #
#   Disk                                                                     #
# -------------------------------------------------------------------------- #

# Some infrastrucures have many constantly changing virtual devices (e.g. folks
# running constantly churning linux containers) whose metrics aren't
# interesting for datadog. To filter out a particular pattern of devices
# from collection, configure a regex here:

<% if @device_blacklist_re.empty? -%>
# device_blacklist_re: .*\/dev\/mapper\/lxc-box.*
<% else -%>
device_blacklist_re: <%= @device_blacklist_re %>
<% end -%>

# -------------------------------------------------------------------------- #
#   Ganglia                                                                  #
# -------------------------------------------------------------------------- #

<% if @ganglia_host.empty? -%>
# Ganglia host where gmetad is running
# ganglia_host: localhost
#
# Ganglia port where gmetad is running
# ganglia_port: 8651
<% else -%>
# Ganglia host where gmetad is running
ganglia_host: <%= @ganglia_host %>

# Ganglia port where gmetad is running
ganglia_port: <%= @ganglia_port %>
<% end -%>


# -------------------------------------------------------------------------- #
#  Dogstream (log file parser)
# -------------------------------------------------------------------------- #

# Comma-separated list of logs to parse and optionally custom parsers to use.
# The form should look like this:
#
#   dogstreams: /path/to/log1:parsers_module:custom_parser, /path/to/log2, /path/to/log3, ...
#
# Or this:
#
#   dogstreams: /path/to/log1:/path/to/my/parsers_module.py:custom_parser, /path/to/log2, /path/to/log3, ...
#
# Each entry is a path to a log file and optionally a Python module/function pair
# separated by colons.
#
# Custom parsers should take a 2 parameters, a logger object and
# a string parameter of the current line to parse. It should return a tuple of
# the form:
#   (metric (str), timestamp (unix timestamp), value (float), attributes (dict))
# where attributes should at least contain the key 'metric_type', specifying
# whether the given metric is a 'counter' or 'gauge'.
#
# Unless parsers are specified with an absolute path, the modules must exist in
# the Agent's PYTHONPATH. You can set this as an environment variable when
# starting the Agent. If the name of the custom parser function is not passed,
# 'parser' is assumed.
#
# If this value isn't specified, the default parser assumes this log format:
#     metric timestamp value key0=val0 key1=val1 ...
#
<%
if not @dogstreams.empty?
-%>
dogstreams: <%= @dogstreams.join(', ') %>
<% end -%>

# ========================================================================== #
# Custom Emitters                                                            #
# ========================================================================== #

# Comma-separated list of emitters to be used in addition to the standard one
#
# Expected to be passed as a comma-separated list of colon-delimited
# name/object pairs.
#
<% if @custom_emitters.empty? -%>
# custom_emitters: /usr/local/my-code/emitters/rabbitmq.py:RabbitMQEmitter
<% else -%>
custom_emitters: <%= @custom_emitters %>
<% end -%>
#
# If the name of the emitter function is not specified, 'emitter' is assumed.


# ========================================================================== #
# Logging
# ========================================================================== #

log_level: <%= @_loglevel %>

<% if @collector_log_file.empty? -%>
# collector_log_file: /var/log/datadog/collector.log
<% else -%>
collector_log_file: <%= @collector_log_file %>
<% end -%>

<% if @forwarder_log_file.empty? -%>
# forwarder_log_file: /var/log/datadog/forwarder.log
<% else -%>
forwarder_log_file: <%= @forwarder_log_file %>
<% end -%>

<% if @dogstatsd_log_file.empty? -%>
# dogstatsd_log_file: /var/log/datadog/dogstatsd.log
<% else -%>
dogstatsd_log_file: <%= @dogstatsd_log_file  %>
<% end -%>

<% if @pup_log_file.empty? -%>
# pup_log_file:       /var/log/datadog/pup.log
<% else -%>
pup_log_file: <%= @pup_log_file  %>
<% end -%>


# if syslog is enabled but a host and port are not set, a local domain socket
# connection will be attempted
#
log_to_syslog: <%= @log_to_syslog ? "yes" : "no" %>
<% if @syslog_host.empty? -%>
# syslog_host:
<% else -%>
syslog_host: <%= @syslog_host  %>
<% end -%>

<% if @syslog_port.empty? -%>
# syslog_port:
<% else -%>
syslog_port: <%= @syslog_port  %>
<% end -%>

<% if not @extra_template.empty? -%>
# ========================================================================== #
# Custom Templates from Puppet                                               #
# ========================================================================== #

<% end -%>
