# frozen_string_literal: true # ========================================================== # dtic-BKPs/lib/sync_rclone.rb — Sincronización rclone # ========================================================== # # NOTA: Se eliminó la estrategia subdirectories-first que existía # en dtic-BKPs. Con --delete-before rclone ya libera el espacio # remoto antes de transferir, haciendo innecesario el loop por # subdirectorios. El sync root único es suficiente y más eficiente. require 'shellwords' module DTICBKPs module Procesador class Rclone RCLONE_OPTS = %w[ --delete-before --retries 5 --retries-sleep 10s --timeout 30m --contimeout 10m --tpslimit 10 --progress -v ].join(' ').freeze def initialize(log) @log = log end def ejecutar(tarea) @log.titulo(tarea[:texto]) origen = tarea[:origen] destino = tarea[:destino] @log.paso("Origen: #{origen}") @log.paso("Destino: #{destino}") cmd = "rclone sync #{Shellwords.escape(origen)} #{Shellwords.escape(destino)} #{RCLONE_OPTS}" @log.info("#{tarea[:id]}: Ejecutando → #{cmd}") exito = system(cmd) codigo = $?.exitstatus if exito @log.ok("Sincronización rclone completada.") else @log.error("#{tarea[:id]}: Fallo en sincronización (código: #{codigo}).") end exito end end end end