apiVersion: 1
groups:
  # ──────────────────────────────────────────────────────────────────
  # Alertas de infraestrutura (baseados em métricas do Prometheus)
  # ──────────────────────────────────────────────────────────────────
  - name: SOC Alerts
    folder: SOC
    interval: 30s
    rules:
      - uid: cpu_high
        title: CPU ALTA
        condition: A
        data:
          - refId: A
            datasourceUid: PBFA97CFB590B2093
            relativeTimeRange:
              from: 300
              to: 0
            model:
              expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
        noDataState: OK
        execErrState: OK
        for: 2m
        annotations:
          description: "CPU acima de 80%"

      - uid: falco_critical
        title: FALCO CRITICAL
        condition: A
        data:
          - refId: A
            datasourceUid: P8E80F9AEF21F6940
            relativeTimeRange:
              from: 300
              to: 0
            model:
              expr: '{job="falco"} |= "CRITICAL"'
        for: 1m
        annotations:
          description: "Evento crítico detectado pelo Falco"

      - uid: crypto_attack
        title: POSSÍVEL CRYPTOJACKING
        condition: A
        data:
          - refId: A
            datasourceUid: PBFA97CFB590B2093
            relativeTimeRange:
              from: 300
              to: 0
            model:
              expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
          - refId: B
            datasourceUid: P8E80F9AEF21F6940
            relativeTimeRange:
              from: 300
              to: 0
            model:
              expr: '{job="falco"} |= "xmrig"'
        for: 1m
        annotations:
          description: "CPU alta + minerador detectado"

  # ──────────────────────────────────────────────────────────────────
  # Alertas de aplicação (baseados em logs dos containers via Loki)
  # Datasource: Loki (uid: P8E80F9AEF21F6940)
  # Container monitorado: newwhats-backend-prod
  # ──────────────────────────────────────────────────────────────────
  - name: App Alerts
    folder: SOC
    interval: 60s
    rules:
      - uid: backend_unhandled_exception
        title: BACKEND - Exceção Não Tratada
        condition: A
        data:
          - refId: A
            datasourceUid: P8E80F9AEF21F6940
            relativeTimeRange:
              from: 300
              to: 0
            model:
              expr: |
                count_over_time(
                  {container="newwhats-backend-prod"}
                  |~ "(?i)(unhandledRejection|uncaughtException|TypeError: Cannot|ReferenceError:|Cannot read properties)"
                  [5m]
                ) > 0
        noDataState: OK
        execErrState: OK
        for: 0s
        annotations:
          summary: "Exceção não tratada detectada no backend WhatsApp"
          description: "O container newwhats-backend-prod emitiu uma exceção crítica não tratada. Verifique os logs e o código-fonte."
        labels:
          severity: critical

      - uid: backend_prisma_p2002
        title: BACKEND - Colisão Prisma P2002
        condition: A
        data:
          - refId: A
            datasourceUid: P8E80F9AEF21F6940
            relativeTimeRange:
              from: 300
              to: 0
            model:
              expr: |
                count_over_time(
                  {container="newwhats-backend-prod"} |= "P2002"
                  [5m]
                ) > 0
        noDataState: OK
        execErrState: OK
        for: 2m
        annotations:
          summary: "Violação de unicidade P2002 detectada no banco de dados"
          description: "Prisma está relatando violações de constraint única (P2002). Pode indicar race condition em mensagens concorrentes."
        labels:
          severity: warning

      - uid: backend_http_5xx
        title: BACKEND - Erros HTTP 5xx
        condition: A
        data:
          - refId: A
            datasourceUid: P8E80F9AEF21F6940
            relativeTimeRange:
              from: 300
              to: 0
            model:
              expr: |
                count_over_time(
                  {container="newwhats-backend-prod"}
                  |~ "statusCode.*5[0-9]{2}|HTTP.*5[0-9]{2}|\"status\":5[0-9]{2}"
                  [5m]
                ) > 0
        noDataState: OK
        execErrState: OK
        for: 2m
        annotations:
          summary: "Erros HTTP 5xx detectados no backend"
          description: "O backend está retornando erros 5xx. Pode indicar falha interna, banco de dados indisponível ou bug de runtime."
        labels:
          severity: warning
