Class: Backarch::Archive

Inherits:
Object
  • Object
show all
Defined in:
lib/backarch/archive.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.runObject



10
11
12
13
14
15
16
17
# File 'lib/backarch/archive.rb', line 10

def run
  o = new
  o.create
  Config.config.each_pair do |provider, params|
    o.push_archive_to provider, params
  end
  o.delete Config.config.keys
end

Instance Method Details

#createObject



20
21
22
23
24
25
26
27
28
29
# File 'lib/backarch/archive.rb', line 20

def create
  if local_archive_complete?
    LOG.info "Archive of snapshot #{archive_name} already completed"
    return
  end

  LOG.info "Creating archive of snapshot: #{archive_name}"
  TarWrapper.create_multiple_volumes(snapshot_folder, archive_folder)
  local_archive_complete!
end

#delete(providers) ⇒ Object



31
32
33
34
35
36
37
# File 'lib/backarch/archive.rb', line 31

def delete providers
  if local_archive_complete? and not providers.select { |provider| remote_archive_complete? provider }.empty? and Dir.exists? archive_folder
    LOG.info "Removing archive folder #{archive_folder}"
    FileUtils.rm_rf archive_folder
    FileUtils.rm_rf snapshot_folder
  end
end

#push_archive_to(provider, archive_info) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/backarch/archive.rb', line 39

def push_archive_to provider, archive_info
  if provider == "google"
    raise ArgumentError, "Google no longer supported"
  end

  $0 = "#{Config.program_name} archive pushing archive to #{provider}"
  if remote_archive_complete? provider
    LOG.warn "Remote archival of snapshot #{archive_name} already completed"
    return
  end

  unless local_archive_complete?
    LOG.error "Snapshot #{archive_name} not locally present"
    return
  end

  begin
    remote_path = "#{archive_info["path"]}#{remote_archive_path(archive_info)}"
    start_time = Time.now
    LOG.info("Beginning archive of #{snapshot_folder} to #{provider}://#{archive_info["bucket"]}/#{remote_path} @ #{Time.now}")

    send("push_to_#{provider}".to_sym, archive_info, remote_path, archive_folder)
    end_time = Time.now
    LOG.info("Completed archive of #{snapshot_folder} to #{provider} @ #{end_time} - #{end_time - start_time}s elapsed")
  rescue Exception => er
    LOG.error("Failed to push archive #{snapshot_folder} to #{provider} @ #{Time.now}: #{er.message}")
    er.backtrace.each { |line| LOG.error line }
  end
end