Runbook — Presença e WebSocket
Sintomas
GET /api/v1/presence/active-usersvazio com utilizadores “online” no CRM- Front admin sem eventos em
admin:observer - Socket recusado no handshake
- Contagens divergentes entre pods
Causas frequentes
- JWT do
default-crmassinado com outroJWT_SECRETque o CentralCRM. - Handshake sem
{ token: "<JWT>" }no namespace/presence. - Falta
tenantIdno token (e semx-tenant-idnas rotas REST). - Admin não entra na sala
admin:observer(claimrole: admin). - Várias réplicas da API: o mapa é in-process (ADR 0003). Cada pod tem o seu conjunto de sockets.
Mitigação
- Uma réplica de presença ou sticky sessions no load balancer para
/socket.ioaté existir adapter Redis. - Reinício do pod zera sessões — esperado; clientes reconectam.
- Confirmar CORS e
allowedHeaders(Authorization,x-tenant-id) se o cliente REST e o socket partilham origem.
Fluxo end-to-end: arquitetura/entendimento.md.