Class: DatabaseBackup

Inherits:
Object
  • Object
show all
Defined in:
lib/jefferies_tube/database_backup.rb

Defined Under Namespace

Modules: Frequency

Constant Summary collapse

BACKUP_DIR =
'db/backups'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(database_backup_adapter, max_num_of_backups: 10) ⇒ DatabaseBackup

Returns a new instance of DatabaseBackup.



11
12
13
14
15
# 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

Instance Attribute Details

#max_num_of_backupsObject

Returns the value of attribute max_num_of_backups.



9
10
11
# File 'lib/jefferies_tube/database_backup.rb', line 9

def max_num_of_backups
  @max_num_of_backups
end

Instance Method Details

#backupsObject



45
46
47
# File 'lib/jefferies_tube/database_backup.rb', line 45

def backups
  Dir.glob(File.join(backup_path, '*'))
end

#cleanupObject



49
50
51
52
53
54
55
56
57
58
# 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

#createObject



17
18
19
20
21
22
23
24
25
# 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) ⇒ Object



27
28
29
30
31
# File 'lib/jefferies_tube/database_backup.rb', line 27

def create_rotated(frequency)
  @rotate_frequency = frequency
  create
  cleanup
end

#restore(path) ⇒ Object



33
34
35
# File 'lib/jefferies_tube/database_backup.rb', line 33

def restore(path)
  @database_backup_adapter.restore path
end

#restore_most_recentObject



37
38
39
# File 'lib/jefferies_tube/database_backup.rb', line 37

def restore_most_recent
  @database_backup_adapter.restore symlink_file
end


41
42
43
# File 'lib/jefferies_tube/database_backup.rb', line 41

def symlink_file
  File.join backup_path, 'latest.dump'
end