# Alertmanager Configuration for Synor Testnet
# Routes alerts to appropriate channels based on severity

global:
  # Default timeout for resolving alerts
  resolve_timeout: 5m

# Alert routing configuration
route:
  # Group alerts by alertname and instance
  group_by: ['alertname', 'instance']

  # Wait before sending initial notification
  group_wait: 30s

  # Wait between sending notifications for new alerts in same group
  group_interval: 5m

  # Wait before resending notification for same alert
  repeat_interval: 4h

  # Default receiver
  receiver: 'default-receiver'

  # Child routes for specific severities
  routes:
    # Critical alerts - immediate notification
    - match:
        severity: critical
      receiver: 'critical-receiver'
      group_wait: 10s
      repeat_interval: 1h
      continue: true

    # Warning alerts - batched notification
    - match:
        severity: warning
      receiver: 'warning-receiver'
      group_wait: 1m
      repeat_interval: 6h

# Receivers define where alerts go
receivers:
  - name: 'default-receiver'
    # Default: log to stdout (visible in docker logs)
    webhook_configs: []

  - name: 'critical-receiver'
    # Critical alerts - configure your preferred channel
    # Example: Discord webhook (uncomment and add your URL)
    # webhook_configs:
    #   - url: 'https://discord.com/api/webhooks/YOUR_WEBHOOK_ID/YOUR_WEBHOOK_TOKEN'
    #     send_resolved: true
    #     http_config:
    #       follow_redirects: true

    # Example: Slack webhook (uncomment and add your URL)
    # slack_configs:
    #   - api_url: 'https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK'
    #     channel: '#synor-alerts'
    #     title: '{{ .Status | toUpper }}: {{ .CommonAnnotations.summary }}'
    #     text: '{{ .CommonAnnotations.description }}'
    #     send_resolved: true
    webhook_configs: []

  - name: 'warning-receiver'
    # Warning alerts - lower priority channel
    webhook_configs: []

# Inhibition rules - suppress lower severity when higher fires
inhibit_rules:
  # If SynorNodeDown fires, suppress other alerts for same instance
  - source_match:
      alertname: 'SynorNodeDown'
    target_match_re:
      alertname: 'Synor.*'
    equal: ['instance']

  # If NetworkPartition fires, suppress LowPeerCount
  - source_match:
      alertname: 'SynorNetworkPartition'
    target_match:
      alertname: 'SynorLowPeerCount'
    equal: ['instance']

  # Critical suppresses warning for same alert type
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'instance']
