fix(dron): corregir ámbito/nodo de registro en bitácora para pipeline DASUTEN

Bug 2 — proc_dasuten.rb:
- Separa nodo operacional (srvv-fenix, srv-ns8, etc.) del nodo de bitácora
- Registro siempre bajo nodo=dtic-BKPs / ámbito=dtic-DIIAA
- Agrega constantes NODO_BITACORA y AMBITO_BITACORA

Bug 3 — ejecutor.rb (detectar_nodo_id):
- Ignoraba el parámetro 'nodo' y siempre usaba Socket.gethostname
- Fix: usa el nombre pasado para lookup en DB
- Fallback a hostname local solo si nodo es nil/empty o no existe en DB
- Segundo fallback a hostname si el nodo pasado tampoco existe en DB

DB: creado nodo 'dtic-BKPs' (ID:49, tipo:servicio, ámbito:dtic-DIIAA)

Refs: A04.P006 — Pipeline DASUTEN / A03 BKPs
This commit is contained in:
Ricardo Monla
2026-04-21 08:30:32 -03:00
parent a6ed2ca771
commit d4ea8c0bcd
2 changed files with 23 additions and 7 deletions
+10 -4
View File
@@ -16,6 +16,11 @@ module ADN
'cli', 'drones' 'cli', 'drones'
) )
# Nodo y ámbito de REGISTRO en bitácora (lógico, no operacional)
# El nodo operacional (srvv-fenix, srv-ns8, etc.) es interno al dron
NODO_BITACORA = 'dtic-BKPs'.freeze
AMBITO_BITACORA = 'dtic-DIIAA'.freeze
SCRIPTS = { SCRIPTS = {
'dasuten_export_full' => 'dasuten_exportar_srvv-fenix.rb', 'dasuten_export_full' => 'dasuten_exportar_srvv-fenix.rb',
'dasuten_export_dif' => 'dasuten_exportar_diferencial_srvv-fenix.rb', 'dasuten_export_dif' => 'dasuten_exportar_diferencial_srvv-fenix.rb',
@@ -48,12 +53,13 @@ module ADN
return false return false
end end
nodo = tarea[:nodo] || detectar_nodo(tarea[:id]) nota = tarea[:texto] || "DASUTEN: #{tarea[:id]}"
nota = tarea[:texto] || "DASUTEN: #{tarea[:id]}" nodo_bitacora = NODO_BITACORA # Registro lógico en bitácora
ambito = tarea[:ambito] || 'dtic-DASUTEN' ambito_bitacora = AMBITO_BITACORA # Ámbito de registro en bitácora
# Lanzar dron con bitácora automática # Lanzar dron con bitácora automática
cmd = "#{@dron_runner} dron lanzar --nota #{Shellwords.escape(nota)} --nodo #{Shellwords.escape(nodo)} --ambito #{Shellwords.escape(ambito)} -- ruby #{script_path}" # --nodo y --ambito son para REGISTRO en bitácora, no el nodo operacional
cmd = "#{@dron_runner} dron lanzar --nota #{Shellwords.escape(nota)} --nodo #{Shellwords.escape(nodo_bitacora)} --ambito #{Shellwords.escape(ambito_bitacora)} -- ruby #{script_path}"
@logger.info("Ejecutando dron: #{nota}") @logger.info("Ejecutando dron: #{nota}")
@logger.debug("Comando: #{cmd}") @logger.debug("Comando: #{cmd}")
+13 -3
View File
@@ -295,13 +295,23 @@ module Dron
return nodo if nodo.is_a?(Integer) return nodo if nodo.is_a?(Integer)
require 'socket' require 'socket'
hostname = Socket.gethostname.downcase
# Usar el nodo pasado como parámetro; fallback al hostname local si es nil/empty
nombre_buscar = nodo.to_s.strip.downcase
if nombre_buscar.empty?
nombre_buscar = Socket.gethostname.downcase
end
resultado = nil resultado = nil
BitacorasDB::BitacoraDB.with_connection do |db| BitacorasDB::BitacoraDB.with_connection do |db|
resultado = db.execute('SELECT id FROM nodos WHERE LOWER(nombre) = $1 LIMIT 1', [hostname]) resultado = db.execute('SELECT id FROM nodos WHERE LOWER(nombre) = $1 LIMIT 1', [nombre_buscar])
if resultado.nil? || resultado.ntuples == 0 if resultado.nil? || resultado.ntuples == 0
resultado = db.execute('SELECT id FROM nodos WHERE LOWER(nombre) LIKE $1 LIMIT 1', ["#{hostname}%"]) resultado = db.execute('SELECT id FROM nodos WHERE LOWER(nombre) LIKE $1 LIMIT 1', ["#{nombre_buscar}%"])
end
# Último fallback: hostname local si el nodo pasado no existe en DB
if (resultado.nil? || resultado.ntuples == 0) && nombre_buscar != Socket.gethostname.downcase
hostname = Socket.gethostname.downcase
resultado = db.execute('SELECT id FROM nodos WHERE LOWER(nombre) = $1 LIMIT 1', [hostname])
end end
end end