Class: BackupRestore::BackupStore Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/backup_restore/backup_store.rb

Overview

This class is abstract.

Direct Known Subclasses

LocalBackupStore, S3BackupStore

Constant Summary collapse

BackupFileExists =
Class.new(RuntimeError)
StorageError =
Class.new(RuntimeError)

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.create(opts = {}) ⇒ BackupStore

Returns:



10
11
12
13
14
15
16
17
18
19
# File 'lib/backup_restore/backup_store.rb', line 10

def self.create(opts = {})
  case opts[:location] || SiteSetting.backup_location
  when BackupLocationSiteSetting::LOCAL
    require "backup_restore/local_backup_store"
    BackupRestore::LocalBackupStore.new(opts)
  when BackupLocationSiteSetting::S3
    require "backup_restore/s3_backup_store"
    BackupRestore::S3BackupStore.new(opts)
  end
end

Instance Method Details

#delete_file(filename) ⇒ Object



64
65
66
# File 'lib/backup_restore/backup_store.rb', line 64

def delete_file(filename)
  fail NotImplementedError
end

#delete_oldObject



36
37
38
39
40
41
42
43
# File 'lib/backup_restore/backup_store.rb', line 36

def delete_old
  return unless cleanup_allowed?
  return if (backup_files = files).size <= SiteSetting.maximum_backups

  backup_files[SiteSetting.maximum_backups..-1].each { |file| delete_file(file.filename) }

  reset_cache
end

#delete_prior_to_n_daysObject



45
46
47
48
49
50
51
52
53
# File 'lib/backup_restore/backup_store.rb', line 45

def delete_prior_to_n_days
  window = SiteSetting.remove_older_backups.to_i
  return unless window && window.is_a?(Numeric) && window > 0
  return unless cleanup_allowed?
  files.each do |file|
    delete_file(file.filename) if file.last_modified < Time.now.ago(window.days)
  end
  reset_cache
end

#download_file(filename, destination, failure_message = nil) ⇒ Object



68
69
70
# File 'lib/backup_restore/backup_store.rb', line 68

def download_file(filename, destination, failure_message = nil)
  fail NotImplementedError
end

#file(filename, include_download_source: false) ⇒ BackupFile

Returns:



60
61
62
# File 'lib/backup_restore/backup_store.rb', line 60

def file(filename, include_download_source: false)
  fail NotImplementedError
end

#filesArray<BackupFile>

Returns:



22
23
24
# File 'lib/backup_restore/backup_store.rb', line 22

def files
  @files ||= unsorted_files.sort_by { |file| -file.last_modified.to_i }
end

#generate_upload_url(filename) ⇒ Object



76
77
78
# File 'lib/backup_restore/backup_store.rb', line 76

def generate_upload_url(filename)
  fail NotImplementedError
end

#latest_fileBackupFile

Returns:



27
28
29
# File 'lib/backup_restore/backup_store.rb', line 27

def latest_file
  files.first
end

#remote?Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/backup_restore/backup_store.rb', line 55

def remote?
  fail NotImplementedError
end

#reset_cacheObject



31
32
33
34
# File 'lib/backup_restore/backup_store.rb', line 31

def reset_cache
  @files = nil
  Report.clear_cache(:storage_stats)
end

#statsObject



80
81
82
83
84
85
86
87
# File 'lib/backup_restore/backup_store.rb', line 80

def stats
  {
    used_bytes: used_bytes,
    free_bytes: free_bytes,
    count: files.size,
    last_backup_taken_at: latest_file&.last_modified,
  }
end

#upload_file(filename, source_path, content_type) ⇒ Object



72
73
74
# File 'lib/backup_restore/backup_store.rb', line 72

def upload_file(filename, source_path, content_type)
  fail NotImplementedError
end