#  ============LICENSE_START=======================================================
#  Copyright (C) 2021 Pantheon.tech
#  Modifications Copyright (C) 2021-2022 Bell Canada
#  Modifications Copyright (C) 2021-2024 Nordix Foundation
#  Modifications Copyright (C) 2024 TechMahindra Ltd
#  ================================================================================
#  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.
#
#  SPDX-License-Identifier: Apache-2.0
#  ============LICENSE_END=========================================================

server:
    port: 8080

rest:
    api:
        cps-base-path: /cps/api
        ncmp-base-path: /ncmp
        ncmp-inventory-base-path: /ncmpInventory

spring:
    main:
        banner-mode: "off"
    application:
        name: "cps-application"
    jpa:
        show-sql: false
        ddl-auto: create
        open-in-view: false
        properties:
            hibernate.enable_lazy_load_no_trans: true
            hibernate.dialect: org.hibernate.dialect.PostgreSQLDialect
            # Please ensure these values match those used in integration-test/src/test/resources/application.yml
            hibernate.id.new_generator_mappings: true
            hibernate.jdbc.batch_size: 100

    datasource:
        url: jdbc:postgresql://${DB_HOST}:${DB_PORT:5432}/cpsdb
        username: ${DB_USERNAME}
        password: ${DB_PASSWORD}
        driverClassName: org.postgresql.Driver
        hikari:
            minimumIdle: 5
            maximumPoolSize: 80
            idleTimeout: 60000
            connectionTimeout: 30000
            leakDetectionThreshold: 30000
            pool-name: CpsDatabasePool

    cache:
        type: caffeine
        cache-names: yangSchema
        caffeine:
            spec: maximumSize=10000,expireAfterAccess=10m

    liquibase:
        change-log: classpath:changelog/changelog-master.yaml
        label-filter: ${LIQUIBASE_LABELS}

    servlet:
        multipart:
            enabled: true
            max-file-size: 100MB
            max-request-size: 100MB

    kafka:
        bootstrap-servers: ${KAFKA_BOOTSTRAP_SERVER:localhost:9092}
        security:
            protocol: PLAINTEXT
        producer:
            value-serializer: io.cloudevents.kafka.CloudEventSerializer
            client-id: cps-core
        consumer:
            group-id: ${NCMP_CONSUMER_GROUP_ID:ncmp-group}
            key-deserializer: org.springframework.kafka.support.serializer.ErrorHandlingDeserializer
            value-deserializer: org.springframework.kafka.support.serializer.ErrorHandlingDeserializer
            properties:
                spring.deserializer.key.delegate.class: org.apache.kafka.common.serialization.StringDeserializer
                spring.deserializer.value.delegate.class: io.cloudevents.kafka.CloudEventDeserializer
                spring.json.use.type.headers: false

    jackson:
        default-property-inclusion: NON_NULL
        serialization:
            FAIL_ON_EMPTY_BEANS: false
    sql:
        init:
            mode: ALWAYS
app:
    ncmp:
        async-m2m:
            topic: ${NCMP_ASYNC_M2M_TOPIC:ncmp-async-m2m}
        avc:
            cm-subscription-ncmp-in: ${CM_SUBSCRIPTION_NCMP_IN_TOPIC:subscription}
            cm-subscription-dmi-in: ${CM_SUBSCRIPTION_DMI_IN_TOPIC:ncmp-dmi-cm-avc-subscription}
            cm-subscription-dmi-out: ${CM_SUBSCRIPTION_DMI_OUT_TOPIC:dmi-ncmp-cm-avc-subscription}
            cm-subscription-ncmp-out: ${CM_SUBSCRIPTION_NCMP_OUT_TOPIC:subscription-response}
            cm-events-topic: ${NCMP_CM_EVENTS_TOPIC:cm-events}
    lcm:
        events:
            topic: ${LCM_EVENTS_TOPIC:ncmp-events}
    dmi:
        cm-events:
            topic: ${DMI_CM_EVENTS_TOPIC:dmi-cm-events}
        device-heartbeat:
            topic: ${DMI_DEVICE_HEARTBEAT_TOPIC:dmi-device-heartbeat}
    cps:
        data-updated:
            change-event-notifications-enabled: ${CPS_CHANGE_EVENT_NOTIFICATIONS_ENABLED:true}
            topic: ${CPS_CHANGE_EVENT_TOPIC:cps-data-updated-events}



