Class: Backup::S3

Inherits:
Object
  • Object
show all
Includes:
S3Helper
Defined in:
lib/capistrano/ops/rails/lib/backup/s3.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from S3Helper

#get_current_month, #get_delete_items, #get_items_by_month, #get_months, #get_old_months

Constructor Details

#initialize(endpoint: ENV['S3_BACKUP_ENDPOINT'], region: ENV['S3_BACKUP_REGION'], access_key_id: ENV['S3_BACKUP_KEY'], secret_access_key: ENV['S3_BACKUP_SECRET']) ⇒ S3

Returns a new instance of S3.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/capistrano/ops/rails/lib/backup/s3.rb', line 10

def initialize(endpoint: ENV['S3_BACKUP_ENDPOINT'], region: ENV['S3_BACKUP_REGION'], access_key_id: ENV['S3_BACKUP_KEY'],
               secret_access_key: ENV['S3_BACKUP_SECRET'])
  self.endpoint = endpoint
  self.region = region
  self.access_key_id = access_key_id
  self.secret_access_key = secret_access_key
  configuration = {
    region: region,
    access_key_id: access_key_id,
    secret_access_key: secret_access_key,
    force_path_style: true

  }
  configuration[:endpoint] = endpoint unless endpoint.nil?
  self.s3_resource = Aws::S3::Resource.new(configuration)
end

Instance Attribute Details

#access_key_idObject

Returns the value of attribute access_key_id.



8
9
10
# File 'lib/capistrano/ops/rails/lib/backup/s3.rb', line 8

def access_key_id
  @access_key_id
end

#endpointObject

Returns the value of attribute endpoint.



8
9
10
# File 'lib/capistrano/ops/rails/lib/backup/s3.rb', line 8

def endpoint
  @endpoint
end

#regionObject

Returns the value of attribute region.



8
9
10
# File 'lib/capistrano/ops/rails/lib/backup/s3.rb', line 8

def region
  @region
end

#s3_resourceObject

Returns the value of attribute s3_resource.



8
9
10
# File 'lib/capistrano/ops/rails/lib/backup/s3.rb', line 8

def s3_resource
  @s3_resource
end

#secret_access_keyObject

Returns the value of attribute secret_access_key.



8
9
10
# File 'lib/capistrano/ops/rails/lib/backup/s3.rb', line 8

def secret_access_key
  @secret_access_key
end

Instance Method Details

#remove_old_backups(basename, keep: 5) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/capistrano/ops/rails/lib/backup/s3.rb', line 37

def remove_old_backups(basename, keep: 5)
  all_items = s3_resource.bucket(ENV['S3_BACKUP_BUCKET']).objects(prefix: basename).map do |item|
    { key: item.key, last_modified: item.last_modified }
  end

  all_items = all_items.sort_by { |hsh| hsh[:last_modified] }.reverse
  months = get_months(all_items)
  old_months = get_old_months(months)
  if old_months&.empty? || old_months.nil?
    puts 'No old months to remove'
  else
    old_months.each do |month|
      items = get_items_by_month(all_items, month)
      delete_items = get_delete_items(items, 1)
      puts "Removing #{month} from S3"
      delete_items.each do |item_obj|
        puts "Removing #{item_obj[:key]} from S3"
        s3_resource.bucket(ENV['S3_BACKUP_BUCKET']).object(item_obj[:key]).delete
      end
    end
    puts 'Old months removed from S3'
  end
  current_month = get_current_month(all_items)
  current_month_delete_items = get_delete_items(current_month, keep)
  if current_month_delete_items&.empty? || current_month_delete_items.nil?
    puts 'No old backups to remove'
    exit(0)
  end

  current_month_delete_items.each do |item_obj|
    puts "Removing #{item_obj[:key]} from S3"
    s3_resource.bucket(ENV['S3_BACKUP_BUCKET']).object(item_obj[:key]).delete
  end
  puts 'Old backups removed from S3'
rescue Backup::Error => e
  puts "Remove failed: #{e.message}"
  raise e
end

#upload(backup_file, key) ⇒ Object



27
28
29
30
31
32
33
34
35
# File 'lib/capistrano/ops/rails/lib/backup/s3.rb', line 27

def upload(backup_file, key)
  begin
    s3_resource.bucket(ENV['S3_BACKUP_BUCKET']).object(key).upload_file(backup_file)
  rescue Backup::Error => e
    puts "Upload failed: #{e.message}"
    raise e
  end
  'File uploaded to S3'
end