Visão geral
O TermoStatus monitora a saúde dos apps da Termotubos. Ele verifica cada app a cada minuto e mostra, numa tela só, o status atual e o SLA (% de disponibilidade) de todos. Ao abrir um app aparece o histórico do ano, um quadradinho por dia, no estilo do GitHub.
O sistema tem duas metades, no padrão de projeto da Termotubos:
| Parte | Endereço em dev | O que faz |
|---|---|---|
| Frontend (SvelteKit) | http://localhost:51130 | A lista dos apps (/painel) e a página de cada app (/painel/<id>) |
| Backend (Rust + Axum) | http://localhost:51131 | A API, a sincronização dos apps com o TermoAuth e o monitor que verifica os apps |
| PostgreSQL (local) | localhost:5432 | Banco do app, no schema termostatus |
Telas
| Tela | Rota | O que mostra |
|---|---|---|
| Status dos apps | /painel | Todos os apps com o status atual, o SLA de 30 dias, o tempo de resposta e a última verificação. Atualiza sozinha a cada minuto |
| Página do app | /painel/<id> | Status atual, SLA de 7, 30, 90 e 365 dias, o mapa do ano (um quadradinho por dia) e as quedas. Clicar num dia mostra as quedas daquele dia |
De onde vêm os apps
Não existe cadastro de apps no TermoStatus: a lista é a do TermoAuth (GET /app). Como essa rota exige o token de quem está logado, o backend copia a lista para a tabela app quando alguém abre a tela, no máximo a cada 2 minutos. Com o token de um master vem a lista completa (todos=true), e um app que saiu do TermoAuth é marcado como excluído aqui também.
O endereço verificado é o endereco que o TermoAuth devolve, já resolvido para o ambiente dele (dev, sandbox ou produção). App sem endereço aparece como "Sem endereço" e não é verificado.
Como um app é verificado
- O monitor (
backend/controller/verificacao/monitorar.rs) roda em segundo plano desde que o backend sobe, a cadaINTERVALO_VERIFICACAO_SEGUNDOS(padrão 60). - Para cada app com endereço, faz um
GET(backend/integrations/monitoramento/), com tempo limite de 10 s e até 5 redirecionamentos. - Respondeu com HTTP abaixo de 400, o app está no ar; acima de 3 s de resposta, aparece como "Lento".
- O resultado vai para a tabela
verificacaoe soma emverificacao_diaria(um registro por app e por dia, no fuso de São Paulo).
| Status | Quando |
|---|---|
| Operacional | A última verificação respondeu em até 3 s |
| Lento | A última verificação respondeu, mas levou mais de 3 s |
| Fora do ar | A última verificação falhou (HTTP 400 ou mais, tempo esgotado ou sem conexão) |
| Aguardando verificação | O app ainda não foi verificado |
| Sem endereço | O TermoAuth não tem endereço do app neste ambiente |
SLA
O SLA é a porcentagem de verificações em que o app estava no ar: verificações online ÷ total de verificações no período. A lista mostra o de 30 dias; a página do app mostra 7, 30, 90 e 365 dias.
No mapa do ano, cada dia tem uma cor: 100%, 99% ou mais, 95% ou mais e menos de 95%, além de cinza para os dias sem verificação.
As quedas são as sequências de verificações seguidas com falha, com início, fim, quantidade de verificações e o último erro. Uma queda que ainda não terminou aparece como "Em andamento".
Acesso
O login é do TermoAuth (app termo-status): o frontend manda a pessoa para o /handoff do TermoAuth, recebe o JWT em /painel#token= e o envia em Authorization: Bearer a toda chamada. O backend valida o token offline pelo JWKS do TermoAuth e só deixa entrar e-mails @termotubos.com.br com cadastro ativo na tabela auth. Os colaboradores são sincronizados do TermoAuth e não têm tela própria. Não existe senha no TermoStatus.
Rodando localmente
| Serviço | Porta | Como subir |
|---|---|---|
| Frontend | 51130 | Configuração frontend do .claude/launch.json |
| Backend | 51131 | Configuração backend do .claude/launch.json |
| Documentação | 51132 | Configuração docs-projeto do .claude/launch.json |
| Diagrama do banco (ERD) | 51133 | Configuração database-erd do .claude/launch.json |
| Drizzle Studio | 51134 | Configuração database-studio do .claude/launch.json |
| PostgreSQL | 5432 | Serviço local do PostgreSQL; .claude/preparar-banco.sh cria o banco e aplica as migrations |
Para entrar em dev, o TermoAuth precisa estar rodando em localhost:51000 com o app termo-status cadastrado (endereço de dev http://localhost:51130, entrada em /painel).