class Siba::SibaTasks

Attributes

path_to_options_yml[RW]
tasks[RW]

Public Class Methods

backup_name(now=nil) click to toggle source
# File lib/siba/tasks/siba_tasks.rb, line 77
def self.backup_name(now=nil)
  if Siba::StringHelper.nil_or_empty Siba.backup_name
    raise Siba::Error, "Backup task name is not specified"
  end
  "#{Siba.backup_name}-#{SibaTasks.backup_name_suffix(now)}"
end
new(options, path_to_options_yml, skip_source_task) click to toggle source
# File lib/siba/tasks/siba_tasks.rb, line 10
def initialize(options, path_to_options_yml, skip_source_task)
  @path_to_options_yml = path_to_options_yml
  raise 'Options are not loaded' if options.nil?

  @tasks = {}
  Siba::Plugins::CATEGORIES.each do |category|
    next if category == "source" && skip_source_task
    @tasks[category] = SibaTask.new options, category
  end
end

Private Class Methods

backup_name_suffix(now=nil) click to toggle source
# File lib/siba/tasks/siba_tasks.rb, line 104
def self.backup_name_suffix(now=nil)
  now ||= Time.now

  # Monthly backup on the 1st day of each month
  # "month-01" through "month-12"
  return "month-#{"%02d" % now.month}" if now.day == 1

  # Weekly backup on Sunday
  # "week-1-sun" through "week-5-sun"
  return "week-#{(now.day-1) / 7 + 1}-sun" if now.wday == 0

  # Daily backup
  # "day-2-mon" through "day-7-sat"
  "day-#{now.wday+1}-#{now.strftime("%a").downcase}"
end

Public Instance Methods

backup() click to toggle source
# File lib/siba/tasks/siba_tasks.rb, line 21
def backup
  siba_file.run_this "backup" do
    @tasks["source"].backup source_dir
    raise Siba::Error, "There are no files to backup" if Siba::FileHelper.dir_empty? source_dir
    OptionsBackup.save_options_backup path_to_options_yml, source_dir

    archive_file_name = @tasks["archive"].backup source_dir, archive_dir, SibaTasks.backup_name
    unless archive_file_name =~ /^#{SibaTasks.backup_name}/
      raise Siba::Error, "Archive file name must begin with: #{SibaTasks.backup_name}"
    end
    path_to_archive = File.join archive_dir, archive_file_name
    unless siba_file.file_file? path_to_archive
      raise Siba::Error, "Failed to create archive file: #{path_to_archive}"
    end

    name_of_encrypted_file = @tasks["encryption"].backup path_to_archive, encryption_dir
    unless name_of_encrypted_file =~ /^#{archive_file_name}/
      raise Siba::Error, "File name of encrypted file must begin with: #{archive_file_name}"
    end
    path_to_backup = File.join encryption_dir, name_of_encrypted_file
    unless siba_file.file_file? path_to_backup
      raise Siba::Error, "Failed to encrypt backup: #{path_to_backup}"
    end

    @tasks["destination"].backup path_to_backup
  end
end
get_backups_list() click to toggle source
# File lib/siba/tasks/siba_tasks.rb, line 73
def get_backups_list
  @tasks["destination"].plugin.get_backups_list Siba.backup_name
end
restore(backup_file_name) click to toggle source
# File lib/siba/tasks/siba_tasks.rb, line 49
def restore(backup_file_name)
  siba_file.run_this do
    @tasks["destination"].restore backup_file_name, destination_dir
    path_to_backup = File.join destination_dir, backup_file_name
    unless siba_file.file_file? path_to_backup
      raise Siba::Error, "Failed to get backup from destination: #{backup_file_name}"
    end

    archive_file_name = @tasks["encryption"].restore path_to_backup, encryption_dir
    path_to_archive = File.join encryption_dir, archive_file_name
    unless siba_file.file_file? path_to_archive
      raise Siba::Error, "Failed to get archive file: #{path_to_archive}"
    end

    @tasks["archive"].restore path_to_archive, source_dir
    if Siba::FileHelper.dir_empty? source_dir
      raise Siba::Error, "Failed to extract archive: #{path_to_archive}"
    end

    @tasks["source"] = OptionsBackup.load_source_from_backup source_dir if @tasks["source"].nil?
    @tasks["source"].restore source_dir
  end
end

Private Instance Methods

archive_dir() click to toggle source
# File lib/siba/tasks/siba_tasks.rb, line 92
def archive_dir
  @archive_dir ||= TestFiles::mkdir_in_tmp_dir("arc").freeze
end
destination_dir() click to toggle source
# File lib/siba/tasks/siba_tasks.rb, line 100
def destination_dir
  @destination_dir ||= TestFiles::mkdir_in_tmp_dir("dest").freeze
end
encryption_dir() click to toggle source
# File lib/siba/tasks/siba_tasks.rb, line 96
def encryption_dir
  @encryption_dir ||= TestFiles::mkdir_in_tmp_dir("enc").freeze
end
source_dir() click to toggle source
# File lib/siba/tasks/siba_tasks.rb, line 88
def source_dir
  @source_dir ||= TestFiles::mkdir_in_tmp_dir("src").freeze
end