class Postmodern::Backup::Backup

Public Instance Methods

parser() click to toggle source
# File lib/postmodern/backup/backup.rb, line 14
def parser
  @parser ||= OptionParser.new do |opts|
    opts.banner = 'Usage: postmodern backup <options>'

    opts.separator ''
    opts.separator 'Creates a gzipped archive of a pg_basebackup, with file name:'
    opts.separator '  NAME.basebackup.CURRENTDATE.tar.gz'
    opts.separator ''

    opts.on('-U', '--user USER', 'Postgres user (default: "postgres")') do |o|
      self.options[:user] = o
    end

    opts.on('-d', '--directory DIRECTORY', 'Local directory to put backups (required)') do |o|
      self.options[:directory] = o
    end

    opts.on('-H', '--host HOST', 'Host of database (eg: fqdn, IP) (required)') do |o|
      self.options[:host] = o
    end

    opts.on('-p', '--port PORT', 'Port of database (default: 5432)') do |o|
      self.options[:port] = o
    end

    opts.on('-n', '--name NAME', 'Name of backup (required)') do |o|
      self.options[:name] = o
    end

    opts.on('--pigz CONCURRENCY', 'Use pigz with concurrency CONCURRENCY') do |o|
      self.options[:pigz] = true
      self.options[:concurrency] = o
    end

    opts.on_tail("-h", "--help", "Show this message") do
      puts opts
      exit
    end

    opts.on_tail("--version", "Show version") do
      require 'postmodern/version'
      puts Postmodern::VERSION
      exit
    end
  end
end
run() click to toggle source
# File lib/postmodern/backup/backup.rb, line 61
def run
  setup_environment
  run_basebackup
end

Private Instance Methods

archive_command() click to toggle source

backup methods

# File lib/postmodern/backup/backup.rb, line 92
def archive_command
  return 'gzip -9' unless options[:pigz]
  "pigz -9 -p #{options[:concurrency]}"
end
archive_file() click to toggle source
# File lib/postmodern/backup/backup.rb, line 97
def archive_file
  "#{directory}/#{name}.basebackup.#{current_date}.tar.gz"
end
basebackup_command() click to toggle source
# File lib/postmodern/backup/backup.rb, line 101
def basebackup_command
  "pg_basebackup --checkpoint=fast -F tar -D - -U #{user} -h #{host} -p #{port} | #{archive_command} > #{archive_file}"
end
current_date() click to toggle source
# File lib/postmodern/backup/backup.rb, line 105
def current_date
  Time.now.strftime('%Y%m%d')
end
directory() click to toggle source

option wrappers

# File lib/postmodern/backup/backup.rb, line 70
def directory
  @options[:directory]
end
host() click to toggle source
# File lib/postmodern/backup/backup.rb, line 74
def host
  @options[:host]
end
name() click to toggle source
# File lib/postmodern/backup/backup.rb, line 78
def name
  @options[:name]
end
port() click to toggle source
# File lib/postmodern/backup/backup.rb, line 82
def port
  @options[:port]
end
run_basebackup() click to toggle source
# File lib/postmodern/backup/backup.rb, line 109
def run_basebackup
  $stderr.puts "[#{Time.now.utc}] Creating basebackup: #{host}"
  stdout, stderr, status = Open3.capture3(script_env, basebackup_command)
  $stdout.print stdout
  $stderr.print stderr
  $stderr.puts "[#{Time.now.utc}] Finished basebackup: #{host}"
  exit status.exitstatus
end
script_env() click to toggle source
# File lib/postmodern/backup/backup.rb, line 122
def script_env
  {
    'PATH' => ENV['PATH']
  }
end
setup_environment() click to toggle source
# File lib/postmodern/backup/backup.rb, line 118
def setup_environment
  FileUtils.mkdir_p(directory)
end
user() click to toggle source
# File lib/postmodern/backup/backup.rb, line 86
def user
  @options[:user]
end