Class: EY::Backup::BackupSet
- Inherits:
-
Object
- Object
- EY::Backup::BackupSet
- Extended by:
- Logging
- Includes:
- Logging
- Defined in:
- lib/ey_backup/backup_set.rb
Constant Summary collapse
- MULTIPART_EXTENSION =
/\.part\d+/
Instance Attribute Summary collapse
-
#basename ⇒ Object
readonly
Returns the value of attribute basename.
Class Method Summary collapse
- .download(database, index) ⇒ Object
- .from(database, basename, file) ⇒ Object
- .list(databases) ⇒ Object
Instance Method Summary collapse
- #<=>(o) ⇒ Object
- #cleanup ⇒ Object
- #database_name ⇒ Object
- #delete! ⇒ Object
- #download! ⇒ Object
-
#initialize(database, basename, filename, keys) ⇒ BackupSet
constructor
A new instance of BackupSet.
- #join! ⇒ Object
- #load! ⇒ Object
- #normalize(o) ⇒ Object
- #normalized_name ⇒ Object
- #parts ⇒ Object
- #remove_joined_file! ⇒ Object
- #remove_split_files! ⇒ Object
- #rm! ⇒ Object
- #split!(split_size) ⇒ Object
- #timestamp ⇒ Object
- #upload! ⇒ Object
Constructor Details
#initialize(database, basename, filename, keys) ⇒ BackupSet
Returns a new instance of BackupSet.
13 14 15 16 17 18 |
# File 'lib/ey_backup/backup_set.rb', line 13 def initialize(database, basename, filename, keys) @database = database @basename = basename @filename = filename @keys = keys end |
Instance Attribute Details
#basename ⇒ Object (readonly)
Returns the value of attribute basename.
19 20 21 |
# File 'lib/ey_backup/backup_set.rb', line 19 def basename @basename end |
Class Method Details
.download(database, index) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/ey_backup/backup_set.rb', line 50 def self.download(database, index) fatal "You didn't specify a database name: e.g. 1:rails_production" if database.nil? || index < 0 backup = database.backups[index] fatal "No backup found for database #{database}: requested index: #{index}" unless backup backup.download! backup end |
.from(database, basename, file) ⇒ Object
9 10 11 |
# File 'lib/ey_backup/backup_set.rb', line 9 def self.from(database, basename, file) new(database, basename, file, nil) end |
.list(databases) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/ey_backup/backup_set.rb', line 33 def self.list(databases) all_backups = [] databases.each do |db| backups = db.backups all_backups << backups puts "Listing database backups for #{db.name}" puts "#{backups.size} backup(s) found" backups.each_with_index do |backup_set, i| puts "#{i}:#{backup_set.database_name} #{backup_set.normalized_name}" end puts # just some extra whitespace end all_backups.flatten end |
Instance Method Details
#<=>(o) ⇒ Object
131 132 133 |
# File 'lib/ey_backup/backup_set.rb', line 131 def <=>(o) self. <=> o. end |
#cleanup ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/ey_backup/backup_set.rb', line 25 def cleanup say "Cleanup for #{database_name}" @database.backups[0...(-@database.keep)].each do |backup| say "Deleting: #{backup.basename}" backup.delete! end end |
#database_name ⇒ Object
21 22 23 |
# File 'lib/ey_backup/backup_set.rb', line 21 def database_name @database.name end |
#delete! ⇒ Object
94 95 96 97 98 |
# File 'lib/ey_backup/backup_set.rb', line 94 def delete! @keys.each do |key| @database.bucket_minder.remove_object(key) end end |
#download! ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/ey_backup/backup_set.rb', line 78 def download! @remote_filenames = [] @keys.each do |key| remote_filename = File.join(@database.base_path, normalize(key)) puts "Filename: #{remote_filename}" info "Downloading #{key} to #{@database.base_path}" File.open(remote_filename, 'wb') do |f| @database.bucket_minder.stream(key) do |chunk, remaining_size, total_size| f.write(chunk) end end @remote_filenames << remote_filename end end |
#join! ⇒ Object
119 120 121 |
# File 'lib/ey_backup/backup_set.rb', line 119 def join! @filename = Splitter.load(@remote_filenames) end |
#load! ⇒ Object
70 71 72 |
# File 'lib/ey_backup/backup_set.rb', line 70 def load! @database.engine.load(@database.name, @filename) end |
#normalize(o) ⇒ Object
123 124 125 |
# File 'lib/ey_backup/backup_set.rb', line 123 def normalize(o) o.gsub(/^.*?\//, '') end |
#normalized_name ⇒ Object
66 67 68 |
# File 'lib/ey_backup/backup_set.rb', line 66 def normalized_name normalize(@basename) end |
#parts ⇒ Object
62 63 64 |
# File 'lib/ey_backup/backup_set.rb', line 62 def parts @keys.size end |
#remove_joined_file! ⇒ Object
106 107 108 |
# File 'lib/ey_backup/backup_set.rb', line 106 def remove_joined_file! FileUtils.rm(@filename) end |
#remove_split_files! ⇒ Object
100 101 102 103 104 |
# File 'lib/ey_backup/backup_set.rb', line 100 def remove_split_files! (@remote_filenames - [@filename]).each do |filename| FileUtils.rm(filename) end end |
#rm! ⇒ Object
110 111 112 113 |
# File 'lib/ey_backup/backup_set.rb', line 110 def rm! remove_split_files! remove_joined_file! end |
#split!(split_size) ⇒ Object
115 116 117 |
# File 'lib/ey_backup/backup_set.rb', line 115 def split!(split_size) @remote_filenames = Splitter.dump(@filename, split_size) end |
#timestamp ⇒ Object
127 128 129 |
# File 'lib/ey_backup/backup_set.rb', line 127 def @basename[/(\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2})/, 1] end |
#upload! ⇒ Object
74 75 76 |
# File 'lib/ey_backup/backup_set.rb', line 74 def upload! @database.start_upload(@remote_filenames) end |