fix(dron): Ejecutor funcional + tabla events

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>
This commit is contained in:
Ricardo Monla
2026-04-07 12:34:20 -03:00
co-authored by Claude Opus 4.6
parent 3d2a988951
commit be3a78c50a
5 changed files with 156 additions and 48 deletions
+5 -5
View File
@@ -56,7 +56,7 @@ module ADN
dron_id = generar_dron_id
params = [dron_id, tipo, ESTADOS[:running], cmd, flujo_id, metadata.to_json]
resultado = BitacorasDB::BitacoraDB.with_connection { |db| db.execute(sql, params) }
resultado = BitacorasDB::BitacoraDB.with_connection { |db| db.execute(sql, params) }.first.to_h
# Actualizar heartbeat inicial
actualizar_heartbeat(dron_id)
@@ -88,7 +88,7 @@ module ADN
RETURNING *
SQL
resultado = BitacorasDB::BitacoraDB.with_connection { |db| db.execute(sql, [estado, exit_code, output, dron_id]) }
resultado = BitacorasDB::BitacoraDB.with_connection { |db| db.execute(sql, [estado, exit_code, output, dron_id]) }.first.to_h
# Actualizar métricas diarias
actualizar_metricas(dron_id, estado)
@@ -118,7 +118,7 @@ module ADN
# @return [Hash, nil] Datos del dron o nil si no existe
def obtener_dron(dron_id)
sql = 'SELECT * FROM bitacoras.dron_logs WHERE dron_id = $1'
resultado = BitacorasDB::BitacoraDB.with_connection { |db| db.execute(sql, [dron_id]) }
resultado = BitacorasDB::BitacoraDB.with_connection { |db| db.execute(sql, [dron_id]) }.first.to_h
resultado.first
end
@@ -176,7 +176,7 @@ module ADN
RETURNING reintentos
SQL
resultado = BitacorasDB::BitacoraDB.with_connection { |db| db.execute(sql, [dron_id]) }
resultado = BitacorasDB::BitacoraDB.with_connection { |db| db.execute(sql, [dron_id]) }.first.to_h
resultado.first['reintentos'].to_i
end
@@ -229,7 +229,7 @@ module ADN
# @return [Hash, nil] Métricas o nil si no existen
def obtener_metricas(fecha:, tipo:)
sql = 'SELECT * FROM bitacoras.dron_metricas WHERE fecha = $1 AND dron_tipo = $2'
resultado = BitacorasDB::BitacoraDB.with_connection { |db| db.execute(sql, [fecha, tipo]) }
resultado = BitacorasDB::BitacoraDB.with_connection { |db| db.execute(sql, [fecha, tipo]) }.first.to_h
resultado.first
end