#  ============LICENSE_START=======================================================
#  Copyright (C) 2021 Pantheon.tech
#  Modifications Copyright (C) 2021-2022 Bell Canada
#  Modifications Copyright (C) 2021-2022 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.
#
#  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
                dialect: org.hibernate.dialect.PostgreSQLDialect

    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: 120000
            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
        labels: ${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: org.springframework.kafka.support.serializer.JsonSerializer
            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: org.springframework.kafka.support.serializer.JsonDeserializer
                spring.json.value.default.type: org.onap.cps.ncmp.event.model.DmiAsyncRequestResponseEvent
                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:
            subscription-topic: ${NCMP_CM_AVC_SUBSCRIPTION:cm-avc-subscription}
    lcm:
        events:
            topic: ${LCM_EVENTS_TOPIC:ncmp-events}

notification:
    enabled: true
    data-updated:
        topic: ${CPS_CHANGE_EVENT_TOPIC:cps.data-updated-events}
        filters:
            enabled-dataspaces: ${NOTIFICATION_DATASPACE_FILTER_PATTERNS:""}
    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: 2000

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: /manage/**,/swagger-ui.html,/swagger-ui/**,/swagger-resources/**,/api-docs/**
    auth:
        username: ${CPS_USERNAME}
        password: ${CPS_PASSWORD}

# Actuator
management:
    server:
        port: 8081
    endpoints:
        web:
            base-path: /manage
            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:
        auth:
            username: ${DMI_USERNAME}
            password: ${DMI_PASSWORD}
        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

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