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

collector=http://localhost:6188
collectionFrequency=60000
maxRowCacheSize=10000
sendInterval={{metrics_report_interval}}000
clusterReporterAppId=nimbus
host_in_memory_aggregation = {{host_in_memory_aggregation}}
host_in_memory_aggregation_port = {{host_in_memory_aggregation_port}}
{% if is_aggregation_https_enabled %}
host_in_memory_aggregation_protocol = {{host_in_memory_aggregation_protocol}}
{% endif %}

# Metric names having type COUNTER
counters=EventTakeSuccessCount,EventPutSuccessCount,EventTakeAttemptCount,EventPutAttemptCount
