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
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