---
# Copyright 2017-present Open Networking Foundation
#
# Licensed 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.

xos-core:
  platformKafka: cord-platform-kafka:9092
  xos-gui:
    platformKafka: cord-platform-kafka:9092

nem-monitoring:
  args:
    voltha_kpi_broker: cord-platform-kafka:9092
  grafana:
    datasources:
      datasources.yaml:
        apiVersion: 1
        datasources:
          - name: Prometheus
            type: prometheus
            url: http://cord-platform-prometheus-server.default.svc.cluster.local
            access: proxy
            isDefault: true

logging:
  kibana:
    env:
      ELASTICSEARCH_URL: "http://cord-platform-elasticsearch-client:9200"
  elasticsearch:
    cluster:
      env:
        MINIMUM_MASTER_NODES: "1"
    client:
      replicas: 1
    master:
      replicas: 2
      persistence:
        enabled: false
    data:
      replicas: 1
      persistence:
        enabled: false
  logstash:
    elasticsearch:
      host: "cord-platform-elasticsearch-client"
    inputs:
      main: |-
        input {
          kafka {
            auto_offset_reset => "earliest" # get all previous items from new topics
            bootstrap_servers => "cord-platform-kafka:9092"
            client_id => "logstash_ck"
            codec => json { charset => "UTF-8" }
            consumer_threads => 1
            decorate_events => true
            group_id => "logstash_ck"
            metadata_max_age_ms => 60000 # recheck for new topics every minute
            # other topics that are not indexed: xos.gui_events, voltha.kpis, voltha.heartbeat
            topics_pattern => '.*\.events|dhcp.*|onos.*|.*\.log.*'
            type => "cord-platform-kafka"
          }
        }
  fluentd-elasticsearch:
    elasticsearch:
      host: "cord-platform-elasticsearch-client"

kafka:
  configurationOverrides:
    "offsets.topic.replication.factor": 1
    "log.retention.hours": 4
    "log.message.timestamp.type": "LogAppendTime"

  persistence:
    enabled: false

  zookeeper:
    persistence:
      enabled: false