class DeeBee::Backup

Attributes

backup_settings[R]

Public Class Methods

new(configuration = DeeBee::Configuration.new) click to toggle source
# File lib/dee_bee/backup.rb, line 9
def initialize (configuration = DeeBee::Configuration.new)
  @backup_settings = configuration.settings['backup']
end

Public Instance Methods

execute() click to toggle source
# File lib/dee_bee/backup.rb, line 13
def execute
  puts "\nCreating backup..."
  time_elapsed_for("Create backup") do
    if performing_mysql_backup?
      validate_my_cnf_present
      validate_host_setting_present
      validate_database_name_setting_present
      validate_path_exists

      # NOTE - no use of -u or -p as we are using ~/.my.cnf for these arguments
      run_command("/usr/bin/env mysqldump -h#{database_host} #{database_name} | gzip > #{backup_filepath}")

      validate_mysqldump_created_file
    else
      raise "Unknown/empty database adapter.  Please correct your settings yaml"
    end
  end
end

Private Instance Methods

backup_filepath() click to toggle source
# File lib/dee_bee/backup.rb, line 58
def backup_filepath
  if @backup_filepath.nil?
    directory = backup_settings['directory']
    file_prefix =  backup_settings['file_prefix']
    @backup_filepath = File.join(directory, "#{file_prefix}_#{Time.now.strftime('%Y%m%d_%H%M%S')}.sql.gz")
  end

  @backup_filepath
end
database_host() click to toggle source
# File lib/dee_bee/backup.rb, line 76
def database_host
  backup_settings['database']['host'] rescue nil
end
database_name() click to toggle source
# File lib/dee_bee/backup.rb, line 80
def database_name
  backup_settings['database']['database_name'] rescue nil
end
database_provider() click to toggle source
# File lib/dee_bee/backup.rb, line 84
def database_provider
  backup_settings['database']['provider'] rescue nil
end
performing_mysql_backup?() click to toggle source
# File lib/dee_bee/backup.rb, line 34
def performing_mysql_backup?
  database_provider.downcase =~ /mysql/
end
validate_database_name_setting_present() click to toggle source
# File lib/dee_bee/backup.rb, line 46
def validate_database_name_setting_present
  raise "database name not defined in setting yaml file" if database_name.nil?
end
validate_host_setting_present() click to toggle source
# File lib/dee_bee/backup.rb, line 42
def validate_host_setting_present
  raise "database host not defined in setting yaml file" if database_host.nil?
end
validate_my_cnf_present() click to toggle source
# File lib/dee_bee/backup.rb, line 38
def validate_my_cnf_present
  raise "~/.my.cnf file not found.  Please create and define user and password arguments" unless File.exists?( File.expand_path("~/.my.cnf") )
end
validate_mysqldump_created_file() click to toggle source
# File lib/dee_bee/backup.rb, line 68
def validate_mysqldump_created_file
  if File.exists?(backup_filepath)
    puts "  created #{backup_filepath}"
  else
    raise "Backup did not create file!"
  end
end
validate_path_exists() click to toggle source
# File lib/dee_bee/backup.rb, line 50
def validate_path_exists
  directories = backup_filepath.split(File::SEPARATOR).map{ |directory| directory.empty? ? nil : directory }.compact[0..-2]
  (0..(directories.size-1)).each do |index|
    directory = "#{File::SEPARATOR}#{directories[0..index].join(File::SEPARATOR)}"
    raise "Directory does not exist => #{directory}" unless File.exists?(directory)
  end
end