Skip to content

Remove agent usage records left behind when their collector goes away - #10911

Open
Daniluvatar wants to merge 1 commit into
omacom:quattrofrom
Daniluvatar:remove-orphan-agent-usage-records
Open

Remove agent usage records left behind when their collector goes away#10911
Daniluvatar wants to merge 1 commit into
omacom:quattrofrom
Daniluvatar:remove-orphan-agent-usage-records

Conversation

@Daniluvatar

Copy link
Copy Markdown

Problema

O painel de agentes lista todos os arquivos .json do diretório de uso, sem checar se ainda existe coletor para aquele agente. Quando um coletor vai embora (plugin desinstalado, agente renomeado, etc.), o registro antigo continua aparecendo no painel — como um fantasma — para sempre.

É o que aconteceu, por exemplo, com antigos plugins que escreviam copilot.json: mesmo depois da remediação do plugin, a linha "copilot" continuava visível no bar.

Correção (em duas camadas)

  1. Migração (migrations/1788919234.sh) — limpa os órfãos já existentes em instalações atuais. Como migrações rodam na omarchy update/login, todos os usuários passam por ela uma vez.

  2. GC no orquestrador (bin/omarchy-agent-usage-update) — na primeira coleta de cada dia, apaga registros órfãos, previne o acúmulo futuro e também cobre quem está atrasado nas migrações.

Regra de segurança

Um registro só é apagado quando ambas condições valem:

  • nenhum coletor instalado produz esse agente (procura em bin/ padrão, plugins/*/scripts/ e plugins/*/bin/, e um wrapper do próprio orquestrador não conta como coletor), e
  • o arquivo não foi gravado nos últimos 7 dias.

Agentes que ainda estão ativos — inclusive plugins que escrevem o JSON sem coletor próprio — não são tocados nunca: sua gravação recente os protege.

Testes

  • 6 novos testes de GC em test/shell.d/agent-usage-update-test.sh (mantém agente vivo, preserva registro recente de coletor ausente, apaga órfão antigo, não conta wrapper como coletor, preserva coletor de plugin);
  • novo test/shell.d/agent-usage-orphan-migration-test.sh com 6 testes (remota órfão, não remota agente vivo, não conta wrapper, preserva registro recente, reporta o que remove, idempotência);
  • ./test/all roda limpo para todos os testes relacionados (as 5 falhas restantes em shell.d — config, locate, runtime-smoke, snapper, unowned-system-paths — falham idênticas na árvore limpa, por falta de checkout de omarchy-pkgs/ambiente, não por esta mudança).

The agents panel lists every file in the usage directory, so a record
written by a collector that is no longer installed keeps showing up
forever even after the plugin is removed.

The orchestrator now prunes such records on every run, and a migration
clears the ones already left behind. A record only disappears when no
installed collector produces it and it has not been written to for seven
days, so plugins that write fresh data without a collector of their own
are not disturbed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants