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.empty? backup = database.backups[index.to_i] 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) names = databases.map do |db| db.name end info "Listing database backups for #{names.join(', ')}" backups = databases.map{ |db| db.backups }.flatten info "#{backups.size} backup(s) found" backups.each_with_index do |backup_set, i| info "#{i}:#{backup_set.database_name} #{backup_set.normalized_name}" end backups end |
Instance Method Details
#<=>(o) ⇒ Object
130 131 132 |
# File 'lib/ey_backup/backup_set.rb', line 130 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
93 94 95 96 97 |
# File 'lib/ey_backup/backup_set.rb', line 93 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 |
# File 'lib/ey_backup/backup_set.rb', line 78 def download! @remote_filenames = [] @keys.each do |key| info "Downloading #{key} to #{@database.base_path}" remote_filename = File.join(@database.base_path, normalize(key)) 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
118 119 120 |
# File 'lib/ey_backup/backup_set.rb', line 118 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
122 123 124 |
# File 'lib/ey_backup/backup_set.rb', line 122 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
105 106 107 |
# File 'lib/ey_backup/backup_set.rb', line 105 def remove_joined_file! FileUtils.rm(@filename) end |
#remove_split_files! ⇒ Object
99 100 101 102 103 |
# File 'lib/ey_backup/backup_set.rb', line 99 def remove_split_files! (@remote_filenames - [@filename]).each do |filename| FileUtils.rm(filename) end end |
#rm! ⇒ Object
109 110 111 112 |
# File 'lib/ey_backup/backup_set.rb', line 109 def rm! remove_split_files! remove_joined_file! end |
#split!(split_size) ⇒ Object
114 115 116 |
# File 'lib/ey_backup/backup_set.rb', line 114 def split!(split_size) @remote_filenames = Splitter.dump(@filename, split_size) end |
#timestamp ⇒ Object
126 127 128 |
# File 'lib/ey_backup/backup_set.rb', line 126 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 |