/
backup.rb
112 lines (95 loc) · 3.69 KB
/
backup.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# Load Gems
require 'hirb'
# Load Environments
require 'backup/environment/base'
require 'backup/environment/unix'
require 'backup/environment/rails'
# Load Configuration
require 'backup/configuration/attributes'
require 'backup/configuration/base'
require 'backup/configuration/adapter'
require 'backup/configuration/adapter_options'
require 'backup/configuration/storage'
require 'backup/configuration/mail'
require 'backup/configuration/smtp'
require 'backup/configuration/helpers'
require 'backup/command_helper'
# Include the Configuration and Environment Helpers
include Backup::Configuration::Helpers
include Backup::Environment::Base
# Load either UNIX or RAILS environment configuration
case current_environment
when :unix then include Backup::Environment::Unix
when :rails then include Backup::Environment::Rails
end
# Load configuration
if File.exist?(File.join(BACKUP_PATH, 'config', 'backup.rb'))
require File.join(BACKUP_PATH, 'config', 'backup.rb')
end
# Load Mail Notifier
require 'backup/mail/base'
# Set Mail Configuration (extracted from the backup.rb configuration file) inside the Mail Class
Backup::Mail::Base.setup(@mail_configuration)
# Backup Module
module Backup
module Adapters
autoload :Base, 'backup/adapters/base'
autoload :MySQL, 'backup/adapters/mysql'
autoload :SQLite, 'backup/adapters/sqlite'
autoload :PostgreSQL, 'backup/adapters/postgresql'
autoload :Archive, 'backup/adapters/archive'
autoload :Custom, 'backup/adapters/custom'
end
module Storage
autoload :S3, 'backup/storage/s3'
autoload :SCP, 'backup/storage/scp'
autoload :FTP, 'backup/storage/ftp'
autoload :SFTP, 'backup/storage/sftp'
autoload :Local, 'backup/storage/local'
end
module Record
autoload :Base, 'backup/record/base'
autoload :S3, 'backup/record/s3'
autoload :SCP, 'backup/record/scp'
autoload :FTP, 'backup/record/ftp'
autoload :SFTP, 'backup/record/sftp'
autoload :Local, 'backup/record/local'
end
class Setup
attr_accessor :trigger, :procedures, :procedure
# Sets the Trigger and All Available Procedures.
# Will not find a specific procedure if the "trigger" argument is set to false.
def initialize(trigger, procedures)
self.trigger = trigger
self.procedures = procedures
self.procedure = find_triggered_procedure unless trigger.eql?(false)
end
# Initializes one of the few adapters and start the backup process
def initialize_adapter
case procedure.adapter_name.to_sym
when :mysql then Backup::Adapters::MySQL.new trigger, procedure
when :sqlite then Backup::Adapters::SQLite.new trigger, procedure
when :postgresql then Backup::Adapters::PostgreSQL.new trigger, procedure
when :archive then Backup::Adapters::Archive.new trigger, procedure
when :custom then Backup::Adapters::Custom.new trigger, procedure
else
puts "Unknown Adapter: \"#{procedure.adapter_name}\"."
exit
end
end
# Scans through all the backup settings and returns the backup setting
# that was specified in the "trigger" argument.
# If an non-existing trigger is specified, it will raise an error and display
# all the available triggers.
def find_triggered_procedure
procedures.each do |procedure|
if procedure.trigger.eql?(trigger)
return procedure
end
end
available_triggers = procedures.map {|procedure| "- #{procedure.trigger}\n" }
puts "Could not find a backup procedure with the trigger \"#{trigger}\". \nHere's a list of available triggers:\n#{available_triggers}"
exit
end
end
end