[ADN / Bitácora] Evolución Progresiva: Sistema de Iconografía Dual (Estado + Semántica)
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# ==========================================================
|
||||
# dtic-BKPs - Automatic Backup Processor
|
||||
# ----------------------------------------------------------
|
||||
# APP: dtic-BKPs
|
||||
# FILE: fxs/sync_rclone.rb
|
||||
# VERSION: v5.5.1
|
||||
# AUTHOR: Ricardo MONLA (rmonla@)
|
||||
# LICENSE: MIT License
|
||||
# ==========================================================
|
||||
|
||||
# Carga las constantes y helpers globales
|
||||
# require_relative '../core/globals'
|
||||
|
||||
def sincronizar_rclone(tarea_cfg)
|
||||
system 'clear' or system 'cls'
|
||||
origen = tarea_cfg[:origen]
|
||||
destino = tarea_cfg[:destino]
|
||||
|
||||
puts "\n#{NEGRITA}#{CIAN}--- #{tarea_cfg[:menu_texto]} ---#{RESET}"
|
||||
log :info, "#{tarea_cfg[:id]}: Iniciado rclone sync. Origen: #{origen}, Destino: #{destino}"
|
||||
|
||||
# Get all subdirectories recursively
|
||||
subdirs = Dir.glob("#{origen}/**/*").select { |f| File.directory?(f) }.map { |d| d.sub("#{origen}/", '') }
|
||||
|
||||
all_exito = true
|
||||
|
||||
# Opciones base de rclone:
|
||||
# --delete-before: Borra origen del remoto ANTES de transferir, liberando espacio clave para respaldos grandes (Code 7 limits)
|
||||
# --retries 5 etc: Blindaje de conexión para archivos gigantescos hacia la nube.
|
||||
rclone_ops = "--delete-before --retries 5 --retries-sleep 10s --timeout 30m --contimeout 10m --tpslimit 10"
|
||||
|
||||
# Execute rclone for each subdirectory
|
||||
subdirs.each do |subdir|
|
||||
comando_sub = "rclone sync #{Shellwords.escape(File.join(origen, subdir))} #{Shellwords.escape(File.join(destino, subdir))} --progress -v #{rclone_ops}"
|
||||
log :info, "#{tarea_cfg[:id]}: Ejecutando subdir #{subdir} → #{comando_sub}"
|
||||
puts "#{CIAN}→ Ejecutando rclone sync subdir (#{subdir})#{RESET}"
|
||||
|
||||
exito_sub = system(comando_sub)
|
||||
if !exito_sub
|
||||
log :error, "#{tarea_cfg[:id]}: Fallo en sincronización subdir #{subdir}"
|
||||
puts "#{ICONO_ERROR} Fallo sincronización rclone subdir (#{subdir})."
|
||||
end
|
||||
all_exito &= exito_sub
|
||||
end
|
||||
|
||||
# Execute rclone for the root directory
|
||||
comando_rclone = "rclone sync #{Shellwords.escape(origen)} #{Shellwords.escape(destino)} --progress -v #{rclone_ops}"
|
||||
log :info, "#{tarea_cfg[:id]}: Ejecutando root → #{comando_rclone}"
|
||||
puts "#{CIAN}→ Ejecutando rclone sync root (Origen: #{origen} → Destino: #{destino})#{RESET}"
|
||||
|
||||
exito = system(comando_rclone)
|
||||
all_exito &= exito
|
||||
codigo_salida = $?.exitstatus
|
||||
estado_final = all_exito ? "Éxito" : "Fallo (cód: #{codigo_salida})"
|
||||
|
||||
$estadisticas_ejecucion[:tareas_completadas][tarea_cfg[:id]] = { estado: estado_final }
|
||||
|
||||
if all_exito
|
||||
log :info, "#{tarea_cfg[:id]}: Sincronización OK"
|
||||
puts "#{ICONO_OK} Sincronización rclone OK."
|
||||
else
|
||||
log :error, "#{tarea_cfg[:id]}: Fallo en sincronización (#{estado_final})"
|
||||
puts "#{ICONO_ERROR} Fallo sincronización rclone (#{estado_final})."
|
||||
end
|
||||
|
||||
sleep 1.5
|
||||
all_exito
|
||||
end
|
||||
Reference in New Issue
Block a user