[A04.P005] Extraído módulo común DasuExecutor para eliminar código repetido
Problema: 6 drones repetían el mismo patrón de ejecución remota: - Base64 encoding de scripts PowerShell - SSH vía srv-dasu con sshpass - Lectura de JSON output desde dasu-sql4 - Verificación de archivos en fenix vía xp_cmdshell Solución: adn/tools/cli/drones/lib/dasu_executor.rb Funciones del módulo: - execute_ps_on_dasu(ps_script) → ejecuta PowerShell en dasu-sql4 - read_json_from_dasu(path) → lee JSON output - execute_ps_with_json_output(ps_script) → combina ambas - execute_ps_on_fenix(client, ps_script) → PowerShell en fenix - file_exists_on_fenix?(client, path) → verifica existencia - get_file_info_on_fenix(client, path) → info completa de archivo Drones refactorizados (líneas ahorradas): - dasuten_restaurar_dasu-sql4.rb: 200 → 95 líneas (-52%) - dasuten_restaurar_diferencial_dasu-sql4.rb: 207 → 100 líneas (-52%) - dasuten_download_drive-dasu-sql4.rb: 269 → 130 líneas (-52%) - dasuten_verificar-integridad_dasu-sql4.rb: 182 → 85 líneas (-53%) - dasuten_exportar_srvv-fenix.rb: usa módulo para verificación - dasuten_exportar_diferencial_srvv-fenix.rb: usa módulo para verificación Beneficio: Si se modifica el patrón SSH/PowerShell, se cambia en 1 solo lugar.
This commit is contained in:
@@ -5,13 +5,14 @@
|
||||
# adn/tools/cli/drones/dasuten_exportar_diferencial_srvv-fenix.rb
|
||||
# ==========================================================
|
||||
# Dron: Exportar backup DIFERENCIAL de DASUTEN en srvv-fenix
|
||||
# Flujo: srvv-fenix → Backup diferencial en E:\BK_SQL\
|
||||
# Salida: Marca evento como 'export_complete' con ruta del backup
|
||||
# Flujo: srvv-fenix → Backup diferencial en X:\ (share srv-ns8)
|
||||
# Salida: export_differential_complete con ruta del backup
|
||||
# ==========================================================
|
||||
|
||||
require 'tiny_tds'
|
||||
require 'time'
|
||||
require 'json'
|
||||
require_relative 'lib/dasu_executor'
|
||||
|
||||
# Nombre del archivo con timestamp
|
||||
TIMESTAMP = Time.now.strftime('%Y%m%d_%H%M%S')
|
||||
@@ -23,10 +24,10 @@ puts " Destino: #{BACKUP_FILE}"
|
||||
puts " Tipo: DIFFERENTIAL (solo cambios desde último backup completo)"
|
||||
|
||||
begin
|
||||
# Autorizar candados primero (necesario para acceder a la bóveda)
|
||||
# Autorizar candados primero
|
||||
system("ruby adn/tools/candados/candados.rb authorize >/dev/null 2>&1")
|
||||
|
||||
# Obtener credencial de candados (patrón usado en otros drones)
|
||||
# Obtener credencial de candados
|
||||
pass_cmd = "ruby adn/tools/candados/candados.rb get utnlarioja.intranet:monlaricardo 2>/dev/null"
|
||||
sql_pass = `#{pass_cmd}`.strip
|
||||
|
||||
@@ -34,7 +35,7 @@ begin
|
||||
sql_host = '10.0.10.200'
|
||||
|
||||
if sql_pass.empty?
|
||||
puts "[!] Error: No se pudo obtener credencial de candados (utnlarioja.intranet:monlaricardo)"
|
||||
puts "[!] Error: No se pudo obtener credencial de candados"
|
||||
exit 1
|
||||
end
|
||||
|
||||
@@ -64,22 +65,14 @@ begin
|
||||
duracion = (Time.now - start).round(2)
|
||||
puts "[+] Backup diferencial generado en #{duracion} segundos"
|
||||
|
||||
# Verificar archivo en share
|
||||
# Verificar archivo en share usando módulo común
|
||||
puts "\n[1/2] Verificando archivo en share..."
|
||||
begin
|
||||
verify_ps = <<~PSCMD.strip
|
||||
if (Test-Path "#{BACKUP_FILE}") {
|
||||
$size = (Get-Item "#{BACKUP_FILE}").Length
|
||||
Write-Host "Verificado: #{BACKUP_FILE} ($([math]::Round($size/1MB, 2)) MB)"
|
||||
} else {
|
||||
Write-Host "ERROR: No existe #{BACKUP_FILE}"
|
||||
exit 1
|
||||
}
|
||||
PSCMD
|
||||
client.execute("EXEC xp_cmdshell 'powershell -Command \"#{verify_ps.gsub('"', '\"')}\"'")
|
||||
puts "[+] Archivo verificado"
|
||||
rescue => e
|
||||
puts "[!] Error al verificar en X: - #{e.message}"
|
||||
file_info = DasuExecutor.get_file_info_on_fenix(client, BACKUP_FILE)
|
||||
|
||||
if file_info[:exists]
|
||||
puts "[+] Archivo verificado: #{BACKUP_FILE} (#{file_info[:size_mb]} MB)"
|
||||
else
|
||||
puts "[!] Error: No existe el archivo en #{BACKUP_FILE}"
|
||||
exit 1
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user