# Changelog Formato baseado em [Keep a Changelog](https://keepachangelog.com/). ## [Unreleased] ### Added - Metric summaries offer p85, p90, and p95 next to average and peak, in the container view and in the comparison chart. The choice stays in the URL (`stat=p95`) ## [0.6.1] - 2026-10-14 The `v0.6.0` tag was never published as a release because its vulnerability scan failed. This is the first release of the 0.6 line and also ships everything listed under [0.6.0]. ### Fixed - The workloads list reads a `workload_latest` table kept in the same transaction as metric writes, instead of scanning every metric point in the window. Containers and Topology no longer wait seconds for it - Repeated log patterns keep their newest sample. The upsert referenced an ambiguous `sample` column on Postgres - The agent strips terminal color codes from log lines and trusts a declared level (JSON `level`/`severity`, pino numbers, logfmt `level=`) before guessing from words, so `trace_id` no longer turns an info line into debug - Opening a trace honors the selected range and shows an error with a retry instead of an empty trace - The time range control never shows a preset and Custom pressed at the same time, and closes the custom form when the range changes elsewhere ### Changed - Insight, alert, metric catalog, and default SLO text from the hub is in English. The panel still translates alert titles and values - Topology renders as soon as the graph arrives, keeps working when fleet, workload, HTTP, or alert data fails, and hides raw IP addresses and container ids behind a toggle - Container cards draw sparklines as plain SVG, and the table view does not fetch series, so the page no longer blocks on each refresh - Status is never shown by color alone: meters, stat cards, badges, and failed spans carry a text label, and warning text uses a darker amber - Buttons, tabs, inputs, selects, links in lists, and sidebar items reach 44 px on touch screens - Load errors use `role="alert"`, say what to check, and offer a retry - Numbers, durations, and dates follow the panel language. The first visit picks Portuguese or English from the browser - Logs, traces, and problems copy is translated, including the trace banner, level and topic labels, and the trace ID field - Dependency updates: `pgx/v5`, the web npm group, and the web base images ## [0.6.0] - 2026-10-07 ### Added - Python, Node.js, and Java transports that POST spans to the hub as OTLP JSON, with `traceparent` and `X-Correlation-Id` ### Security - Query routes require the same Bearer token as ingest when `ARGUS_AGENT_TOKEN` is set. The panel proxy adds that header. `/health` stays open - Bump `golang.org/x/text` to v0.41.0 (GO-2026-6629) ### Changed - The agent retries a hub POST on 429, 5xx, and connection or timeout errors, with jittered exponential backoff capped at 8s. 401, 403, and other 4xx fail immediately - After those retries a telemetry batch is stored on disk and replayed, oldest first, before a newer batch. A permanent 4xx during replay drops that batch. A corrupt file is skipped - Each telemetry batch carries one `X-Argus-Batch-Id` from the first attempt through replay. The hub records that id in the same transaction as the write, so a lost response does not store the batch twice - Topology opens on the services that need attention and shows only the selected path, using fleet, workload, HTTP summary, and active alerts that already exist - Log search, events, and traces return a page (`entries`, `total`, `limit`, `offset`) instead of a silent cap. The panel pages those tables, and the containers chart states that it is the busiest slice of the same filtered list the table pages - The containers CPU chart averages each minute. A single scrape was being drawn as the whole minute, so the stack and the tooltip showed a spike instead of the minute - Charts use the same time-range control as logs, including a start and an end of at most 24 hours ## [0.5.0] - 2026-10-06 ### Breaking - The embedded SQLite store is gone. The hub requires `ARGUS_STORE_DSN` (Postgres). Existing SQLite files are not migrated ### Added - Optional kernel collector (`ARGUS_EBPF=1`) reports L4 dependencies, connection counts, and retransmits. Log-derived HTTP stays when the collector cannot load - Fleet status records why a container is down (`disposition`: intentional stop, unexpected exit, or out of memory), and Problems lists those stops apart from failures ### Changed - Hub persistence is a driver selected with `ARGUS_STORE_DRIVER` (Postgres when unset). Additional drivers, including document stores, register on the same interface ### Fixed - Hub dependencies pick up the fixed `pgx` and `golang.org/x/text` releases so the vulnerability scan can pass - The web image refreshes Alpine packages on each CI build, so a cached layer cannot keep an old `pcre2` - Release workflow grants `security-events: write` to the reusable CI so Trivy can upload SARIF ## [0.4.0] - 2026-10-01 ### Added - CI: `govulncheck` and production `npm audit` on PRs, pushes, and a weekly schedule (#39) - CI: Trivy on hub/agent/web images (SARIF; release scans before push), gitleaks on PR diffs, CodeQL for Go and JavaScript/TypeScript (#40) - CI: compose smoke after docker builds, covering the post-deploy checklist (#38) - Panel unit tests with Vitest and Testing Library; CI runs `npm test -- --run` (#37) - Go tests for hub HTTP ingest/queries and for `rules`, `slo`, `topology`, `groups`, and `bus`; CI runs `go test -race` and publishes coverage (#36) - Panel and docs in English by default, with Portuguese (`pt-BR` / `pt`) as a first-class locale; locale switcher persists in `localStorage` (#54) - Docs site: dedicated landing page, Material theme aligned with the panel, scrollable tables - Docs sidebar: nested pages indent under section titles, hairline between categories - Dependabot weekly grouped updates for GitHub Actions, Go modules, npm (`web/`), and the web image (#33) - `SECURITY.md`, issue templates (bug, feature, docs) and pull request template - Hub: concurrent ingest limit (`ARGUS_INGEST_CONCURRENCY`, `ARGUS_INGEST_WAIT`, `ARGUS_MAX_BODY_BYTES`); bounded queue for pattern/topology batches - `argus-web` listens on `8081` only for ingest POSTs and `/health`, so agents on other hosts do not need the hub GET routes exposed - Purge also removes `log_patterns` and `topology_edges` using log and metric retention ### Changed - `argus-web` runtime image runs `apk upgrade` so Alpine packages in `nginx:1.30-alpine` pick up fixable HIGH/CRITICAL patches (#40) - Pages **build site** check runs on every PR so it can be required on `main` (#33) - Contributor docs: commits, PR text, new CHANGELOG entries, canonical docs, and API identifiers are English; Portuguese files are translations only - Issue chooser requires a form (bug, feature, docs, or task); pull request template has Why, What changes, How to validate, and a checklist - SQLite em WAL, com escritor único e pool de leitura: consultas do painel não bloqueiam a ingestão - Compose: retenção de logs `72h`, métricas `168h`, purge a cada `10m` com timeout `30s`; `GOMEMLIMIT` no hub ### Fixed - CI smoke retries hub and panel probes so a connection reset right after `compose up` does not fail the job - Escritas do hub falhavam com `context deadline exceeded` quando o SQLite estava grande e uma única conexão serializava leitura e ingestão ## [0.3.0] - 2026-09-29 ### Added - `GET /api/v1/traces`: traces recentes de spans OTLP e de logs com `trace_id`, com filtro por serviço e período (#48) - `GET /api/v1/logs/patterns` aceita `container`, `group` e `q` (#48) - Painel: lista de traces por serviço e período, link "Pular para o conteúdo" e menu num landmark `nav` (#48) ### Changed - Referência da API e fluxos alinhados aos handlers: variáveis de `.env.example`, esquemas de topologia, alertas e SLO, e ingest de fleet, eventos e OTLP (#50) - Painel com 7 destinos em vez de 13: Visão geral, Problemas, Containers, Métricas, Logs, Traces e Topologia. Workloads, Fleet e Grupos viram Containers; Explorer vira o modo Comparar de Métricas; Patterns vira o modo Padrões de Logs; Eventos, Insights e SLOs viram abas de Problemas. As rotas antigas redirecionam mantendo os parâmetros (#48) - Visão geral mostra só o que pede ação: alertas ativos, SLOs em risco, containers com problema e serviços HTTP com erro (#48) - Modo, aba, grade ou tabela, tipo de gráfico e containers comparados ficam na URL (#48) - Um único título por tela, igual ao nome no menu; sem rótulos em caixa alta nem metadados unidos por `·` (#48) - CI roda `go`, `web` e o build de cada imagem só quando hub, agent ou web mudam no diff; tags e mudanças no próprio CI rodam tudo (#45) - `CONTRIBUTING.md`: comandos locais do painel iguais aos do CI (`npm run lint`) e versão do Node - READMEs das imagens no Docker Hub: tags `vX.Y.Z` e `X`, imagem base, espelho no GHCR e variáveis de purge (hub) e de intervalo/filtro (agent) ### Fixed - Docs de configuração: `ARGUS_LOG_INTERVAL`, `ARGUS_FLEET_INTERVAL` e `ARGUS_NAME_PREFIX` do agent não estavam documentadas - Link de SLO para Métricas enviava `service`, que a tela ignorava; agora abre a comparação dos containers do serviço (#48) - Comparação de métricas HTTP não encontrava as séries, que chegam com o nome do serviço no lugar do container (#48) ## [0.2.1] - 2026-09-29 ### Changed - Go 1.27, Node 24 (LTS), Alpine 3.24, nginx 1.30 (stable) e Python 3.14 nos Dockerfiles e workflows (#41) - Runners fixados em `ubuntu-26.04` (LTS) e actions atualizadas para as majors atuais (#41) - `modernc.org/sqlite` 1.60 e demais dependencias Go; dependencias do web nas versoes minor/patch atuais (#43) ### Security - `undici` atualizado no web, corrigindo vulnerabilidade moderada apontada pelo `npm audit` (#43) ## [0.2.0] - 2026-09-29 ### Added - Workflow de release: imagens GHCR + GitHub Release a partir de tags semver - Compose `examples/compose-minimal/docker-compose.published.yml` (pull GHCR) - Runbook de atualização de stack em `docs/deploy.md` (pull GHCR ou build local, checklist pós-deploy, rollback) - Checklist semver e de publicação no `CONTRIBUTING.md` - Site de documentação no GitHub Pages (MkDocs), publicado a cada merge em `main` e a cada release - CI com job de lint do web e build dos três Dockerfiles - Imagens no Docker Hub (`pseudohuery/argus-{hub,agent,web}`) além do GHCR, com README e descrição sincronizados - Imagens multi-arch `linux/amd64` e `linux/arm64`, com SBOM, provenance e labels OCI; tags `X.Y` e `X` (a partir de `1.0`) - `ARGUS_REGISTRY` no compose publicado para escolher entre GHCR e Docker Hub ### Changed - CI em jobs paralelos (`anti-leak`, `go`, `web`, `docker`) com agregador `test` e cancelamento de execuções antigas do mesmo PR - Release valida tag, commit em `main` e seção do CHANGELOG antes de publicar; reutiliza o CI; imagens em paralelo com cache; tags `-rc` viram pre-release sem mover `latest` - CI usa Node 22, a mesma versão do `web/Dockerfile` ### Fixed - CI: `InferServiceFromContainer` para serviços compose com hífen (`demo-api`) - Gate anti-leak no workflow (#25) - Release: caminho do Dockerfile do web (`./web/Dockerfile`) no build da imagem - Docs de configuração: defaults reais de `ARGUS_STORE_PATH`, `ARGUS_HUB_URL`, `ARGUS_AGENT_ID` e `ARGUS_HOST_ID` ## [0.1.0] - 2026-09-04 ### Added - Hub (`argus-hub`) com API REST, ingest de métricas/logs/eventos/fleet e OTLP traces - Agent Docker com coleta de CPU, memória, rede e block I/O - Painel web (React + shadcn/ui): dashboard, workloads, métricas, explorer, logs, insights, patterns, topologia, traces, SLOs, eventos - Sidebar agrupada por domínio (Visão, Infraestrutura, Telemetria, Análise, Alertas) - Gráficos de infraestrutura: meters, sparklines, charts empilhados - Documentação pública: README, CONTRIBUTING, API reference, examples - CI GitHub Actions (Go test + build web) - Licença MIT ### Changed - Seeds e exemplos genéricos (`demo-api`) — sem referências a infra privada - Portas default do compose: hub `8080`, painel `3000` [0.6.1]: https://github.com/HarryRaddatz/argus-observability/releases/tag/v0.6.1 [0.6.0]: https://github.com/HarryRaddatz/argus-observability/compare/v0.5.0...v0.6.0 [0.5.0]: https://github.com/HarryRaddatz/argus-observability/releases/tag/v0.5.0 [0.4.0]: https://github.com/HarryRaddatz/argus-observability/releases/tag/v0.4.0 [0.3.0]: https://github.com/HarryRaddatz/argus-observability/releases/tag/v0.3.0 [0.2.1]: https://github.com/HarryRaddatz/argus-observability/releases/tag/v0.2.1 [0.2.0]: https://github.com/HarryRaddatz/argus-observability/releases/tag/v0.2.0 [0.1.0]: https://github.com/HarryRaddatz/argus-observability/releases/tag/v0.1.0