#!/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