Operação e observabilidade

Movimentação financeira real permanece desativada. Acompanhe serviços e filas duráveis independentemente da interface pública.

Saúde dos serviços

/healthz verifica resposta da API e /readyz verifica PostgreSQL. O contêiner web verifica sua página /pt. Execute o worker separado de web e API; ele processa filas duráveis de webhooks, notificações da operadora e e-mail. Monitore falhas, leases vencidos e crescimento das filas pendentes. Um resultado SMTP uncertain exige revisão, sem reenvio cego.

Métricas e histórico

GET /v1/metrics exige metrics:read e retorna apenas os registros do negócio autenticado:

  • receivedBrlCents: centavos BRL inteiros confirmados em pagamentos reais, sem usar o valor solicitado como recebido.
  • settledUsdt: string decimal exata de liquidações reais confirmadas em USDT.
  • settledCount: quantidade de liquidações reais confirmadas em USDT.
  • sandboxPaymentCount: contagem separada de pagamentos sandbox.
  • auditEventCount: quantidade de registros de auditoria do negócio.

Mantenha BRL e USDT separados. Não converta settledUsdt em ponto flutuante binário para cálculos financeiros e não trate esses acumulados como saldo custodiado.

O painel usa outro endpoint de visão geral, com ambiente e período selecionados por dias de calendário UTC. Um recebimento ou uma liquidação entra na data de confirmação, mesmo quando a cobrança foi criada antes. GET /v1/requests expõe método, rota, status, duração e correlação sanitizados, sem corpos, cabeçalhos secretos ou query strings. A auditoria registra ações relevantes de ator e recurso. Não há serviço público de status de infraestrutura ou integração externa de alertas incluídos.

Recuperação

  • Falha de cotação: usar as fontes de contingência configuradas, sem servir preço vencido.
  • Falha do worker: reiniciar; leases vencidos permitem retomada por outra instância.
  • Notificação repetida: deduplicar antes de qualquer alteração do pagamento.
  • Resultado desconhecido da operadora: reconciliar sem emitir outra cobrança.
  • Credencial exposta: revogar ou substituir e revisar a atividade correspondente.
  • Rollback da aplicação: usar o manifesto de imagens fixadas da release anterior; veja deploy.

Acompanhamento das releases

O workflow do GitHub Actions verifica a revisão antes de publicar a main pelo comando SSH restrito. Confira os jobs de validação e deploy, o REVISION do servidor, /opt/magnum/shared/deployed-commit, a saúde dos contêineres e a resposta HTTPS pública. Validação aprovada sozinha não comprova publicação; uma revisão antiga ignorada também não significa que ela foi publicada.

O servidor serializa deploys por /opt/magnum/shared/deploy.lock, usa acesso somente de leitura ao repositório, gera quatro imagens fixadas ao SHA e executa o backup antes de migrar. /opt/magnum/current só avança depois das verificações da aplicação e da origem pública. Falha de inicialização ou saúde pública restaura as imagens anteriores da aplicação, mantendo o banco na versão migrada. Revise o resultado e repita as verificações após qualquer rollback automático.

O rollback manual deve usar o compose.images.yaml da release anterior e reiniciar apenas api, worker e web com --no-build --no-deps. Não reenvie um SHA antigo ao comando restrito: ele aceita somente a origin/main atual. Preserve backups do banco e confira a compatibilidade das migrações antes de restaurar imagens antigas da aplicação. Veja em deploy o comando exato e os nomes dos secrets do GitHub.

Rotação e retenção

Trocar API_KEY_PEPPER invalida as chaves atuais. Substituir ENCRYPTION_KEY sem recriptografia torna os campos antigos ilegíveis. Planeje migração de segredos com versões e backup. Somente o operador gerencia a credencial global FOUR_P_API_KEY; trocá-la não concede autorização da operadora nem ativa pagamentos.

Estabeleça alertas externos, objetivos de recuperação, retenção de dados e restauração externa testada antes de operar financeiramente. Compose é uma base de implantação, não uma garantia de alta disponibilidade.

Documentação técnica do MagnumAPI v1

Buscar na documentação