class Backup::Storage::GoogleDrive

Attributes

chunk_size[RW]

Chunk size, specified in bytes (power of two, i.e. 8M = 8 * 1024 * 1024)

max_retries[RW]

Number of times to retry failed operations.

Default: 10

rclone_config[RW]

Path to the rclone config file

rclone_drive[RW]

Name of the rclone remote drive

rclone_exec[RW]

Path to the rclone executable

Public Class Methods

new(model, storage_id = nil) click to toggle source

Creates a new instance of the storage object

Calls superclass method
# File lib/backup-googledrive.rb, line 33
def initialize(model, storage_id = nil)
  super
  @rclone_exec    ||= "/usr/bin/rclone"
  @rclone_config  ||= "/root/.config/rclone/rclone.conf"
  @rclone_drive   ||= "remote"
  @path           ||= ""
  @chunk_size     ||= 8388608
  @max_retries    ||= 3
  @cmd_base         = "#{rclone_exec} --config #{rclone_config} --retries #{max_retries} --drive-chunk-size=#{chunk_size} --drive-use-trash=false"
  path.sub!(/^\//, "")
end

Private Instance Methods

remove!(package) click to toggle source

Called by the Cycler. Any error raised will be logged as a warning.

# File lib/backup-googledrive.rb, line 59
def remove!(package)
  Logger.info "Removing backup package dated #{package.time}..."

  remote_path = remote_path_for(package)
  package.filenames.each do |filename|
    puts `#{@cmd_base} purge #{rclone_drive}:#{remote_path}`
  end
end
transfer!() click to toggle source
# File lib/backup-googledrive.rb, line 48
def transfer!
  package.filenames.each do |filename|
    src = File.join(Config.tmp_path, filename)
    dest = File.join(remote_path, filename)
    Logger.info "Storing '#{dest}'..."
    puts `#{@cmd_base} copy #{src} #{rclone_drive}:#{dest}`
  end
end