#!/usr/bin/env ruby # frozen_string_literal: true # ========================================================== # adn/tools/cli/drones/dasuten_upload_srv-ns8-drive.rb # ========================================================== # Dron: Upload a Google Drive desde srv-ns8 # Flujo: /var/tmp/sysdasuten_compressed_ADN.bak → Google Drive # Entrada: Backup ya descargado en /var/tmp/ # Salida: URL de Google Drive # ========================================================== require 'time' require 'json' require 'shellwords' REMOTE_DRIVE = "rmonla-GDrive:drive_bkps-dasu" # Leer ruta del backup desde el output de la transferencia TRANSFER_OUTPUT = '/tmp/dron_transfer_output.json' if File.exist?(TRANSFER_OUTPUT) output = JSON.parse(File.read(TRANSFER_OUTPUT)) BACKUP_LOCAL = output['backup_local'] BACKUP_NAME = File.basename(BACKUP_LOCAL) puts "[*] Dron: Upload a Google Drive (DIFERENCIAL)" else BACKUP_LOCAL = "/var/tmp/sysdasuten_compressed_ADN.bak" BACKUP_NAME = "sysdasuten_compressed_ADN_#{Time.now.strftime('%Y%m%d_%H%M%S')}.bak" puts "[*] Dron: Upload a Google Drive (COMPLETO)" end puts " Nodo: srv-ns8" puts " Origen: #{BACKUP_LOCAL}" puts " Destino: #{REMOTE_DRIVE}/#{BACKUP_NAME}" # Verificar archivo local unless File.exist?(BACKUP_LOCAL) puts "[!] Backup no encontrado en #{BACKUP_LOCAL}" puts " Ejecutar primero: dasuten_transferir_srvv-fenix-srv-ns8.rb" exit 1 end tamaño_mb = (File.size(BACKUP_LOCAL) / 1024.0 / 1024.0).round(2) puts "[+] Archivo local: #{tamaño_mb} MB" begin # Upload a Google Drive puts "\n[1/2] Subiendo a Google Drive..." start = Time.now cmd_upload = "rclone copy '#{BACKUP_LOCAL}' '#{REMOTE_DRIVE}/#{BACKUP_NAME}' --progress -v 2>&1" system(cmd_upload) if $?.success? duracion = (Time.now - start).round(2) puts "[+] Upload completado en #{duracion} segundos" else puts "[!] Error en upload (código: #{$?.exitstatus})" exit 1 end # Verificar en Drive puts "\n[2/2] Verificando archivo en Drive..." cmd_verify = "rclone size '#{REMOTE_DRIVE}/#{BACKUP_NAME}' 2>/dev/null" output = `#{cmd_verify}`.strip puts " Tamaño en Drive: #{output}" # Output para orquestador resultado = { paso: 'upload_complete', drive_ruta: "#{REMOTE_DRIVE}/#{BACKUP_NAME}", drive_url: "https://drive.google.com/drive/folders/1Tgrn2QYyWf0v0eyY1bSGCLlhiqhtIA2n", nodo: 'srv-ns8', duracion: duracion, timestamp: Time.now.iso8601, siguiente_paso: 'download_drive' } puts "\n✅ Upload completado" puts " Output: #{resultado.to_json}" File.write('/tmp/dron_upload_output.json', resultado.to_json) rescue => e puts "[!] Error fatal: #{e.message}" exit 1 end