---
# OpenTelemetry Collector Configuration with Self-Monitoring
# Stories 4-8, 4-9: Multi-instance HA with self-monitoring

# Receivers define how telemetry data enters the collector
receivers:
  # OTLP receiver accepts OpenTelemetry Protocol data
  otlp:
    protocols:
      # HTTP protocol on port 4318 (OTLP standard)
      http:
        endpoint: 0.0.0.0:4318
        include_metadata: false  # HIPAA compliance: No PII/PHI in logs
      # gRPC protocol on port 4317 (OTLP standard)
      grpc:
        endpoint: 0.0.0.0:4317

  # Prometheus receiver to scrape Collector's own metrics (Story 4-9)
  prometheus:
    config:
      scrape_configs:
        - job_name: 'otel-collector-self'
          scrape_interval: 30s
          static_configs:
            - targets: ['localhost:8888']
              labels:
                service: 'otel-collector'
                environment: 'production'
                collector_instance: '${POD_NAME}'

# Processors transform, filter, or batch data before export
processors:
  # Memory limiter prevents OOM under burst load
  memory_limiter:
    check_interval: 5s
    limit_mib: 512
    spike_limit_mib: 256

  # Attributes processor filters sensitive headers and adds enrichment
  attributes:
    actions:
      # Remove authentication headers
      - key: http.request.header.authorization
        action: delete
      - key: http.request.header.cookie
        action: delete
      - key: http.request.header.x-api-key
        action: delete
      # Remove headers that may contain PHI
      - key: http.request.header.x-patient-id
        action: delete
      - key: http.request.header.x-member-id
        action: delete

  # Resource processor enriches telemetry with metadata
  resource:
    attributes:
      - key: gcp.region
        value: us-central1
        action: insert
      - key: environment
        value: prototype
        action: insert
      - key: collector.instance
        value: '${POD_NAME}'
        action: insert

  # Batch processor groups data to reduce export overhead
  batch:
    timeout: 10s
    send_batch_size: 100
    send_batch_max_size: 1000

# Exporters define where telemetry data is sent
exporters:
  # Debug exporter logs data to stdout
  debug:
    verbosity: detailed
    sending_queue:
      enabled: true
      num_consumers: 4
      queue_size: 2000
      storage: file_storage  # Persistent queue (Story 4-8)
    retry_on_failure:
      enabled: true
      initial_interval: 1s
      max_interval: 30s
      max_elapsed_time: 300s

# Extensions provide additional functionality
extensions:
  # Health check extension for monitoring collector status
  health_check:
    endpoint: 0.0.0.0:13133
    path: "/health/status"
    check_collector_pipeline:
      enabled: true
      interval: "30s"
      exporter_failure_threshold: 5

  # File storage for persistent queue (Story 4-8)
  file_storage:
    directory: /var/otel/queue
    timeout: 10s
    compaction:
      on_start: true
      on_rebound: true
      directory: /var/otel/queue

# Service section ties receivers, processors, and exporters into pipelines
service:
  # Enable Collector's own telemetry (Story 4-9)
  telemetry:
    logs:
      level: info
    metrics:
      level: detailed  # Options: none, basic, normal, detailed
      address: 0.0.0.0:8888  # Prometheus metrics endpoint

  extensions: [health_check, file_storage]

  pipelines:
    # Application metrics pipeline
    metrics:
      receivers: [otlp]
      processors: [memory_limiter, attributes, resource, batch]
      exporters: [debug]

    # Application logs pipeline
    logs:
      receivers: [otlp]
      processors: [memory_limiter, attributes, resource, batch]
      exporters: [debug]

    # Application traces pipeline
    traces:
      receivers: [otlp]
      processors: [memory_limiter, attributes, resource, batch]
      exporters: [debug]

    # Self-monitoring pipeline (Story 4-9)
    # Separate from application telemetry for isolation
    metrics/self:
      receivers: [prometheus]
      processors: [batch]
      exporters: [debug]  # Future: googlecloud (Story 6-1)
