# ============LICENSE_START=======================================================
# Copyright (C) 2023-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.
#
#  SPDX-License-Identifier: Apache-2.0
#  ============LICENSE_END=========================================================

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

spring:
  main:
    banner-mode: off

  application:
    name: cps-integration-test

  jpa:
    properties:
      hibernate.enable_lazy_load_no_trans: true
      hibernate.dialect: org.hibernate.dialect.PostgreSQLDialect
      hibernate.format_sql: false
      hibernate.show_sql: false
      # Please ensure these values match those used in cps-application/src/main/resources/application.yml
      hibernate.id.new_generator_mappings: true
      hibernate.jdbc.batch_size: 100

  datasource:
    url: ${DB_URL}
    username: ${DB_USERNAME}
    password: ${DB_PASSWORD}
    driverClassName: org.postgresql.Driver
    initialization-mode: always
    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

  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:
      subscription-topic: ${NCMP_CM_AVC_SUBSCRIPTION:subscription}
      subscription-forward-topic-prefix: ${NCMP_FORWARD_CM_AVC_SUBSCRIPTION:ncmp-dmi-cm-avc-subscription-}
      subscription-response-topic: ${NCMP_RESPONSE_CM_AVC_SUBSCRIPTION:dmi-ncmp-cm-avc-subscription}
      subscription-outcome-topic: ${NCMP_OUTCOME_CM_AVC_SUBSCRIPTION: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}

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: 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: /actuator/**,/swagger-ui.html,/swagger-ui/**,/swagger-resources/**,/api-docs/**,/v3/api-docs/**
  auth:
    username: cps
    password: cpsr0cks!

# Actuator
management:
  endpoints:
    web:
      exposure:
        include: info,health,loggers,prometheus
  endpoint:
    health:
      show-details: always
      # kubernetes probes: liveness and readiness
      probes:
        enabled: false

logging:
  format: text
  level:
    org:
      springframework: INFO
      onap:
        cps: INFO

ncmp:
  dmi:
    httpclient:
      connectionTimeoutInSeconds: 180
      maximumConnectionsPerRoute: 50
      maximumConnectionsTotal: 100
      idleConnectionEvictionThresholdInSeconds: 5
    auth:
      username: dmi
      password: dmi
      enabled: false
    api:
      base-path: dmi

  timers:
    advised-modules-sync:
      sleep-time-ms: 100000
    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: 1

  model-loader:
    maximum-attempt-count: 20

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

  jackson:
    default-property-inclusion: NON_NULL
    serialization:
      FAIL_ON_EMPTY_BEANS: false

  sql:
    init:
      mode: ALWAYS

hazelcast:
  cluster-name: cps-and-ncmp-test-caches
  mode:
    kubernetes:
      enabled: false
      service-name: cps-and-ncmp-service
