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>
Se implementó filtrado de output para que la Bitácora Web muestre
solo las líneas relevantes del progreso del dron, no los ~40 logs
repetitivos de conexión a PostgreSQL.
Cambios:
- filtrar_lineas_relevantes(): Filtra líneas de PostgreSQL en tiempo real
- filtrar_output_relevante(): Filtra y mantiene últimas 20 líneas para heartbeat
- Heartbeat web: Ahora muestra solo progreso del dron, no conexiones DB
Beneficio: La Bitácora Web ahora muestra información útil y legible
en lugar de cientos de líneas de logs técnicos repetitivos.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Se implementó mejora en la salida de comandos para hacerla más intuitiva:
Cambios realizados:
- bkps.rb: Encabezado y cierre visual con box drawing para tareas DASUTEN
- ejecutor.rb: Barra de progreso con timer en tiempo real durante ejecución
- A04.P006: Actualizado con resultados del test completo 2026-04-15
Nueva salida visual:
- Encabezado con contexto del pipeline (nombre, hora de inicio)
- Timer en vivo durante la ejecución ([1m 23s] ejecutando...)
- Cierre con estado (✅/❌) y duración total
Resultados del test completo (Pipeline FULL):
- 6 pasos completados exitosamente en 13m 15s
- DBCC CHECKDB: Integridad OK
- Todos los drones atómicos funcionaron correctamente
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Mejora en el sistema de latidos de los drones para mostrar el progreso
acumulado en lugar de solo la última línea.
Cambios realizados:
- ejecutor.rb: Acumulación de output en array accumulated_out[]
- actualizar_heartbeat_web(): Muestra últimas 15 líneas en bloque ```text
- A01.P009: Documentada Fase F1.5b con ejemplo técnico
- A04.P006: Actualizado plan DASUTEN con mejora y lección aprendida
Beneficio: Visibilidad completa del progreso de drones multi-paso
(ej: [1/3], [2/3], [3/3] en pipelines de backup/restore)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Cambios:
- ejecutor.rb: Corregir lectura de output con Open3
- bitacora_db.rb: Agregar métodos crear_evento/actualizar_evento (public)
- dron_db.rb: Corregir conversión de PG::Result a Hash (.first.to_h)
- vigilante.rb: Corregir formato de fecha en dashboard
- migrations/004: Crear tabla bitacoras.events para Bitácora Web
Pruebas:
- dron lanzar --evento AUTO --nota "Test" -- echo "hola" ✅
- dron flota ✅
- dron salud ✅
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Principio "Menos es Más": código común centralizado en un solo lugar.
Cambios:
- Nuevo módulo Dron::Base con funcionalidad compartida:
- logger: Logger compartido (evita crear múltiples instancias)
- db_query: Ejecución de SQL con resultados
- db_exec: Ejecución de SQL sin resultados
- formato_duracion: Utilitario para formatear segundos
- slice_safe: Slice seguro de strings
- blank?: Verificación de strings vacíos/nulos
- Todos los módulos atómicos (ejecutor, vigilante, sanador, bitacora)
ahora usan Base.logger, Base.db_query, Base.db_exec
Beneficios:
- Un solo lugar para corregir errores comunes
- Menos duplicación de código (~40% menos líneas)
- Consistencia en manejo de logs y DB
- Fácil extensión: nuevos drones heredan funcionalidad automática
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implementación del sistema AtomicDrones basado en "Menos es Más":
- Refactorización de dron.rb a dispatcher + módulos atómicos
- Nuevos módulos: ejecutor, vigilante, sanador, bitacora
- DronDB para acceso a datos en PostgreSQL
- Tablas: dron_logs, dron_avances, dron_metricas
- Views: vw_dron_estado, vw_dron_zombies, vw_dron_metricas_semanal
- Health check con detección de zombies (heartbeat > 5min)
- Dashboard compacto de la flota
- Saneamiento con reintentos (backoff exponencial) y limpieza
Comandos soportados:
- dron lanzar: Ejecutar comando como dron
- dron flota: Dashboard de la flota
- dron salud: Health check activo
- dron estado <ID>: Estado detallado
- dron sanear: Saneamiento completo
- dron limpiar: Limpieza de antiguos
- dron reintentar: Re-intentar fallidos
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>