[FIX] Heartbeat web: Filtrar PostgreSQL antes de mostrar

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 <noreply@anthropic.com>
This commit is contained in:
Ricardo Monla
2026-04-15 11:31:50 -03:00
co-authored by Claude Opus 4.6
parent b7ff2e7183
commit 94eeb8d470
+7 -7
View File
@@ -254,21 +254,21 @@ module Dron
def actualizar_heartbeat_web(evento_id, dron_id, nota, cmd, inicio, tick, accumulated_out = "") def actualizar_heartbeat_web(evento_id, dron_id, nota, cmd, inicio, tick, accumulated_out = "")
duracion = Base.formato_duracion(Time.now - inicio) 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" \ descripcion = "🛸 #{nota} (`#{dron_id}`)\n" \
"├─ Comando: `#{cmd}`\n" \ "├─ Comando: `#{cmd}`\n" \
"└─ ❤️ #{duracion} — heartbeat ##{tick}" "└─ ❤️ #{duracion} — heartbeat ##{tick}"
unless accumulated_out.nil? || accumulated_out.empty? unless output_limpio.nil? || output_limpio.empty?
# Limpiar caracteres no imprimibles y mostrar todo el output acumulado # Mostrar últimas 15 líneas de progreso relevante
clean_out = accumulated_out.gsub(/[^[:print:]\n]/, '').strip lineas_mostrar = output_limpio.last(15)
# Mostrar últimas 15 líneas para no saturar la bitácora
lineas = clean_out.split("\n")
lineas_mostrar = lineas.last(15)
descripcion += "\n\n```text\n#{lineas_mostrar.join("\n")}\n```" descripcion += "\n\n```text\n#{lineas_mostrar.join("\n")}\n```"
end end
BitacorasDB::BitacoraDB.with_connection do |db| 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 entrada = db.execute("SELECT id FROM bitacoras.entradas WHERE id = $1", [evento_id]).first
if entrada if entrada
db.update_entrada(evento_id, descripcion: descripcion) db.update_entrada(evento_id, descripcion: descripcion)