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