[MEJORA] Salida visual mejorada para pipelines DASUTEN
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>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
4a0cdd883e
commit
db86f86e59
@@ -12,6 +12,7 @@
|
||||
|
||||
require_relative 'base'
|
||||
require_relative '../../db/core/dron_db'
|
||||
require_relative '../../core/colores'
|
||||
require 'open3'
|
||||
require 'timeout'
|
||||
require 'time'
|
||||
@@ -81,19 +82,36 @@ module Dron
|
||||
last_out = ""
|
||||
accumulated_out = [] # Acumular todas las líneas de output para el heartbeat
|
||||
exit_code = nil
|
||||
progreso_visible = !ENV['BATCH_MODE'] # Solo mostrar progreso si no es batch
|
||||
|
||||
# Mostrar encabezado de progreso
|
||||
if progreso_visible
|
||||
puts "\n#{Color::BOLD}#{Color::CYAN}⏳ Ejecutando...#{Color::RESET}"
|
||||
print " ["
|
||||
$stdout.flush
|
||||
end
|
||||
|
||||
heartbeat_thread = Thread.new do
|
||||
tick = 0
|
||||
start = Time.now
|
||||
loop do
|
||||
sleep(HEARTBEAT_INTERVAL)
|
||||
tick += 1
|
||||
elapsed = (Time.now - start).to_i
|
||||
|
||||
# Actualizar tabla interna (dron_logs.heartbeat)
|
||||
ADN::DB::DronDB.actualizar_heartbeat(dron_id)
|
||||
|
||||
# Actualizar Bitácora Web (events.descripcion) — VISIBLE para el usuario
|
||||
# Pasamos el output acumulado para mostrar todo el progreso
|
||||
actualizar_heartbeat_web(evento_id, dron_id, nota, cmd, inicio, tick, accumulated_out.join("\n")) if evento_id
|
||||
|
||||
# Actualizar barra de progreso local
|
||||
if progreso_visible
|
||||
mins = elapsed / 60
|
||||
segs = elapsed % 60
|
||||
print "\r [#{Color::CYAN}#{mins}m #{segs}s#{Color::RESET}] ejecutando..."
|
||||
$stdout.flush
|
||||
end
|
||||
rescue StandardError => e
|
||||
Base.logger.warn("⚠️ Error en heartbeat ##{tick}: #{e.message}")
|
||||
end
|
||||
@@ -129,6 +147,13 @@ module Dron
|
||||
heartbeat_thread.exit
|
||||
end
|
||||
|
||||
# Finalizar barra de progreso
|
||||
if progreso_visible
|
||||
estado = exit_code == 0 ? "#{Color::GREEN}✅#{Color::RESET}" : "#{Color::RED}❌#{Color::RESET}"
|
||||
print "\r #{estado} "
|
||||
puts "#{Color::BOLD}Completado en #{Base.formato_duracion(Time.now - start_time)}#{Color::RESET}"
|
||||
end
|
||||
|
||||
raw_output = output.join("\n").strip
|
||||
safe_output = raw_output.dup.force_encoding('UTF-8').scrub('?')
|
||||
{ exit_code: exit_code || 1, output: safe_output, duration: (Time.now - start_time).round(2) }
|
||||
|
||||
Reference in New Issue
Block a user