class Zeus::PgBaseBackup
Attributes
bucket[R]
dir[R]
prefix[R]
s3[R]
Public Class Methods
new(s3:, bucket:, prefix: 'postgresql')
click to toggle source
@param s3 [Aws::Client::S3]
# File lib/zeus/pg_base_backup.rb, line 8 def initialize(s3:, bucket:, prefix: 'postgresql') @dir = Dir.mktmpdir('pg-base-backup') @s3 = s3 @bucket = bucket @prefix = prefix end
Public Instance Methods
clear(past_time)
click to toggle source
clear previously sored backup @param [Time]
# File lib/zeus/pg_base_backup.rb, line 45 def clear(past_time) Zeus::S3Iterate.new(s3).delete_if(bucket: bucket, prefix: prefix) do |file| break(false) unless past_time >= file.last_modified puts "[-] removing (last mod #{file.last_modified}) #{file.key}" end end
dump(user:, password: nil, port: '5432', host: 'localhost', rate: '10M')
click to toggle source
# File lib/zeus/pg_base_backup.rb, line 15 def dump(user:, password: nil, port: '5432', host: 'localhost', rate: '10M') system <<~CMD.tr("\n", ' '), exception: true PG_COLOR=always PGPASSWORD=#{Shellwords.escape password} pg_basebackup -D #{dir.pathmap} -Ft -z -Xs --host #{host} --port #{port} --username #{user} --max-rate="#{rate}" --write-recovery-conf --progress --verbose CMD end
unlink()
click to toggle source
# File lib/zeus/pg_base_backup.rb, line 53 def unlink FileUtils.remove_entry(dir.pathmap) if File.directory?(dir.pathmap) end
upload()
click to toggle source
# File lib/zeus/pg_base_backup.rb, line 29 def upload Dir.entries(dir.pathmap).each do |filename| next if filename.start_with?('.') key = File.join(folder, filename) file = File.open(File.join(dir, filename), 'rb') io = Zeus::S3Io.new(file) io.upload(s3, bucket: bucket, key: key) do |progress| puts "[#{progress.to_i}%] Uploading #{key}" end end end
Private Instance Methods
folder()
click to toggle source
# File lib/zeus/pg_base_backup.rb, line 59 def folder "#{prefix}/#{timestamp}" end
timestamp()
click to toggle source
# File lib/zeus/pg_base_backup.rb, line 63 def timestamp @timestamp ||= Time.current.strftime('%Y-%m-%d-%H-%M') end