-
Notifications
You must be signed in to change notification settings - Fork 676
/
backup.rb
140 lines (130 loc) · 4.75 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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# Load Ruby Core Libraries
require "time"
require "fileutils"
require "tempfile"
require "syslog"
require "yaml"
require "etc"
require "forwardable"
require "thread"
require "open4"
require "thor"
require "shellwords"
require "excon"
# Include response.inspect in error messages.
Excon.defaults[:debug_response] = true
# Excon should not retry failed requests. We handle that.
Excon.defaults[:middlewares].delete(Excon::Middleware::Idempotent)
##
# The Backup Ruby Gem
module Backup
##
# Backup's internal paths
LIBRARY_PATH = File.join(File.dirname(__FILE__), "backup")
STORAGE_PATH = File.join(LIBRARY_PATH, "storage")
SYNCER_PATH = File.join(LIBRARY_PATH, "syncer")
DATABASE_PATH = File.join(LIBRARY_PATH, "database")
COMPRESSOR_PATH = File.join(LIBRARY_PATH, "compressor")
ENCRYPTOR_PATH = File.join(LIBRARY_PATH, "encryptor")
NOTIFIER_PATH = File.join(LIBRARY_PATH, "notifier")
TEMPLATE_PATH = File.expand_path("../../templates", __FILE__)
##
# Autoload Backup storage files
module Storage
autoload :Base, File.join(STORAGE_PATH, "base")
autoload :Cycler, File.join(STORAGE_PATH, "cycler")
autoload :S3, File.join(STORAGE_PATH, "s3")
autoload :CloudFiles, File.join(STORAGE_PATH, "cloud_files")
autoload :Ninefold, File.join(STORAGE_PATH, "ninefold")
autoload :Dropbox, File.join(STORAGE_PATH, "dropbox")
autoload :FTP, File.join(STORAGE_PATH, "ftp")
autoload :SFTP, File.join(STORAGE_PATH, "sftp")
autoload :SCP, File.join(STORAGE_PATH, "scp")
autoload :RSync, File.join(STORAGE_PATH, "rsync")
autoload :Local, File.join(STORAGE_PATH, "local")
autoload :Qiniu, File.join(STORAGE_PATH, "qiniu")
end
##
# Autoload Backup syncer files
module Syncer
autoload :Base, File.join(SYNCER_PATH, "base")
module Cloud
autoload :Base, File.join(SYNCER_PATH, "cloud", "base")
autoload :LocalFile, File.join(SYNCER_PATH, "cloud", "local_file")
autoload :CloudFiles, File.join(SYNCER_PATH, "cloud", "cloud_files")
autoload :S3, File.join(SYNCER_PATH, "cloud", "s3")
end
module RSync
autoload :Base, File.join(SYNCER_PATH, "rsync", "base")
autoload :Local, File.join(SYNCER_PATH, "rsync", "local")
autoload :Push, File.join(SYNCER_PATH, "rsync", "push")
autoload :Pull, File.join(SYNCER_PATH, "rsync", "pull")
end
end
##
# Autoload Backup database files
module Database
autoload :Base, File.join(DATABASE_PATH, "base")
autoload :MySQL, File.join(DATABASE_PATH, "mysql")
autoload :PostgreSQL, File.join(DATABASE_PATH, "postgresql")
autoload :MongoDB, File.join(DATABASE_PATH, "mongodb")
autoload :Redis, File.join(DATABASE_PATH, "redis")
autoload :Riak, File.join(DATABASE_PATH, "riak")
autoload :OpenLDAP, File.join(DATABASE_PATH, "openldap")
autoload :SQLite, File.join(DATABASE_PATH, "sqlite")
end
##
# Autoload compressor files
module Compressor
autoload :Base, File.join(COMPRESSOR_PATH, "base")
autoload :Gzip, File.join(COMPRESSOR_PATH, "gzip")
autoload :Bzip2, File.join(COMPRESSOR_PATH, "bzip2")
autoload :Custom, File.join(COMPRESSOR_PATH, "custom")
end
##
# Autoload encryptor files
module Encryptor
autoload :Base, File.join(ENCRYPTOR_PATH, "base")
autoload :OpenSSL, File.join(ENCRYPTOR_PATH, "open_ssl")
autoload :GPG, File.join(ENCRYPTOR_PATH, "gpg")
end
##
# Autoload notification files
module Notifier
autoload :Base, File.join(NOTIFIER_PATH, "base")
autoload :Mail, File.join(NOTIFIER_PATH, "mail")
autoload :Twitter, File.join(NOTIFIER_PATH, "twitter")
autoload :Campfire, File.join(NOTIFIER_PATH, "campfire")
autoload :Prowl, File.join(NOTIFIER_PATH, "prowl")
autoload :Hipchat, File.join(NOTIFIER_PATH, "hipchat")
autoload :PagerDuty, File.join(NOTIFIER_PATH, "pagerduty")
autoload :Pushover, File.join(NOTIFIER_PATH, "pushover")
autoload :Slack, File.join(NOTIFIER_PATH, "slack")
autoload :HttpPost, File.join(NOTIFIER_PATH, "http_post")
autoload :Nagios, File.join(NOTIFIER_PATH, "nagios")
autoload :FlowDock, File.join(NOTIFIER_PATH, "flowdock")
autoload :Zabbix, File.join(NOTIFIER_PATH, "zabbix")
autoload :DataDog, File.join(NOTIFIER_PATH, "datadog")
autoload :Ses, File.join(NOTIFIER_PATH, "ses")
autoload :Command, File.join(NOTIFIER_PATH, "command")
end
##
# Require Backup base files
%w(
errors
logger
utilities
archive
binder
cleaner
model
config
cli
package
packager
pipeline
splitter
template
version
).each { |lib| require File.join(LIBRARY_PATH, lib) }
end