From d4ea8c0bcd792378489e15fd8acc3a1046b68f3f Mon Sep 17 00:00:00 2001 From: Ricardo Monla Date: Tue, 21 Apr 2026 08:30:32 -0300 Subject: [PATCH] =?UTF-8?q?fix(dron):=20corregir=20=C3=A1mbito/nodo=20de?= =?UTF-8?q?=20registro=20en=20bit=C3=A1cora=20para=20pipeline=20DASUTEN?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- adn/tools/bkps/lib/proc_dasuten.rb | 14 ++++++++++---- adn/tools/cli/dron/ejecutor.rb | 16 +++++++++++++--- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/adn/tools/bkps/lib/proc_dasuten.rb b/adn/tools/bkps/lib/proc_dasuten.rb index 0b72d8ba..171f0d44 100644 --- a/adn/tools/bkps/lib/proc_dasuten.rb +++ b/adn/tools/bkps/lib/proc_dasuten.rb @@ -16,6 +16,11 @@ module ADN '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 = { 'dasuten_export_full' => 'dasuten_exportar_srvv-fenix.rb', 'dasuten_export_dif' => 'dasuten_exportar_diferencial_srvv-fenix.rb', @@ -48,12 +53,13 @@ module ADN return false end - nodo = tarea[:nodo] || detectar_nodo(tarea[:id]) - nota = tarea[:texto] || "DASUTEN: #{tarea[:id]}" - ambito = tarea[:ambito] || 'dtic-DASUTEN' + nota = tarea[:texto] || "DASUTEN: #{tarea[:id]}" + nodo_bitacora = NODO_BITACORA # Registro lógico en bitácora + ambito_bitacora = AMBITO_BITACORA # Ámbito de registro en bitácora # 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.debug("Comando: #{cmd}") diff --git a/adn/tools/cli/dron/ejecutor.rb b/adn/tools/cli/dron/ejecutor.rb index 960cb4ac..fae4fd3f 100644 --- a/adn/tools/cli/dron/ejecutor.rb +++ b/adn/tools/cli/dron/ejecutor.rb @@ -295,13 +295,23 @@ module Dron return nodo if nodo.is_a?(Integer) 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 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 - 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