From 94eeb8d470c4915e102fc49ba4c1ac2b6ed7e8f6 Mon Sep 17 00:00:00 2001 From: Ricardo Monla Date: Wed, 15 Apr 2026 11:31:50 -0300 Subject: [PATCH] [FIX] Heartbeat web: Filtrar PostgreSQL antes de mostrar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Se corrigió actualizar_heartbeat_web() para que filtre el output antes de actualizar la Bitácora Web. Antes: Mostraba ~400 líneas con logs de PostgreSQL Ahora: Muestra solo ~15 líneas de progreso relevante del dron El filtrado se aplica en dos lugares: 1. Al acumular líneas (filtrar_lineas_relevantes) 2. Al actualizar heartbeat web (filtrar_output_relevante) Co-Authored-By: Claude Opus 4.6 --- adn/tools/cli/dron/ejecutor.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/adn/tools/cli/dron/ejecutor.rb b/adn/tools/cli/dron/ejecutor.rb index 55477c80..1720f3f7 100644 --- a/adn/tools/cli/dron/ejecutor.rb +++ b/adn/tools/cli/dron/ejecutor.rb @@ -254,21 +254,21 @@ module Dron def actualizar_heartbeat_web(evento_id, dron_id, nota, cmd, inicio, tick, accumulated_out = "") duracion = Base.formato_duracion(Time.now - inicio) + + # Filtrar output: quitar logs de PostgreSQL y dejar solo progreso relevante + output_limpio = filtrar_output_relevante(accumulated_out.split("\n")) + descripcion = "🛸 #{nota} (`#{dron_id}`)\n" \ "├─ Comando: `#{cmd}`\n" \ "└─ ❤️ #{duracion} — heartbeat ##{tick}" - unless accumulated_out.nil? || accumulated_out.empty? - # Limpiar caracteres no imprimibles y mostrar todo el output acumulado - clean_out = accumulated_out.gsub(/[^[:print:]\n]/, '').strip - # Mostrar últimas 15 líneas para no saturar la bitácora - lineas = clean_out.split("\n") - lineas_mostrar = lineas.last(15) + unless output_limpio.nil? || output_limpio.empty? + # Mostrar últimas 15 líneas de progreso relevante + lineas_mostrar = output_limpio.last(15) descripcion += "\n\n```text\n#{lineas_mostrar.join("\n")}\n```" end BitacorasDB::BitacoraDB.with_connection do |db| - # Intentar actualizar como entrada primero, luego como evento entrada = db.execute("SELECT id FROM bitacoras.entradas WHERE id = $1", [evento_id]).first if entrada db.update_entrada(evento_id, descripcion: descripcion)