alg-backup 3.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -0
- data/.infinity_test +7 -0
- data/.rspec +3 -0
- data/Gemfile +25 -0
- data/Gemfile.lock +101 -0
- data/LICENSE.md +24 -0
- data/README.md +276 -0
- data/backup.gemspec +39 -0
- data/bin/backup +260 -0
- data/lib/backup.rb +168 -0
- data/lib/backup/archive.rb +73 -0
- data/lib/backup/cli.rb +50 -0
- data/lib/backup/compressor/base.rb +17 -0
- data/lib/backup/compressor/gzip.rb +61 -0
- data/lib/backup/configuration/base.rb +15 -0
- data/lib/backup/configuration/compressor/base.rb +10 -0
- data/lib/backup/configuration/compressor/gzip.rb +23 -0
- data/lib/backup/configuration/database/base.rb +18 -0
- data/lib/backup/configuration/database/mongodb.rb +37 -0
- data/lib/backup/configuration/database/mysql.rb +37 -0
- data/lib/backup/configuration/database/postgresql.rb +37 -0
- data/lib/backup/configuration/database/redis.rb +35 -0
- data/lib/backup/configuration/encryptor/base.rb +10 -0
- data/lib/backup/configuration/encryptor/gpg.rb +17 -0
- data/lib/backup/configuration/encryptor/open_ssl.rb +26 -0
- data/lib/backup/configuration/helpers.rb +54 -0
- data/lib/backup/configuration/notifier/base.rb +39 -0
- data/lib/backup/configuration/notifier/mail.rb +52 -0
- data/lib/backup/configuration/notifier/twitter.rb +21 -0
- data/lib/backup/configuration/storage/base.rb +18 -0
- data/lib/backup/configuration/storage/cloudfiles.rb +21 -0
- data/lib/backup/configuration/storage/dropbox.rb +29 -0
- data/lib/backup/configuration/storage/ftp.rb +25 -0
- data/lib/backup/configuration/storage/rsync.rb +25 -0
- data/lib/backup/configuration/storage/s3.rb +25 -0
- data/lib/backup/configuration/storage/scp.rb +25 -0
- data/lib/backup/configuration/storage/sftp.rb +25 -0
- data/lib/backup/configuration/syncer/rsync.rb +45 -0
- data/lib/backup/configuration/syncer/s3.rb +33 -0
- data/lib/backup/database/base.rb +33 -0
- data/lib/backup/database/mongodb.rb +137 -0
- data/lib/backup/database/mysql.rb +104 -0
- data/lib/backup/database/postgresql.rb +111 -0
- data/lib/backup/database/redis.rb +105 -0
- data/lib/backup/dependency.rb +84 -0
- data/lib/backup/encryptor/base.rb +17 -0
- data/lib/backup/encryptor/gpg.rb +78 -0
- data/lib/backup/encryptor/open_ssl.rb +67 -0
- data/lib/backup/finder.rb +39 -0
- data/lib/backup/logger.rb +86 -0
- data/lib/backup/model.rb +272 -0
- data/lib/backup/notifier/base.rb +29 -0
- data/lib/backup/notifier/binder.rb +32 -0
- data/lib/backup/notifier/mail.rb +141 -0
- data/lib/backup/notifier/templates/notify_failure.erb +31 -0
- data/lib/backup/notifier/templates/notify_success.erb +16 -0
- data/lib/backup/notifier/twitter.rb +87 -0
- data/lib/backup/storage/base.rb +67 -0
- data/lib/backup/storage/cloudfiles.rb +95 -0
- data/lib/backup/storage/dropbox.rb +87 -0
- data/lib/backup/storage/ftp.rb +114 -0
- data/lib/backup/storage/object.rb +45 -0
- data/lib/backup/storage/rsync.rb +99 -0
- data/lib/backup/storage/s3.rb +108 -0
- data/lib/backup/storage/scp.rb +106 -0
- data/lib/backup/storage/sftp.rb +106 -0
- data/lib/backup/syncer/base.rb +10 -0
- data/lib/backup/syncer/rsync.rb +117 -0
- data/lib/backup/syncer/s3.rb +116 -0
- data/lib/backup/version.rb +43 -0
- data/lib/templates/archive +4 -0
- data/lib/templates/compressor/gzip +4 -0
- data/lib/templates/database/mongodb +10 -0
- data/lib/templates/database/mysql +11 -0
- data/lib/templates/database/postgresql +11 -0
- data/lib/templates/database/redis +10 -0
- data/lib/templates/encryptor/gpg +9 -0
- data/lib/templates/encryptor/openssl +5 -0
- data/lib/templates/notifier/mail +14 -0
- data/lib/templates/notifier/twitter +9 -0
- data/lib/templates/readme +15 -0
- data/lib/templates/storage/cloudfiles +7 -0
- data/lib/templates/storage/dropbox +9 -0
- data/lib/templates/storage/ftp +8 -0
- data/lib/templates/storage/rsync +7 -0
- data/lib/templates/storage/s3 +8 -0
- data/lib/templates/storage/scp +8 -0
- data/lib/templates/storage/sftp +8 -0
- data/lib/templates/syncer/rsync +14 -0
- data/lib/templates/syncer/s3 +12 -0
- data/spec/archive_spec.rb +90 -0
- data/spec/backup_spec.rb +11 -0
- data/spec/compressor/gzip_spec.rb +59 -0
- data/spec/configuration/base_spec.rb +35 -0
- data/spec/configuration/compressor/gzip_spec.rb +28 -0
- data/spec/configuration/database/base_spec.rb +16 -0
- data/spec/configuration/database/mongodb_spec.rb +30 -0
- data/spec/configuration/database/mysql_spec.rb +32 -0
- data/spec/configuration/database/postgresql_spec.rb +32 -0
- data/spec/configuration/database/redis_spec.rb +30 -0
- data/spec/configuration/encryptor/gpg_spec.rb +25 -0
- data/spec/configuration/encryptor/open_ssl_spec.rb +31 -0
- data/spec/configuration/notifier/mail_spec.rb +32 -0
- data/spec/configuration/storage/cloudfiles_spec.rb +34 -0
- data/spec/configuration/storage/dropbox_spec.rb +43 -0
- data/spec/configuration/storage/ftp_spec.rb +40 -0
- data/spec/configuration/storage/rsync_spec.rb +37 -0
- data/spec/configuration/storage/s3_spec.rb +37 -0
- data/spec/configuration/storage/scp_spec.rb +40 -0
- data/spec/configuration/storage/sftp_spec.rb +40 -0
- data/spec/configuration/syncer/rsync_spec.rb +46 -0
- data/spec/configuration/syncer/s3_spec.rb +43 -0
- data/spec/database/base_spec.rb +30 -0
- data/spec/database/mongodb_spec.rb +144 -0
- data/spec/database/mysql_spec.rb +150 -0
- data/spec/database/postgresql_spec.rb +164 -0
- data/spec/database/redis_spec.rb +122 -0
- data/spec/encryptor/gpg_spec.rb +57 -0
- data/spec/encryptor/open_ssl_spec.rb +102 -0
- data/spec/logger_spec.rb +46 -0
- data/spec/model_spec.rb +236 -0
- data/spec/notifier/mail_spec.rb +97 -0
- data/spec/notifier/twitter_spec.rb +86 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/storage/base_spec.rb +33 -0
- data/spec/storage/cloudfiles_spec.rb +102 -0
- data/spec/storage/dropbox_spec.rb +105 -0
- data/spec/storage/ftp_spec.rb +133 -0
- data/spec/storage/object_spec.rb +74 -0
- data/spec/storage/rsync_spec.rb +115 -0
- data/spec/storage/s3_spec.rb +110 -0
- data/spec/storage/scp_spec.rb +129 -0
- data/spec/storage/sftp_spec.rb +125 -0
- data/spec/syncer/rsync_spec.rb +156 -0
- data/spec/syncer/s3_spec.rb +139 -0
- data/spec/version_spec.rb +21 -0
- metadata +217 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
module Configuration
|
|
5
|
+
module Notifier
|
|
6
|
+
class Base < Backup::Configuration::Base
|
|
7
|
+
class << self
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
# When set to true, the user will be notified by email
|
|
11
|
+
# when a backup process ends without raising any exceptions
|
|
12
|
+
attr_writer :on_success
|
|
13
|
+
|
|
14
|
+
##
|
|
15
|
+
# When set to true, the user will be notified by email
|
|
16
|
+
# when a backup process raises an exception before finishing
|
|
17
|
+
attr_writer :on_failure
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
##
|
|
22
|
+
# When @on_success is nil it means it hasn't been defined
|
|
23
|
+
# and will then default to true
|
|
24
|
+
def self.on_success
|
|
25
|
+
return true if @on_success.nil?
|
|
26
|
+
@on_success
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
##
|
|
30
|
+
# When @on_failure is nil it means it hasn't been defined
|
|
31
|
+
# and will then default to true
|
|
32
|
+
def self.on_failure
|
|
33
|
+
return true if @on_failure.nil?
|
|
34
|
+
@on_failure
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
module Configuration
|
|
5
|
+
module Notifier
|
|
6
|
+
class Mail < Base
|
|
7
|
+
class << self
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
# Sender and Receiver email addresses
|
|
11
|
+
# Examples:
|
|
12
|
+
# sender - my.email.address@gmail.com
|
|
13
|
+
# receiver - your.email.address@gmail.com
|
|
14
|
+
attr_accessor :from, :to
|
|
15
|
+
|
|
16
|
+
##
|
|
17
|
+
# The address to use
|
|
18
|
+
# Example: smtp.gmail.com
|
|
19
|
+
attr_accessor :address
|
|
20
|
+
|
|
21
|
+
##
|
|
22
|
+
# The port to connect to
|
|
23
|
+
# Example: 587
|
|
24
|
+
attr_accessor :port
|
|
25
|
+
|
|
26
|
+
##
|
|
27
|
+
# Your domain (if applicable)
|
|
28
|
+
# Example: mydomain.com
|
|
29
|
+
attr_accessor :domain
|
|
30
|
+
|
|
31
|
+
##
|
|
32
|
+
# Username and Password (sender email's credentials)
|
|
33
|
+
# Examples:
|
|
34
|
+
# user_name - meskyanichi
|
|
35
|
+
# password - my_secret_password
|
|
36
|
+
attr_accessor :user_name, :password
|
|
37
|
+
|
|
38
|
+
##
|
|
39
|
+
# Authentication type
|
|
40
|
+
# Example: plain
|
|
41
|
+
attr_accessor :authentication
|
|
42
|
+
|
|
43
|
+
##
|
|
44
|
+
# Automatically set TLS
|
|
45
|
+
# Example: true
|
|
46
|
+
attr_accessor :enable_starttls_auto
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
module Configuration
|
|
5
|
+
module Notifier
|
|
6
|
+
class Twitter < Base
|
|
7
|
+
class << self
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
# Twitter consumer key credentials
|
|
11
|
+
attr_accessor :consumer_key, :consumer_secret
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
# OAuth credentials
|
|
15
|
+
attr_accessor :oauth_token, :oauth_token_secret
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
module Configuration
|
|
5
|
+
module Storage
|
|
6
|
+
class Base < Backup::Configuration::Base
|
|
7
|
+
class << self
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
# Sets the limit to how many backups to keep in the remote location.
|
|
11
|
+
# If the limit exceeds it will remove the oldest backup to make room for the newest
|
|
12
|
+
attr_accessor :keep
|
|
13
|
+
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
module Configuration
|
|
5
|
+
module Storage
|
|
6
|
+
class CloudFiles < Base
|
|
7
|
+
class << self
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
# Rackspace Cloud Files Credentials
|
|
11
|
+
attr_accessor :api_key, :username
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
# Rackspace Cloud Files container name and path
|
|
15
|
+
attr_accessor :container, :path
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
module Configuration
|
|
5
|
+
module Storage
|
|
6
|
+
class Dropbox < Base
|
|
7
|
+
class << self
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
# Dropbox user credentials
|
|
11
|
+
attr_accessor :email, :password
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
# Dropbox API credentials
|
|
15
|
+
attr_accessor :api_key, :api_secret
|
|
16
|
+
|
|
17
|
+
##
|
|
18
|
+
# Path to where the backups will be stored
|
|
19
|
+
attr_accessor :path
|
|
20
|
+
|
|
21
|
+
##
|
|
22
|
+
# Dropbox connection timeout
|
|
23
|
+
attr_accessor :timeout
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
module Configuration
|
|
5
|
+
module Storage
|
|
6
|
+
class FTP < Base
|
|
7
|
+
class << self
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
# Server credentials
|
|
11
|
+
attr_accessor :username, :password
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
# Server IP Address and FTP port
|
|
15
|
+
attr_accessor :ip, :port
|
|
16
|
+
|
|
17
|
+
##
|
|
18
|
+
# Path to store backups to
|
|
19
|
+
attr_accessor :path
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
module Configuration
|
|
5
|
+
module Storage
|
|
6
|
+
class RSync < Base
|
|
7
|
+
class << self
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
# Server credentials
|
|
11
|
+
attr_accessor :username, :password
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
# Server IP Address and SSH port
|
|
15
|
+
attr_accessor :ip, :port
|
|
16
|
+
|
|
17
|
+
##
|
|
18
|
+
# Path to store backups to
|
|
19
|
+
attr_accessor :path
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
module Configuration
|
|
5
|
+
module Storage
|
|
6
|
+
class S3 < Base
|
|
7
|
+
class << self
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
# Amazon Simple Storage Service (S3) Credentials
|
|
11
|
+
attr_accessor :access_key_id, :secret_access_key
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
# Amazon S3 bucket name and path
|
|
15
|
+
attr_accessor :bucket, :path
|
|
16
|
+
|
|
17
|
+
##
|
|
18
|
+
# Region of the specified S3 bucket
|
|
19
|
+
attr_accessor :region
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
module Configuration
|
|
5
|
+
module Storage
|
|
6
|
+
class SCP < Base
|
|
7
|
+
class << self
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
# Server credentials
|
|
11
|
+
attr_accessor :username, :password
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
# Server IP Address and SCP port
|
|
15
|
+
attr_accessor :ip, :port
|
|
16
|
+
|
|
17
|
+
##
|
|
18
|
+
# Path to store backups to
|
|
19
|
+
attr_accessor :path
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
module Configuration
|
|
5
|
+
module Storage
|
|
6
|
+
class SFTP < Base
|
|
7
|
+
class << self
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
# Server credentials
|
|
11
|
+
attr_accessor :username, :password
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
# Server IP Address and SFTP port
|
|
15
|
+
attr_accessor :ip, :port
|
|
16
|
+
|
|
17
|
+
##
|
|
18
|
+
# Path to store backups to
|
|
19
|
+
attr_accessor :path
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
module Configuration
|
|
5
|
+
module Syncer
|
|
6
|
+
class RSync < Base
|
|
7
|
+
class << self
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
# Server credentials
|
|
11
|
+
attr_accessor :username, :password
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
# Server IP Address and SSH port
|
|
15
|
+
attr_accessor :ip
|
|
16
|
+
|
|
17
|
+
##
|
|
18
|
+
# The SSH port to connect to
|
|
19
|
+
attr_accessor :port
|
|
20
|
+
|
|
21
|
+
##
|
|
22
|
+
# Directories to sync
|
|
23
|
+
attr_accessor :directories
|
|
24
|
+
|
|
25
|
+
##
|
|
26
|
+
# Path to store the synced files/directories to
|
|
27
|
+
attr_accessor :path
|
|
28
|
+
|
|
29
|
+
##
|
|
30
|
+
# Flag for mirroring the files/directories
|
|
31
|
+
attr_accessor :mirror
|
|
32
|
+
|
|
33
|
+
##
|
|
34
|
+
# Flag for compressing (only compresses for the transfer)
|
|
35
|
+
attr_accessor :compress
|
|
36
|
+
|
|
37
|
+
##
|
|
38
|
+
# Additional options for the rsync cli
|
|
39
|
+
attr_accessor :additional_options
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
module Configuration
|
|
5
|
+
module Syncer
|
|
6
|
+
class S3 < Base
|
|
7
|
+
class << self
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
# Amazon Simple Storage Service (S3) Credentials
|
|
11
|
+
attr_accessor :access_key_id, :secret_access_key
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
# Amazon S3 bucket name and path to sync to
|
|
15
|
+
attr_accessor :bucket, :path
|
|
16
|
+
|
|
17
|
+
##
|
|
18
|
+
# Directories to sync
|
|
19
|
+
attr_accessor :directories
|
|
20
|
+
|
|
21
|
+
##
|
|
22
|
+
# Flag to enable mirroring
|
|
23
|
+
attr_accessor :mirror
|
|
24
|
+
|
|
25
|
+
##
|
|
26
|
+
# Additional options for the s3sync cli
|
|
27
|
+
attr_accessor :additional_options
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
module Database
|
|
5
|
+
class Base
|
|
6
|
+
include Backup::CLI
|
|
7
|
+
include Backup::Configuration::Helpers
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
# Contains the path to where the database should be dumped
|
|
11
|
+
attr_accessor :dump_path
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
# Allows the user to specify the path to a "dump" utility
|
|
15
|
+
# in case it cannot be auto-detected by Backup
|
|
16
|
+
attr_accessor :utility_path
|
|
17
|
+
|
|
18
|
+
##
|
|
19
|
+
# Defines the @dump_path and ensures it exists by creating it
|
|
20
|
+
def prepare!
|
|
21
|
+
@dump_path = File.join(TMP_PATH, TRIGGER, self.class.name.split('::').last)
|
|
22
|
+
mkdir(dump_path)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
##
|
|
26
|
+
# Logs a message to the console and log file to inform
|
|
27
|
+
# the client that Backup is dumping the database
|
|
28
|
+
def log!
|
|
29
|
+
Logger.message("#{ self.class } started dumping and archiving \"#{ name }\".")
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
module Database
|
|
5
|
+
class MongoDB < Base
|
|
6
|
+
|
|
7
|
+
##
|
|
8
|
+
# Name of the database that needs to get dumped
|
|
9
|
+
attr_accessor :name
|
|
10
|
+
|
|
11
|
+
##
|
|
12
|
+
# Credentials for the specified database
|
|
13
|
+
attr_accessor :username, :password
|
|
14
|
+
|
|
15
|
+
##
|
|
16
|
+
# Connectivity options
|
|
17
|
+
attr_accessor :host, :port
|
|
18
|
+
|
|
19
|
+
##
|
|
20
|
+
# IPv6 support (disabled by default)
|
|
21
|
+
attr_accessor :ipv6
|
|
22
|
+
|
|
23
|
+
##
|
|
24
|
+
# Collections to dump, collections that aren't specified won't get dumped
|
|
25
|
+
attr_accessor :only_collections
|
|
26
|
+
|
|
27
|
+
##
|
|
28
|
+
# Additional "mongodump" options
|
|
29
|
+
attr_accessor :additional_options
|
|
30
|
+
|
|
31
|
+
##
|
|
32
|
+
# Creates a new instance of the MongoDB database object
|
|
33
|
+
def initialize(&block)
|
|
34
|
+
load_defaults!
|
|
35
|
+
|
|
36
|
+
@only_collections ||= Array.new
|
|
37
|
+
@additional_options ||= Array.new
|
|
38
|
+
@ipv6 ||= false
|
|
39
|
+
|
|
40
|
+
instance_eval(&block)
|
|
41
|
+
prepare!
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
##
|
|
45
|
+
# Builds the MongoDB credentials syntax to authenticate the user
|
|
46
|
+
# to perform the database dumping process
|
|
47
|
+
def credential_options
|
|
48
|
+
%w[username password].map do |option|
|
|
49
|
+
next if send(option).nil? or send(option).empty?
|
|
50
|
+
"--#{option}='#{send(option)}'"
|
|
51
|
+
end.compact.join("\s")
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
##
|
|
55
|
+
# Builds the MongoDB connectivity options syntax to connect the user
|
|
56
|
+
# to perform the database dumping process
|
|
57
|
+
def connectivity_options
|
|
58
|
+
%w[host port].map do |option|
|
|
59
|
+
next if send(option).nil? or (send(option).respond_to?(:empty?) and send(option).empty?)
|
|
60
|
+
"--#{option}='#{send(option)}'"
|
|
61
|
+
end.compact.join("\s")
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
##
|
|
65
|
+
# Builds a MongoDB compatible string for the
|
|
66
|
+
# additional options specified by the user
|
|
67
|
+
def additional_options
|
|
68
|
+
@additional_options.join("\s")
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
##
|
|
72
|
+
# Returns an array of collections to dump
|
|
73
|
+
def collections_to_dump
|
|
74
|
+
@only_collections
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
##
|
|
78
|
+
# Returns the MongoDB database selector syntax
|
|
79
|
+
def database
|
|
80
|
+
"--db='#{ name }'"
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
##
|
|
84
|
+
# Returns the mongodump syntax for enabling ipv6
|
|
85
|
+
def ipv6
|
|
86
|
+
@ipv6.eql?(true) ? '--ipv6' : ''
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
##
|
|
90
|
+
# Returns the MongoDB syntax for determining where to output all the database dumps,
|
|
91
|
+
# e.g. ~/Backup/.tmp/MongoDB/<databases here>/<database collections>
|
|
92
|
+
def dump_directory
|
|
93
|
+
"--out='#{ dump_path }'"
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
##
|
|
97
|
+
# Builds the full mongodump string based on all attributes
|
|
98
|
+
def mongodump
|
|
99
|
+
"#{ utility(:mongodump) } #{ database } #{ credential_options } " +
|
|
100
|
+
"#{ connectivity_options } #{ ipv6 } #{ additional_options } #{ dump_directory }"
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
##
|
|
104
|
+
# Performs the mongodump command and outputs the data to the
|
|
105
|
+
# specified path based on the 'trigger'. If the user hasn't specified any
|
|
106
|
+
# specific collections to dump, it'll dump everything. If the user has specified
|
|
107
|
+
# collections to dump, it'll loop through the array of collections and invoke the
|
|
108
|
+
# 'mongodump' command once per collection
|
|
109
|
+
def perform!
|
|
110
|
+
log!
|
|
111
|
+
|
|
112
|
+
if collections_to_dump.is_a?(Array) and not collections_to_dump.empty?
|
|
113
|
+
specific_collection_dump!
|
|
114
|
+
else
|
|
115
|
+
dump!
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
##
|
|
120
|
+
# Builds and runs the mongodump command
|
|
121
|
+
def dump!
|
|
122
|
+
run(mongodump)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
##
|
|
126
|
+
# For each collection in the @only_collections array, it'll
|
|
127
|
+
# build the whole 'mongodump' command, append the '--collection' option,
|
|
128
|
+
# and run the command built command
|
|
129
|
+
def specific_collection_dump!
|
|
130
|
+
collections_to_dump.each do |collection|
|
|
131
|
+
run("#{mongodump} --collection='#{collection}'")
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|