# Copyright 2021 Whitestack, LLC
# *************************************************************

# This file is part of OSM Monitoring module
# All Rights Reserved to Whitestack, LLC

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

# For those usages not covered by the Apache License, Version 2.0 please
# contact: fbravo@whitestack.com or glavado@whitestack.com
##

apiVersion: v1
kind: Service
metadata:
  name: prometheus
spec:
  ports:
  - nodePort: 9091
    port: 9090
    protocol: TCP
    targetPort: 9090
  selector:
    app: prometheus
  type: NodePort
---
apiVersion: v1
data:
  prometheus.yml: |
    # Copyright 2018 The Prometheus Authors
    # Copyright 2018 Whitestack
    # Copyright 2018 Telefonica Investigacion y Desarrollo, S.A.U.
    #
    # 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.

    # my global config
    global:
      scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
      evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
      # scrape_timeout is set to the global default (10s).

    # Alertmanager configuration
    alerting:
      alertmanagers:
      - static_configs:
        - targets:
          # - alertmanager:9093

    # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
    rule_files:
      # - "first_rules.yml"
      # - "second_rules.yml"

    # A scrape configuration containing exactly one endpoint to scrape:
    # Here it's Prometheus itself.
    scrape_configs:
      - job_name: 'mon_exporter'
        static_configs:
        - targets: ['mon:8000']
      # Add here other external targets, e.g. a pushgateway
      # - job_name: 'pushgateway'
      #   static_configs:
      #   - targets: ['prometheus-pushgateway:9091']
kind: ConfigMap
metadata:
  name: prom
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: prometheus
  labels:
    app: prometheus
spec:
  replicas: 1
  serviceName: prometheus
  selector:
    matchLabels:
      app: prometheus
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      initContainers:
      - name: prometheus-init-config
        image: busybox
        command: ["/bin/sh", "-c"]
        args: ['if [ ! -f "/etc/prometheus/prometheus.yml" ]; then cp /config/prometheus.yml /etc/prometheus; fi']
        volumeMounts:
          - name: prom-config
            mountPath: /etc/prometheus
          - name: prom-config-base
            mountPath: /config
      containers:
      - name: prometheus
        image: prom/prometheus:v2.28.1
        args:
        - --config.file=/etc/prometheus/prometheus.yml
        - --web.enable-lifecycle
        ports:
        - containerPort: 9090
          protocol: TCP
        volumeMounts:
        - name: prom-config
          mountPath: /etc/prometheus
        - name: prom-db
          mountPath: /prometheus
      - name: prometheus-config-sidecar
        image: opensourcemano/prometheus:13
        env:
        - name: MONGODB_URL
          value: mongodb://mongodb-k8s:27017/?replicaSet=rs0
        - name: PROMETHEUS_CONFIG_FILE
          value: /etc/prometheus/prometheus.yml
        - name: PROMETHEUS_BASE_CONFIG_FILE
          value: /etc/prometheus_base/prometheus.yml
        - name: TARGET_DATABASE
          value: osm
        - name: PROMETHEUS_URL
          value: http://prometheus:9090
        volumeMounts:
        - name: prom-config
          mountPath: /etc/prometheus
        - name: prom-config-base
          mountPath: /etc/prometheus_base
      volumes:
      - name: prom-db
        emptyDir: {}
      - name: prom-config
        emptyDir: {}
      - name: prom-config-base
        configMap:
          name: prom
