# ============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: 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

  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}

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
    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: 30
      maximumConnectionsPerRoute: 50
      maximumConnectionsTotal: 100
      idleConnectionEvictionThresholdInSeconds: 5
      maximumInMemorySizeInMegabytes: 16
    auth:
      username: dmi
      password: dmi
      enabled: false
    api:
      base-path: dmi

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

cps:
  tracing:
    enabled: false
    exporter:
      protocol: grpc
