spring:
  application:
    name: ping-service
  cloud:
    consul:
      host: ${CONSUL_HOST:localhost}
      port: ${CONSUL_PORT:8500}
      discovery:
        enabled: true
        register: true
        health-check-path: /actuator/health
        health-check-interval: 10s

server:
  port: ${SERVER_PORT:${PING_SERVICE_PORT:8082}}

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus,circuitbreakers
  endpoint:
    health:
      show-details: always
      probes:
        enabled: true
  tracing:
    # Disable tracing by default to avoid Zipkin connection errors
    enabled: ${TRACING_ENABLED:false}
    sampling:
      probability: ${TRACING_SAMPLING_PROBABILITY:0.1}
  zipkin:
    tracing:
      # Only configure endpoint if tracing is explicitly enabled
      endpoint: ${ZIPKIN_TRACING_ENDPOINT:http://localhost:9411/api/v2/spans}
      # Configure timeout and connection settings to handle missing Zipkin gracefully
      connect-timeout: 1s
      read-timeout: 5s

# Resilience4j Circuit Breaker Configuration
resilience4j:
  circuitbreaker:
    configs:
      default:
        # Circuit breaker opens when the failure rate exceeds 50%
        failure-rate-threshold: 50
        # Minimum number of calls to calculate the failure rate
        minimum-number-of-calls: 5
        # Time to wait before transitioning from OPEN to HALF_OPEN
        wait-duration-in-open-state: 10s
        # Number of calls in HALF_OPEN state before deciding to close/open
        permitted-number-of-calls-in-half-open-state: 3
        # Sliding window size for calculating failure rate
        sliding-window-size: 10
        # Type of sliding window (COUNT_BASED or TIME_BASED)
        sliding-window-type: COUNT_BASED
        # Record exceptions that should be considered as failures
        record-exceptions:
          - java.lang.Exception
        # Ignore certain exceptions (don't count as failures)
        ignore-exceptions:
          - java.lang.IllegalArgumentException
    instances:
      pingCircuitBreaker:
        # Use default configuration
        base-config: default
        # Override specific settings for this instance if needed
        failure-rate-threshold: 60
        minimum-number-of-calls: 4
        wait-duration-in-open-state: 5s

  # Metrics configuration removed to avoid property resolution warnings
  # Use micrometer and actuator endpoints for metrics instead
