class DatabaseBackup
Constants
- BACKUP_DIR
Attributes
max_num_of_backups[RW]
Public Class Methods
new(database_backup_adapter, max_num_of_backups: 10)
click to toggle source
# File lib/jefferies_tube/database_backup.rb, line 11 def initialize(database_backup_adapter, max_num_of_backups: 10) @database_backup_adapter = database_backup_adapter @max_num_of_backups = max_num_of_backups @rotate_frequency = nil end
Public Instance Methods
backups()
click to toggle source
# File lib/jefferies_tube/database_backup.rb, line 45 def backups Dir.glob(File.join(backup_path, '*')) end
cleanup()
click to toggle source
# File lib/jefferies_tube/database_backup.rb, line 49 def cleanup # hourly - keep for 24 hours sh "find #{storage_path}/backup.hourly/ -mmin +1440 -exec rm -rv {} \\;" # daily - keep for 14 days sh "find #{storage_path}/backup.daily/ -mtime +14 -exec rm -rv {} \\;" # weekly - keep for 60 days sh "find #{storage_path}/backup.weekly/ -mtime +60 -exec rm -rv {} \\;" # monthly - keep for 300 days sh "find #{storage_path}/backup.monthly/ -mtime +300 -exec rm -rv {} \\;" end
create()
click to toggle source
# File lib/jefferies_tube/database_backup.rb, line 17 def create FileUtils.mkdir_p backup_path @latest_backup_file = create_backup remove_symlink_to_old_backup create_symlink_to_new_backup delete_oldest_backup compress_old_backups @latest_backup_file end
create_rotated(frequency)
click to toggle source
# File lib/jefferies_tube/database_backup.rb, line 27 def create_rotated(frequency) @rotate_frequency = frequency create cleanup end
restore(path)
click to toggle source
# File lib/jefferies_tube/database_backup.rb, line 33 def restore(path) @database_backup_adapter.restore path end
restore_most_recent()
click to toggle source
# File lib/jefferies_tube/database_backup.rb, line 37 def restore_most_recent @database_backup_adapter.restore symlink_file end
symlink_file()
click to toggle source
# File lib/jefferies_tube/database_backup.rb, line 41 def symlink_file File.join backup_path, 'latest.dump' end
Private Instance Methods
backup_path()
click to toggle source
# File lib/jefferies_tube/database_backup.rb, line 94 def backup_path if @rotate_frequency rotated_backup_path(@rotate_frequency) else storage_path end end
compress_old_backups()
click to toggle source
# File lib/jefferies_tube/database_backup.rb, line 82 def compress_old_backups old_backups.each do |backup_filename| next if backup_filename =~ /.dump.gz/ sh "gzip #{backup_filename}" end end
create_backup()
click to toggle source
Procedural Methods
# File lib/jefferies_tube/database_backup.rb, line 63 def create_backup backup_filename = "#{Time.now.strftime('%Y%m%d%H%M%S')}.dump" latest_backup_file = File.join backup_path, backup_filename @database_backup_adapter.create_backup latest_backup_file latest_backup_file end
create_symlink_to_new_backup()
click to toggle source
# File lib/jefferies_tube/database_backup.rb, line 74 def create_symlink_to_new_backup sh "ln -sf #{@latest_backup_file} #{symlink_file}" end
delete_oldest_backup()
click to toggle source
# File lib/jefferies_tube/database_backup.rb, line 78 def delete_oldest_backup File.delete(old_backups.first) if old_backups.count >= max_num_of_backups end
old_backups()
click to toggle source
# File lib/jefferies_tube/database_backup.rb, line 121 def old_backups backups.sort.reject { |r| r == @latest_backup_file || r == symlink_file } end
remove_symlink_to_old_backup()
click to toggle source
# File lib/jefferies_tube/database_backup.rb, line 70 def remove_symlink_to_old_backup File.delete(symlink_file) if File.exist?(symlink_file) end
root_dir()
click to toggle source
Helper Methods
# File lib/jefferies_tube/database_backup.rb, line 90 def root_dir Rails.root end
rotated_backup_path(frequency = Frequency::DAILY)
click to toggle source
# File lib/jefferies_tube/database_backup.rb, line 106 def rotated_backup_path(frequency = Frequency::DAILY) storage = File.join(root_dir, BACKUP_DIR) now = Time.now if now.day == 1 storage = File.join(storage, 'backup.monthly') elsif now.wday == 0 storage = File.join(storage, 'backup.weekly') elsif frequency == Frequency::DAILY || now.hour == 0 storage = File.join(storage, 'backup.daily') elsif frequency == Frequency::HOURLY storage = File.join(storage, 'backup.hourly') end storage end
sh(cmd)
click to toggle source
# File lib/jefferies_tube/database_backup.rb, line 127 def sh(cmd) `#{cmd}` end
storage_path()
click to toggle source
# File lib/jefferies_tube/database_backup.rb, line 102 def storage_path File.join(root_dir, BACKUP_DIR) end