57 lines
1.5 KiB
Ruby
57 lines
1.5 KiB
Ruby
# 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
|