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:

ParteEndereço em devO que faz
Frontend (SvelteKit)http://localhost:51130A lista dos apps (/painel) e a página de cada app (/painel/<id>)
Backend (Rust + Axum)http://localhost:51131A API, a sincronização dos apps com o TermoAuth e o monitor que verifica os apps
PostgreSQL (local)localhost:5432Banco do app, no schema termostatus

Telas

TelaRotaO que mostra
Status dos apps/painelTodos 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

  1. O monitor (backend/controller/verificacao/monitorar.rs) roda em segundo plano desde que o backend sobe, a cada INTERVALO_VERIFICACAO_SEGUNDOS (padrão 60).
  2. Para cada app com endereço, faz um GET (backend/integrations/monitoramento/), com tempo limite de 10 s e até 5 redirecionamentos.
  3. Respondeu com HTTP abaixo de 400, o app está no ar; acima de 3 s de resposta, aparece como "Lento".
  4. O resultado vai para a tabela verificacao e soma em verificacao_diaria (um registro por app e por dia, no fuso de São Paulo).
StatusQuando
OperacionalA última verificação respondeu em até 3 s
LentoA última verificação respondeu, mas levou mais de 3 s
Fora do arA última verificação falhou (HTTP 400 ou mais, tempo esgotado ou sem conexão)
Aguardando verificaçãoO app ainda não foi verificado
Sem endereçoO 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çoPortaComo subir
Frontend51130Configuração frontend do .claude/launch.json
Backend51131Configuração backend do .claude/launch.json
Documentação51132Configuração docs-projeto do .claude/launch.json
Diagrama do banco (ERD)51133Configuração database-erd do .claude/launch.json
Drizzle Studio51134Configuração database-studio do .claude/launch.json
PostgreSQL5432Serviç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).

Atualizado em 2026/10/06 00:18