Files
dtic-DIIAA/adn/tools/cli/dasuten_backup_download.rb
T
Ricardo Monla 892019fa22 [A04.P005] DASUTEN: Pipeline refactorizado + Documentación + Informes
Refactorización del pipeline de backups DASUTEN:

1. Flujo simplificado (un solo destino):
   - Backup directo a X:\ (share srv-ns8)
   - Eliminado paso intermedio E:\BK_SQL\sysdasuten\
   - Reducido de 3 ubicaciones a 2 (X: → /var/tmp/)

2. Módulo común DasuExecutor (lib/dasu_executor.rb):
   - Centraliza ejecución PowerShell en dasu-sql4
   - Centraliza verificación de archivos en fenix
   - Elimina código repetido en 6 drones (-52% líneas)

3. Drones refactorizados:
   - dasuten_exportar_srvv-fenix.rb (FULL → X:)
   - dasuten_exportar_diferencial_srvv-fenix.rb (DIF → X:)
   - dasuten_transferir_srvv-fenix-srv-ns8.rb (simplificado)
   - dasuten_restaurar_dasu-sql4.rb (usa DasuExecutor)
   - dasuten_restaurar_diferencial_dasu-sql4.rb (usa DasuExecutor)
   - dasuten_download_drive-dasu-sql4.rb (usa DasuExecutor)
   - dasuten_verificar-integridad_dasu-sql4.rb (usa DasuExecutor)

4. Integración BKPs mantenida:
   - T8-T15: Tareas individuales
   - C7: dasuten_full (pipeline semanal)
   - C8: dasuten_diferencial (pipeline diario)

5. Documentación actualizada:
   - A04.P006_Backups-DASUTEN.md: flujo simplificado + módulo común
   - Lecciones aprendidas agregadas

6. Nuevos archivos:
   - Informes técnicos DASUTEN (docs/informes/2026-04_DASUTEN-migracion/)
   - A01.P011/P012: Documentación de drones y pipeline
   - proc_linux.rb, ops.rb: Utilitarios del ecosistema

7. Scripts legacy (para referencia):
   - orquestador_pipeline.rb, orquestador_pipeline_diferencial.rb
   - dasuten_upload_srv-ns8-drive.rb
2026-04-14 20:06:06 -03:00

73 lines
2.4 KiB
Ruby
Executable File

#!/usr/bin/env ruby
# frozen_string_literal: true
# ==========================================================
# adn/tools/cli/dasuten_backup_download.rb — Download desde Google Drive
# ==========================================================
# Flujo: Google Drive (drive_bkps-dasu) → dasu-sql4
# Uso: ruby adn/tools/cli/dasuten_backup_download.rb
# ==========================================================
require 'shellwords'
REMOTE_DRIVE = "rmonla-GDrive:drive_bkps-dasu"
LOCAL_BACKUP = "F:\\BACKUP\\sysdasuten_compressed_ADN.bak"
puts "[*] Iniciando descarga de backup desde Google Drive..."
begin
# Paso 1: Listar backups disponibles
puts "[1/4] Buscando backup más reciente en Drive..."
cmd_list = "rclone lsf '#{REMOTE_DRIVE}' --files-only --order '-modified' 2>/dev/null | grep sysdasuten | head -1"
backup_remoto = `#{cmd_list}`.strip
if backup_remoto.empty?
puts "[!] No se encontraron backups en #{REMOTE_DRIVE}"
exit 1
end
puts " Backup encontrado: #{backup_remoto}"
# Paso 2: Descargar backup
puts "[2/4] Descargando backup..."
puts " Origen: #{REMOTE_DRIVE}/#{backup_remoto}"
puts " Destino: #{LOCAL_BACKUP}"
puts " (Esto puede tomar 2-5 minutos)"
cmd_download = "rclone copy '#{REMOTE_DRIVE}/#{backup_remoto}' '#{LOCAL_BACKUP}' --progress -v"
start_download = Time.now
system(cmd_download)
if $?.success?
puts "[+] Descarga completada en #{(Time.now - start_download).round(2)} segundos."
else
puts "[!] Error en descarga (código: #{$?.exitstatus})"
exit 1
end
# Paso 3: Verificar archivo descargado
puts "[3/4] Verificando archivo descargado..."
cmd_verify = "powershell -Command \"(Get-Item '#{LOCAL_BACKUP}').Length\""
tamaño = `#{cmd_verify}`.strip.to_i
if tamaño > 0
puts "[+] Archivo verificado: #{(tamaño / 1024.0 / 1024.0).round(2)} MB"
else
puts "[!] Archivo descargado parece estar vacío"
exit 1
end
# Paso 4: Restaurar en SQL Server
puts "[4/4] Preparando para restauración..."
puts " Backup disponible en: #{LOCAL_BACKUP}"
puts ""
puts " Para restaurar, ejecutar:"
puts " sqlcmd -S localhost -Q \"RESTORE DATABASE sysdasuten FROM DISK = '#{LOCAL_BACKUP}' WITH REPLACE, MOVE 'sysdasuten' TO 'F:\\DATA\\sysdasuten.mdf', MOVE 'sysdasuten_log' TO 'F:\\LOG\\sysdasuten_log.ldf'\""
puts "\n✅ Descarga completada exitosamente."
rescue => e
puts "[!] Error fatal: #{e.message}"
exit 1
end