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

########### These all have default values as shown

# We would specify the unique sink-id first
sinks:
  - file-sink
  - tmaster-sink
  - prometheus-sink
  - metricscache-sink

########### Now we would specify the detailed configuration for every unique sink
########### Syntax: sink-id: - option(s)

########### option class is required as we need to instantiate a new instance by reflection
########### option flush-frequency-ms is required to invoke flush() at interval
########### option sink-restart-attempts, representsing # of times to restart a sink when it throws exceptions and dies.
###########   If this option is missed, default value 0 would be supplied; negative value represents to restart it forever.

########### Other options would be constructed as an immutable map passed to IMetricsSink's init(Map conf) as argument,
########### We would be able to fetch value by conf.get(options), for instance:
########### We could get "org.apache.heron.metricsmgr.sink.FileSink" if conf.get("class") is called inside file-sink's instance

### Config for file-sink
file-sink:
  class: "org.apache.heron.metricsmgr.sink.FileSink"
  flush-frequency-ms: 60000 # 1 min
  sink-restart-attempts: -1 # Forever
  filename-output: "metrics.json" # File for metrics to write to
  file-maximum: 5 # maximum number of file saved in disk

### Config for tmaster-sink
tmaster-sink:
  class: "org.apache.heron.metricsmgr.sink.tmaster.TMasterSink"
  flush-frequency-ms: 60000
  sink-restart-attempts: -1 # Forever
  tmaster-location-check-interval-sec: 5
  tmaster-client:
    reconnect-interval-second: 5 # The re-connect interval to TMaster from TMasterClient
    # The size of packets written to TMaster will be determined by the minimal of: (a) time based (b) size based
    network-write-batch-size-bytes: 32768 # Size based, the maximum batch size in bytes to write to TMaster
    network-write-batch-time-ms: 16 # Time based, the maximum batch time in ms for Metrics Manager to write to TMaster per attempt
    network-read-batch-size-bytes: 32768 # Size based, the maximum batch size in bytes to write to TMaster
    network-read-batch-time-ms: 16 # Time based, the maximum batch time in ms for Metrics Manager to write to TMaster per attempt
    socket-send-buffer-size-bytes: 6553600 # The maximum socket's send buffer size in bytes
    socket-received-buffer-size-bytes: 8738000 # The maximum socket's received buffer size in bytes
  tmaster-metrics-type:
    "__emit-count": SUM
    "__execute-count": SUM
    "__fail-count": SUM
    "__ack-count": SUM
    "__complete-latency": AVG
    "__execute-latency": AVG
    "__process-latency": AVG
    "__jvm-uptime-secs": LAST
    "__jvm-process-cpu-load": LAST
    "__jvm-memory-used-mb": LAST
    "__jvm-memory-mb-total": LAST
    "__jvm-gc-collection-time-ms": LAST
    "__server/__time_spent_back_pressure_initiated": SUM
    "__time_spent_back_pressure_by_compid": SUM

prometheus-sink:
   class: "org.apache.heron.metricsmgr.sink.PrometheusSink"
   port: 8080 # The port on which to run (either port or port-file are mandatory)
   path: /metrics # The path on which to publish the metrics (mandatory)
   flat-metrics: true # By default the web-sink will publish a flat "name -> value" json map
   include-topology-name: true # Include topology name in metric name (default false)
   metrics-cache-max-size: 1000000 # Max number of metrics cached and published (default 1000000)
   metrics-cache-ttl-sec: 600 # Time in seconds after which a metric that was collected will stopped being published (default 600)

### Config for metricscache-sink
metricscache-sink:
  class: "org.apache.heron.metricsmgr.sink.metricscache.MetricsCacheSink"
  flush-frequency-ms: 60000
  sink-restart-attempts: -1 # Forever
  metricscache-location-check-interval-sec: 5
  metricscache-client:
    reconnect-interval-second: 5 # The re-connect interval to TMaster from TMasterClient
    # The size of packets written to TMaster will be determined by the minimal of: (a) time based (b) size based
    network-write-batch-size-bytes: 32768 # Size based, the maximum batch size in bytes to write to TMaster
    network-write-batch-time-ms: 16 # Time based, the maximum batch time in ms for Metrics Manager to write to TMaster per attempt
    network-read-batch-size-bytes: 32768 # Size based, the maximum batch size in bytes to write to TMaster
    network-read-batch-time-ms: 16 # Time based, the maximum batch time in ms for Metrics Manager to write to TMaster per attempt
    socket-send-buffer-size-bytes: 6553600 # The maximum socket's send buffer size in bytes
    socket-received-buffer-size-bytes: 8738000 # The maximum socket's received buffer size in bytes
  metricscache-metrics-type:
    "__emit-count": SUM
    "__execute-count": SUM
    "__fail-count": SUM
    "__ack-count": SUM
    "__complete-latency": AVG
    "__execute-latency": AVG
    "__process-latency": AVG
    "__jvm-uptime-secs": LAST
    "__jvm-process-cpu-load": LAST
    "__jvm-memory-used-mb": LAST
    "__jvm-memory-mb-total": LAST
    "__jvm-gc-collection-time-ms": LAST
    "__server/__time_spent_back_pressure_initiated": SUM
    "__time_spent_back_pressure_by_compid": SUM

### Config for graphite-sink
### Currently the graphite-sink is disabled
# graphite-sink:
#   class: "org.apache.heron.metricsmgr.sink.GraphiteSink"
#   flush-frequency-ms: 60000
#   graphite_host: "127.0.0.1" # The host of graphite to be exported metrics to
#   graphite_port: 2004 # The port of graphite to be exported metrics to
#   metrics_prefix: "heron" # The prefix of every metrics
#   server_max_reconnect-attempts: 20 # The max reconnect attempts when failing to connect to graphite server
