Files
dtic-DIIAA/adn/tools/cli/drones/dasuten_upload_srv-ns8-drive.rb
T

100 lines
3.2 KiB
Ruby

#!/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"
# Archivos de output de los pasos anteriores
TRANSFER_OUTPUT = '/tmp/dron_transfer_output.json'
EXPORT_OUTPUT = '/tmp/dron_export_output.json'
# Determinar cuál es el más reciente (si existen)
archivos_output = [TRANSFER_OUTPUT, EXPORT_OUTPUT].select { |f| File.exist?(f) }
output_reciente = archivos_output.max_by { |f| File.mtime(f) }
if output_reciente == TRANSFER_OUTPUT
output = JSON.parse(File.read(TRANSFER_OUTPUT))
BACKUP_LOCAL = output['backup_local'] || output['backup_ruta_unix']
BACKUP_NAME = File.basename(BACKUP_LOCAL)
puts "[*] Dron: Upload a Google Drive (Desde TRANSFERENCIA)"
elsif output_reciente == EXPORT_OUTPUT
output = JSON.parse(File.read(EXPORT_OUTPUT))
BACKUP_LOCAL = output['backup_ruta_unix']
BACKUP_NAME = File.basename(BACKUP_LOCAL)
puts "[*] Dron: Upload a Google Drive (Desde EXPORTACIÓN DIRECTA)"
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 FALLBACK)"
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