v0.71.1
AFService Map v0.71.1 — Hotfix: laço de requisições
Backup/ponto de rollback: tag v0.71.0.
Hotfix urgente a partir de um report ao vivo em produção: ao abrir o
diálogo "Monitoramento SNMP" de um equipamento dentro de uma Torre, o
navegador entrou num laço de requisições — o DevTools mostrou cerca de
8900 chamadas em ~60 segundos pra /api/map/elements/<id>/container-layout-v3/,
todas falhando com net::ERR_INSUFFICIENT_RESOURCES (o navegador
esgotou o limite de conexões pendentes).
Causa
loadContainerLayout(), em static/js/map-optical-editor-v3.js, usa uma
variável de módulo (containerLayoutId) pra evitar buscar o layout do
mesmo elemento duas vezes. O problema: essa variável só é atualizada
depois que a requisição termina. Se a função for chamada de novo
antes da primeira resposta voltar, a segunda chamada ainda vê o valor
antigo, passa pela checagem, e dispara sua própria requisição — e assim
por diante enquanto o gatilho continuar disparando mais rápido que o
tempo de resposta da rede.
O gatilho, neste caso: static/js/map-link-monitoring.js (v0.71.0) reage
a mudanças no diálogo de Rack/Torre pra desenhar o botão "Monitoramento"
e colorir portas/equipamentos por status — e essas próprias mudanças no
DOM eram vistas pelo observador de mutação de OUTRO script
(map-optical-editor-v3.js), que então tentava recarregar o diagrama,
que por sua vez também mexia no DOM, retriggando o observador do
monitoramento — um laço de mutação alimentando os dois lados, rápido o
bastante pra estourar a checagem "já carregado" do jeito que ela estava
escrita.
Corrigido
loadContainerLayout()ganhou uma trava de "já em andamento",
marcada antes doawait(não depois), mais um intervalo mínimo de 1
segundo entre buscas reais. Isso fecha a janela de corrida por completo
— não importa quantas vezes a função for chamada nem o que estiver
disparando isso, só uma requisição por vez consegue passar.- Título da porta parou de crescer indefinidamente: cada redecoração
de status SNMP grudava mais um· SNMP UPem cima do título anterior
em vez de substituir. Corrigido pra guardar o título original uma vez
(dataset.monitorBaseTitle) e sempre remontar a partir dele. - Observador de mutação do monitoramento agora se desconecta antes de
mexer no DOM (inserir botão, colorir portas/equipamentos) e só volta
a observar depois — evita que ele reaja às próprias mudanças, cortando
metade do laço na origem.
Atualização
Execute apply no servidor. Sem migration nesta versão — só dois
arquivos JavaScript. Depois do apply, um Ctrl+F5 no navegador
garante que a versão nova do JS seja carregada (evita cache do arquivo
antigo, que é justamente o que estava travando).
Teste sugerido: abrir uma Torre/Rack, entrar em Equipamentos, clicar
"Monitoramento" num equipamento, e conferir no DevTools (aba Network)
que não há mais uma enxurrada de requisições repetidas — só uma
chamada a container-layout-v3 ao abrir a estrutura.