notification:
    enabled: true
    async:
        executor:
            core-pool-size: 2
            max-pool-size: 10
            queue-capacity: 500
            wait-for-tasks-to-complete-on-shutdown: true
            thread-name-prefix: Async-
            time-out-value-in-ms: 60000

springdoc:
    swagger-ui:
        disable-swagger-default-url: true
        urlsPrimaryName: cps-core
        urls:
            - name: cps-core
              url: /api-docs/cps-core/openapi.yaml
            - name: cps-ncmp
              url: /api-docs/cps-ncmp/openapi.yaml
            - name: cps-ncmp-inventory
              url: /api-docs/cps-ncmp/openapi-inventory.yaml

security:
    # comma-separated uri patterns which do not require authorization
    permit-uri: /actuator/**,/swagger-ui.html,/swagger-ui/**,/swagger-resources/**,/api-docs/**,/v3/api-docs/**
    auth:
        username: ${CPS_USERNAME:cpsuser}
        password: ${CPS_PASSWORD:cpsr0cks!}

cps:
    tracing:
        sampler:
            jaeger_remote:
                endpoint: ${ONAP_OTEL_SAMPLER_JAEGER_REMOTE_ENDPOINT:http://onap-otel-collector:14250}
        exporter:
            endpoint: ${ONAP_OTEL_EXPORTER_ENDPOINT:http://onap-otel-collector:4317}
            protocol: ${ONAP_OTEL_EXPORTER_PROTOCOL:grpc}
        enabled: ${ONAP_TRACING_ENABLED:false}
        excluded-observation-names: ${ONAP_EXCLUDED_OBSERVATION_NAMES:tasks.scheduled.execution}

# Actuator
management:
    tracing:
        propagation:
            produce: ${ONAP_PROPAGATOR_PRODUCE:[W3C]}
        sampling:
            probability: 1.0
    endpoints:
        web:
            exposure:
                include: info,health,loggers,prometheus
    endpoint:
        health:
            show-details: always
            # kubernetes probes: liveness and readiness
            probes:
                enabled: true

logging:
    format: json
    level:
        org:
            springframework: INFO
            onap:
                cps: INFO
ncmp:
    dmi:
        httpclient:
            data-services:
                connectionTimeoutInSeconds: 30
                readTimeoutInSeconds: 30
                writeTimeoutInSeconds: 30
                maximumConnectionsTotal: 100
                pendingAcquireMaxCount: 50
                maximumInMemorySizeInMegabytes: 16
            model-services:
                connectionTimeoutInSeconds: 30
                readTimeoutInSeconds: 30
                writeTimeoutInSeconds: 30
                maximumConnectionsTotal: 100
                pendingAcquireMaxCount: 50
                maximumInMemorySizeInMegabytes: 16
        auth:
            username: ${DMI_USERNAME:cpsuser}
            password: ${DMI_PASSWORD:cpsr0cks!}
            enabled: ${DMI_AUTH_ENABLED:true}
        api:
            base-path: dmi

    timers:
        advised-modules-sync:
            sleep-time-ms: 5000
        locked-modules-sync:
            sleep-time-ms: 300000
        cm-handle-data-sync:
            sleep-time-ms: 30000
        subscription-forwarding:
            dmi-response-timeout-ms: 30000
        model-loader:
            retry-time-ms: 1000
        trust-level:
            dmi-availability-watchdog-ms: 30000

    modules-sync-watchdog:
        async-executor:
            parallelism-level: 10

    model-loader:
        maximum-attempt-count: 20

# Custom Hazelcast Config.
hazelcast:
    cluster-name: ${CPS_NCMP_CACHES_CLUSTER_NAME:"cps-and-ncmp-common-cache-cluster"}
    mode:
        kubernetes:
            enabled: ${HAZELCAST_MODE_KUBERNETES_ENABLED:false}
            service-name: ${CPS_NCMP_SERVICE_NAME:"cps-and-ncmp-service"}

otel:
    exporter:
        otlp:
            traces:
                protocol: ${ONAP_OTEL_EXPORTER_OTLP_TRACES_PROTOCOL:grpc}