[bkps] Corregido namespace del procesador Dasuten (ADN::BKPs::Procesador)

This commit is contained in:
Ricardo Monla
2026-04-14 22:22:47 -03:00
parent 294208b81a
commit aad78e52f0
+72 -70
View File
@@ -7,86 +7,88 @@
# Integra pipeline de backups en bkps.rb # Integra pipeline de backups en bkps.rb
# ========================================================== # ==========================================================
module BKPs module ADN
module Procesador module BKPs
class Dasuten module Procesador
DRONES_DIR = File.join( class Dasuten
File.dirname(File.dirname(File.expand_path(__FILE__))), DRONES_DIR = File.join(
'cli', 'drones' File.dirname(File.dirname(File.expand_path(__FILE__))),
) 'cli', 'drones'
SCRIPTS = {
'dasuten_export_full' => 'dasuten_exportar_srvv-fenix.rb',
'dasuten_export_dif' => 'dasuten_exportar_diferencial_srvv-fenix.rb',
'dasuten_transferir' => 'dasuten_transferir_srvv-fenix-srv-ns8.rb',
'dasuten_upload' => 'dasuten_upload_srv-ns8-drive.rb',
'dasuten_download' => 'dasuten_download_drive-dasu-sql4.rb',
'dasuten_restaurar_full' => 'dasuten_restaurar_dasu-sql4.rb',
'dasuten_restaurar_dif' => 'dasuten_restaurar_diferencial_dasu-sql4.rb',
'dasuten_verificar' => 'dasuten_verificar-integridad_dasu-sql4.rb',
}.freeze
def initialize(logger)
@logger = logger
@dron_runner = File.join(
File.dirname(File.dirname(File.dirname(File.dirname(DRONES_DIR)))),
'tools', 'run'
) )
end
def ejecutar(tarea) SCRIPTS = {
script_name = SCRIPTS[tarea[:id]] 'dasuten_export_full' => 'dasuten_exportar_srvv-fenix.rb',
unless script_name 'dasuten_export_dif' => 'dasuten_exportar_diferencial_srvv-fenix.rb',
@logger.error("Tarea DASUTEN desconocida: #{tarea[:id]}") 'dasuten_transferir' => 'dasuten_transferir_srvv-fenix-srv-ns8.rb',
return false 'dasuten_upload' => 'dasuten_upload_srv-ns8-drive.rb',
'dasuten_download' => 'dasuten_download_drive-dasu-sql4.rb',
'dasuten_restaurar_full' => 'dasuten_restaurar_dasu-sql4.rb',
'dasuten_restaurar_dif' => 'dasuten_restaurar_diferencial_dasu-sql4.rb',
'dasuten_verificar' => 'dasuten_verificar-integridad_dasu-sql4.rb',
}.freeze
def initialize(logger)
@logger = logger
@dron_runner = File.join(
File.dirname(File.dirname(File.dirname(File.dirname(DRONES_DIR)))),
'tools', 'run'
)
end end
script_path = File.join(DRONES_DIR, script_name) def ejecutar(tarea)
unless File.exist?(script_path) script_name = SCRIPTS[tarea[:id]]
@logger.error("Script no encontrado: #{script_path}") unless script_name
return false @logger.error("Tarea DASUTEN desconocida: #{tarea[:id]}")
return false
end
script_path = File.join(DRONES_DIR, script_name)
unless File.exist?(script_path)
@logger.error("Script no encontrado: #{script_path}")
return false
end
nodo = tarea[:nodo] || detectar_nodo(tarea[:id])
nota = tarea[:texto] || "DASUTEN: #{tarea[:id]}"
# Lanzar dron con bitácora automática
cmd = "#{@dron_runner} dron lanzar --nota #{Shellwords.escape(nota)} --nodo #{Shellwords.escape(nodo)} -- ruby #{script_path}"
@logger.info("Ejecutando dron: #{nota}")
@logger.debug("Comando: #{cmd}")
exito = system(cmd)
codigo = $?.exitstatus
if exito
@logger.info("✅ Dron completado (código: #{codigo})")
true
else
@logger.error("❌ Dron fallido (código: #{codigo})")
false
end
end end
nodo = tarea[:nodo] || detectar_nodo(tarea[:id]) # Para modo atómico (no aplica en DASUTEN - todos son pipelines)
nota = tarea[:texto] || "DASUTEN: #{tarea[:id]}" def ejecutar_uno(tarea, archivo)
@logger.warn("Modo atómico no soportado para DASUTEN")
# Lanzar dron con bitácora automática ejecutar(tarea)
cmd = "#{@dron_runner} dron lanzar --nota #{Shellwords.escape(nota)} --nodo #{Shellwords.escape(nodo)} -- ruby #{script_path}"
@logger.info("Ejecutando dron: #{nota}")
@logger.debug("Comando: #{cmd}")
exito = system(cmd)
codigo = $?.exitstatus
if exito
@logger.info("✅ Dron completado (código: #{codigo})")
true
else
@logger.error("❌ Dron fallido (código: #{codigo})")
false
end end
end
# Para modo atómico (no aplica en DASUTEN - todos son pipelines) # Listar archivos pendientes (no aplica - pipeline fijo)
def ejecutar_uno(tarea, archivo) def listar(tarea)
@logger.warn("Modo atómico no soportado para DASUTEN") []
ejecutar(tarea) end
end
# Listar archivos pendientes (no aplica - pipeline fijo) private
def listar(tarea)
[]
end
private def detectar_nodo(tarea_id)
case tarea_id
def detectar_nodo(tarea_id) when /export/ then 'srvv-fenix'
case tarea_id when /transferir/, /upload/ then 'srv-ns8'
when /export/ then 'srvv-fenix' when /download/, /restaurar/, /verificar/ then 'dasu-sql4'
when /transferir/, /upload/ then 'srv-ns8' else 'srv-dasu'
when /download/, /restaurar/, /verificar/ then 'dasu-sql4' end
else 'srv-dasu'
end end
end end
end end