Skip to content

fix(sse): count gate/combo-rejected requests in per-api-key usage - #6698

Merged
diegosouzapw merged 1 commit into
release/v3.8.47from
fix/connection-usage-logging
Jul 9, 2026
Merged

diegosouzapw merged 1 commit into
release/v3.8.47from
fix/connection-usage-logging

Conversation

@diegosouzapw

Copy link
Copy Markdown
Collaborator

Problema (reportado via suporte, 2026-07-08)

Uma API key do OmniRoute exibia "zero requisições" apesar de ter recebido tráfego real.

Causa-raiz: requests rejeitadas antes de handleChatCore — rejeição de pipeline-gate (provider circuit breaker OPEN / model cooldown) ou combo com todos os alvos exaustos — davam short-circuit em src/sse/handlers/chat.ts gravando apenas uma linha em call_logs (visível em /dashboard/logs). Elas nunca alcançavam persistFailureUsage, então nenhuma linha em usage_history era criada — e o contador de uso por API key (getApiKeyUsageRows, que lê usage_history) nunca incrementava. Uma key cujo tráfego foi inteiramente rejeitado por gate/breaker aparecia zerada.

Fix

Ambos os caminhos de rejeição passam a chamar recordRejectedRequestUsage(), que grava:

  1. a linha em call_logs (visibilidade em /dashboard/logs — inalterada), e
  2. uma linha em usage_history atribuída à API key com success:false, espelhando a semântica do persistFailureUsage do caminho de falha pós-executor.

Os campos apiKeyId/apiKeyName já estavam em escopo nos dois callsites, mas eram descartados.

Arquivos

  • src/sse/handlers/rejectedRequestUsage.ts (novo) — helper que grava as duas tabelas.
  • src/sse/handlers/chat.ts — os dois branches de rejeição (combo exausto + pipeline-gate) usam o helper.
  • tests/unit/rejected-request-usage.test.ts (novo) — regression guard.

Validação (Hard Rule #18 — TDD)

  • Teste RED → GREEN: prova que um request gate-rejeitado/combo-exausto sob uma API key gera linha em usage_history com api_key_id + success:false (antes: ausente).
  • 18/18 testes verdes (2 novos + 16 de usage relacionados). Lint 0 erros. Typecheck dos arquivos alterados limpo.

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant