# ============LICENSE_START=======================================================
# Copyright (c) 2020 Pantheon.tech.
# Modifications Copyright (C) 2021 Bell Canada.
# Modifications Copyright (C) 2022-2024 Nordix 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.
# ============LICENSE_END=========================================================

services:

  ### docker-compose --profile dmi-service up -d -> run CPS services incl. dmi-plugin ###
  ### docker-compose --profile dmi-stub --profile monitoring up -d -> run CPS with stubbed dmi-plugin (for registration performance testing)
  ### docker-compose --profile dmi-stub --profile tracing up -d -> run CPS with stubbed dmi-plugin (for open telemetry tracing testing make ONAP_TRACING_ENABLED "true" later "http://localhost:16686" can be accessed from browser)
  ### docker-compose --profile dmi-stub --profile policy-executor-stub up -d -> run CPS with stubbed dmi-plugin and policy executor stub (for policy executor service testing make POLICY_SERVICE_ENABLED "true")
  ### to disable notifications make notification.enabled to false & comment out kafka/zookeeper services ###
  ### DEBUG: Look for '### DEBUG' comments to enable CPS-NCMP debugging

  dbpostgresql:
    container_name: dbpostgresql
    image: postgres:14.1-alpine
    ports:
      - ${DB_PORT:-5432}:5432
    environment:
      POSTGRES_DB: cpsdb
      POSTGRES_USER: ${DB_USERNAME:-cps}
      POSTGRES_PASSWORD: ${DB_PASSWORD:-cps}
    volumes:
      - ./config/postgres-init.sql:/docker-entrypoint-initdb.d/postgres-init.sql
    deploy:
      resources:
        reservations:
          cpus: '1'
          memory: 1G
        limits:
          cpus: '6'
          memory: 3G

  cps-and-ncmp:
    image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/cps-and-ncmp:${CPS_VERSION:-latest}
    environment:
      CPS_USERNAME: ${CPS_CORE_USERNAME:-cpsuser}
      CPS_PASSWORD: ${CPS_CORE_PASSWORD:-cpsr0cks!}
      DB_HOST: ${DB_HOST:-dbpostgresql}
      DB_USERNAME: ${DB_USERNAME:-cps}
      DB_PASSWORD: ${DB_PASSWORD:-cps}
      DMI_USERNAME: ${DMI_USERNAME:-cpsuser}
      DMI_PASSWORD: ${DMI_PASSWORD:-cpsr0cks!}
      KAFKA_BOOTSTRAP_SERVER: kafka:29092
      notification.enabled: 'true'
      ONAP_TRACING_ENABLED: 'false'
      ONAP_OTEL_SAMPLER_JAEGER_REMOTE_ENDPOINT: http://jaeger-service:14250
      ONAP_OTEL_EXPORTER_ENDPOINT: http://jaeger-service:4317
      POLICY_SERVICE_ENABLED: 'false'
      POLICY_SERVICE_DEFAULT_DECISION: 'deny from env'
      ### DEBUG: Uncomment next line to enable java debugging
      ### DEBUG: JAVA_TOOL_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
    restart: unless-stopped
    depends_on:
      - dbpostgresql
    deploy:
      ### DEBUG: For easier debugging use just 1 instance (also update docker-compose/config/nginx/nginx.conf !)
      replicas: 2
      resources:
        reservations:
          cpus: '2'
          memory: 2G
        limits:
          cpus: '3'
          memory: 3G
    ### DEBUG: Uncomment next 2 lines to enable java debugging (ensure 'ports' aligns with 'deploy')
    ### DEBUG ports:
    ### DEBUG  - ${CPS_CORE_DEBUG_PORT:-5005}:5005

  nginx:
    container_name: nginx-loadbalancer
    image: nginx:latest
    ports:
      - ${CPS_CORE_PORT:-8883}:80
    depends_on:
      - cps-and-ncmp
    volumes:
      - ./config/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./config/nginx/proxy_params:/etc/nginx/proxy_params

  ### if kafka is not required comment out zookeeper and kafka ###
  zookeeper:
    image: confluentinc/cp-zookeeper:6.2.1
    container_name: zookeeper
    ports:
      - '2181:2181'
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181

  kafka:
    image: confluentinc/cp-kafka:6.2.1
    container_name: kafka
    ports:
      - '9092:9092'
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,CONNECTIONS_FROM_HOST:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,CONNECTIONS_FROM_HOST://localhost:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

  ncmp-dmi-plugin:
    container_name: ncmp-dmi-plugin
    image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/ncmp-dmi-plugin:${DMI_VERSION:-1.6.0-SNAPSHOT-latest}
    ports:
      - ${DMI_PORT:-8783}:8080
    environment:
      CPS_USERNAME: ${CPS_CORE_USERNAME:-cpsuser}
      CPS_PASSWORD: ${CPS_CORE_PASSWORD:-cpsr0cks!}
      CPS_CORE_HOST: ${CPS_CORE_HOST:-cps-and-ncmp}
      CPS_CORE_PORT: ${CPS_CORE_PORT:-8080}
      CPS_CORE_USERNAME: ${CPS_CORE_USERNAME:-cpsuser}
      CPS_CORE_PASSWORD: ${CPS_CORE_PASSWORD:-cpsr0cks!}
      SDNC_HOST: ${SDNC_HOST:-sdnc}
      SDNC_PORT: ${SDNC_PORT:-8181}
      SDNC_USERNAME: ${SDNC_USERNAME:-admin}
      SDNC_PASSWORD: ${SDNC_PASSWORD:-Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U}
      DMI_SERVICE_URL: ${DMI_SERVICE_URL:-http://ncmp-dmi-plugin:8783}
      DMI_SERVICE_NAME: ${DMI_SERVICE_NAME:-dminame1}
      DMI_USERNAME: ${DMI_USERNAME:-cpsuser}
      DMI_PASSWORD: ${DMI_PASSWORD:-cpsr0cks!}
      KAFKA_BOOTSTRAP_SERVER: kafka:29092
    restart: unless-stopped
    profiles:
      - dmi-service

  ncmp-dmi-plugin-demo-and-csit-stub:
    container_name: ncmp-dmi-plugin-demo-and-csit-stub
    image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/dmi-plugin-demo-and-csit-stub:${DMI_DEMO_STUB_VERSION:-latest}
    ports:
      - ${DMI_DEMO_STUB_PORT:-8784}:8092
    environment:
      KAFKA_BOOTSTRAP_SERVER: kafka:29092
      NCMP_CONSUMER_GROUP_ID: ncmp-group
      NCMP_ASYNC_M2M_TOPIC: ncmp-async-m2m
      MODULE_INITIAL_PROCESSING_DELAY_MS: 0
      MODULE_REFERENCES_DELAY_MS: 100
      MODULE_RESOURCES_DELAY_MS: 1000
      READ_DATA_FOR_CM_HANDLE_DELAY_MS: 300
      WRITE_DATA_FOR_CM_HANDLE_DELAY_MS: 670
    restart: unless-stopped
    profiles:
      - dmi-stub
      - dmi-service

  policy-executor-stub:
    container_name: policy-executor-stub
    image: ${DOCKER_REPO:-nexus3.onap.org:10003}/onap/policy-executor-stub:latest
    ports:
      - 8785:8093
    restart: unless-stopped
    profiles:
      - policy-executor-stub

  prometheus:
    container_name: prometheus
    image: prom/prometheus:latest
    ports:
      - 9090:9090
    restart: always
    volumes:
      - ./config/prometheus.yml:/etc/prometheus/prometheus.yml
    profiles:
      - monitoring

  grafana:
    image: grafana/grafana-oss:latest
    user: ""
    container_name: grafana
    depends_on:
      prometheus:
        condition: service_started
    ports:
      - 3000:3000
    volumes:
      - ./config/grafana/provisioning/:/etc/grafana/provisioning/
      - ./config/grafana/jvm-micrometer-dashboard.json:/var/lib/grafana/dashboards/jvm-micrometer-dashboard.json
      - grafana:/var/lib/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_SERVER_DOMAIN:localhost
    profiles:
      - monitoring

  kafka-ui:
    container_name: kafka-ui
    image: provectuslabs/kafka-ui:latest
    ports:
      - 8089:8080
    environment:
      DYNAMIC_CONFIG_ENABLED: 'true'
      KAFKA_CLUSTERS_0_NAME: 'cps-kafka-local'
      KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:29092
    profiles:
      - monitoring

  jaeger-service:
    container_name: jaeger-service
    image: jaegertracing/all-in-one:latest
    ports:
      - 16686:16686
    restart: unless-stopped
    profiles:
      - tracing

volumes:
  grafana:
