Ir para o conteúdo

Fluxo: painel de gestão

SPA React (web/) consumindo a API do hub. Componentes shadcn/ui.

Arquitetura de informação

Sete destinos no menu (web/src/lib/navigation.ts). Filtros, agrupamentos e pivôs são modos dentro da tela, não destinos próprios.

Destino Rota O que mostra Modos (parâmetro)
Visão geral / Só o que pede ação: alertas ativos, SLOs violados ou com margem baixa, containers com problema, serviços HTTP acima de 1% de erro —
Problemas /problems Alertas ativos e insights, SLOs, histórico de eventos tab=now (padrão), tab=slos, tab=history
Containers /containers Recurso (CPU, memória) e estado (health, reinícios, OOM) de cada container view=grid (padrão) ou view=table, filter=unstable, panel=groups
Métricas /metrics Séries de um container ou comparação entre containers mode=container (padrão) ou mode=compare
Logs /logs Busca de linhas e padrões repetidos com os mesmos filtros mode=lines (padrão) ou mode=patterns
Traces /traces Traces recentes por serviço e período; waterfall do trace aberto trace_id abre o detalhe
Topologia /topology Dependências entre serviços inferidas dos logs —

A tela tem um único título (PageHeader), igual ao nome no menu. A barra do topo só tem o botão do menu. O primeiro elemento focável é o link "Pular para o conteúdo" (#main), e o menu fica num landmark nav com aria-label="Principal".

Estado na URL

Tudo o que muda o que está na tela fica na query string e sobrevive a recarregar ou compartilhar o link (web/src/hooks/use-query-state.ts). Valores iguais ao padrão são removidos da URL.

Parâmetro Telas Valores
since Métricas, Logs, Problemas, Traces, Topologia 15m, 1h, 6h, 24h
group Containers, Métricas, Logs, Problemas (Agora) id de workload-groups
container Métricas, Logs nome do container
service Métricas, Traces nome do serviço; em Métricas escolhe os containers do serviço
metric, containers, chart, stat Métricas (comparar) métrica do catálogo, lista separada por vírgula, area/line, avg/max
q, level, topic, trace_id Logs texto, nível, tópico, trace

Rotas antigas

Redirecionam para o modo equivalente e mantêm os parâmetros recebidos (web/src/components/layout/redirect.tsx).

Antes Depois
/workloads /containers
/fleet /containers?view=table
/groups /containers?panel=groups
/explorer /metrics?mode=compare
/patterns /logs?mode=patterns
/insights /problems
/slos /problems?tab=slos
/events /problems?tab=history

Mapa de navegação

flowchart LR
  Overview[Visão geral] --> Problems[Problemas]
  Overview --> Containers
  Overview --> Metrics[Métricas]
  Overview --> Logs
  Problems --> Metrics
  Problems --> Logs
  Problems --> Traces
  Containers --> Metrics
  Containers --> Logs
  Metrics --> Logs
  Metrics --> Traces
  Logs --> Traces
  Logs --> Metrics
  Traces --> Logs
  Topology[Topologia] --> Logs
  Topology --> Traces

Toda tela leva a pelo menos uma outra com o filtro aplicado.

Sequência — carregamento

sequenceDiagram
  participant Browser
  participant Web as nginx / Vite
  participant Hub

  Browser->>Web: GET /
  Web-->>Browser: SPA
  Browser->>Hub: GET /health
  Hub-->>Browser: ok
  Browser->>Hub: GET /api/v1/alerts/active, /slos/status, /fleet/status, /metrics/http/summary
  Hub-->>Browser: dados da Visão geral

Visão geral, Problemas, Containers e Logs (padrões) atualizam a cada 30 s; Logs (linhas) a cada 15 s.

Sequência — topologia

A tela carrega a topologia e o fleet, os workloads, o resumo HTTP e os alertas ativos que já existem. focus na URL seleciona um serviço. Um incidente futuro pode usar o mesmo parâmetro. O caminho mostra só quem chama a seleção e de quem ela depende (web/src/pages/topology.tsx).

sequenceDiagram
  participant Browser
  participant Hub

  Browser->>Hub: GET /api/v1/topology?since=24h
  Browser->>Hub: GET /api/v1/fleet/status
  Browser->>Hub: GET /api/v1/workloads?since=24h
  Browser->>Hub: GET /api/v1/metrics/http/summary?since=24h
  Browser->>Hub: GET /api/v1/alerts/active
  Hub-->>Browser: nós, arestas e o status que casar
  Browser->>Browser: ordena serviços e mostra o caminho selecionado

Sequência — grupos

A lista de grupos carrega com Containers. O painel (panel=groups) pede sugestões e grava com POST. Um grupo selecionado (group) filtra a grade pelo summary (web/src/pages/containers.tsx, web/src/views/groups-panel.tsx).

sequenceDiagram
  participant Browser
  participant Hub

  Browser->>Hub: GET /api/v1/workload-groups
  Hub-->>Browser: grupos salvos
  Browser->>Hub: GET /api/v1/workload-groups/discover
  Hub-->>Browser: sugestões stack/service
  Browser->>Hub: POST /api/v1/workload-groups
  Hub-->>Browser: 201 grupo
  Browser->>Hub: GET /api/v1/workload-groups/{id}/summary?since=30m
  Hub-->>Browser: members

Apagar um grupo é DELETE /api/v1/workload-groups/{id} (204).

Dev

Proxy Vite: /api e /health → hub (web/vite.config.ts).

Build produção: npm run build — artefatos servidos pelo container argus-web.

Referências

  • Layout: web/src/components/layout/
  • Telas: web/src/pages/; partes reutilizadas pelas telas: web/src/views/
  • Filtros: web/src/components/filters/
  • Métricas UI: web/src/components/metrics/
  • Mapa produto: ../map.md