backup 3.0.2 → 3.0.3.build.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. data/bin/backup +12 -190
  2. metadata +7 -191
  3. data/.gitignore +0 -2
  4. data/.infinity_test +0 -7
  5. data/.rspec +0 -3
  6. data/Gemfile +0 -17
  7. data/Gemfile.lock +0 -88
  8. data/LICENSE.md +0 -24
  9. data/README.md +0 -236
  10. data/backup.gemspec +0 -41
  11. data/lib/backup.rb +0 -148
  12. data/lib/backup/archive.rb +0 -54
  13. data/lib/backup/cli.rb +0 -50
  14. data/lib/backup/compressor/base.rb +0 -17
  15. data/lib/backup/compressor/gzip.rb +0 -61
  16. data/lib/backup/configuration/base.rb +0 -15
  17. data/lib/backup/configuration/compressor/base.rb +0 -10
  18. data/lib/backup/configuration/compressor/gzip.rb +0 -23
  19. data/lib/backup/configuration/database/base.rb +0 -18
  20. data/lib/backup/configuration/database/mongodb.rb +0 -37
  21. data/lib/backup/configuration/database/mysql.rb +0 -37
  22. data/lib/backup/configuration/database/postgresql.rb +0 -37
  23. data/lib/backup/configuration/database/redis.rb +0 -35
  24. data/lib/backup/configuration/encryptor/base.rb +0 -10
  25. data/lib/backup/configuration/encryptor/gpg.rb +0 -17
  26. data/lib/backup/configuration/encryptor/open_ssl.rb +0 -26
  27. data/lib/backup/configuration/helpers.rb +0 -54
  28. data/lib/backup/configuration/notifier/base.rb +0 -39
  29. data/lib/backup/configuration/notifier/mail.rb +0 -52
  30. data/lib/backup/configuration/storage/base.rb +0 -18
  31. data/lib/backup/configuration/storage/cloudfiles.rb +0 -21
  32. data/lib/backup/configuration/storage/dropbox.rb +0 -25
  33. data/lib/backup/configuration/storage/ftp.rb +0 -25
  34. data/lib/backup/configuration/storage/rsync.rb +0 -25
  35. data/lib/backup/configuration/storage/s3.rb +0 -25
  36. data/lib/backup/configuration/storage/scp.rb +0 -25
  37. data/lib/backup/configuration/storage/sftp.rb +0 -25
  38. data/lib/backup/database/base.rb +0 -33
  39. data/lib/backup/database/mongodb.rb +0 -137
  40. data/lib/backup/database/mysql.rb +0 -104
  41. data/lib/backup/database/postgresql.rb +0 -111
  42. data/lib/backup/database/redis.rb +0 -105
  43. data/lib/backup/encryptor/base.rb +0 -17
  44. data/lib/backup/encryptor/gpg.rb +0 -78
  45. data/lib/backup/encryptor/open_ssl.rb +0 -67
  46. data/lib/backup/finder.rb +0 -39
  47. data/lib/backup/logger.rb +0 -80
  48. data/lib/backup/model.rb +0 -249
  49. data/lib/backup/notifier/base.rb +0 -29
  50. data/lib/backup/notifier/binder.rb +0 -32
  51. data/lib/backup/notifier/mail.rb +0 -141
  52. data/lib/backup/notifier/templates/notify_failure.erb +0 -31
  53. data/lib/backup/notifier/templates/notify_success.erb +0 -16
  54. data/lib/backup/storage/base.rb +0 -67
  55. data/lib/backup/storage/cloudfiles.rb +0 -95
  56. data/lib/backup/storage/dropbox.rb +0 -82
  57. data/lib/backup/storage/ftp.rb +0 -114
  58. data/lib/backup/storage/object.rb +0 -45
  59. data/lib/backup/storage/rsync.rb +0 -100
  60. data/lib/backup/storage/s3.rb +0 -108
  61. data/lib/backup/storage/scp.rb +0 -105
  62. data/lib/backup/storage/sftp.rb +0 -106
  63. data/lib/backup/version.rb +0 -72
  64. data/lib/templates/archive +0 -4
  65. data/lib/templates/compressor/gzip +0 -4
  66. data/lib/templates/database/mongodb +0 -10
  67. data/lib/templates/database/mysql +0 -11
  68. data/lib/templates/database/postgresql +0 -11
  69. data/lib/templates/database/redis +0 -10
  70. data/lib/templates/encryptor/gpg +0 -9
  71. data/lib/templates/encryptor/openssl +0 -5
  72. data/lib/templates/notifier/mail +0 -14
  73. data/lib/templates/readme +0 -15
  74. data/lib/templates/storage/cloudfiles +0 -7
  75. data/lib/templates/storage/dropbox +0 -8
  76. data/lib/templates/storage/ftp +0 -8
  77. data/lib/templates/storage/rsync +0 -7
  78. data/lib/templates/storage/s3 +0 -8
  79. data/lib/templates/storage/scp +0 -8
  80. data/lib/templates/storage/sftp +0 -8
  81. data/spec/archive_spec.rb +0 -53
  82. data/spec/backup_spec.rb +0 -11
  83. data/spec/compressor/gzip_spec.rb +0 -59
  84. data/spec/configuration/base_spec.rb +0 -35
  85. data/spec/configuration/compressor/gzip_spec.rb +0 -28
  86. data/spec/configuration/database/base_spec.rb +0 -16
  87. data/spec/configuration/database/mongodb_spec.rb +0 -30
  88. data/spec/configuration/database/mysql_spec.rb +0 -32
  89. data/spec/configuration/database/postgresql_spec.rb +0 -32
  90. data/spec/configuration/database/redis_spec.rb +0 -30
  91. data/spec/configuration/encryptor/gpg_spec.rb +0 -25
  92. data/spec/configuration/encryptor/open_ssl_spec.rb +0 -31
  93. data/spec/configuration/notifier/mail_spec.rb +0 -32
  94. data/spec/configuration/storage/cloudfiles_spec.rb +0 -34
  95. data/spec/configuration/storage/dropbox_spec.rb +0 -40
  96. data/spec/configuration/storage/ftp_spec.rb +0 -40
  97. data/spec/configuration/storage/rsync_spec.rb +0 -37
  98. data/spec/configuration/storage/s3_spec.rb +0 -37
  99. data/spec/configuration/storage/scp_spec.rb +0 -40
  100. data/spec/configuration/storage/sftp_spec.rb +0 -40
  101. data/spec/database/base_spec.rb +0 -30
  102. data/spec/database/mongodb_spec.rb +0 -144
  103. data/spec/database/mysql_spec.rb +0 -150
  104. data/spec/database/postgresql_spec.rb +0 -164
  105. data/spec/database/redis_spec.rb +0 -122
  106. data/spec/encryptor/gpg_spec.rb +0 -57
  107. data/spec/encryptor/open_ssl_spec.rb +0 -102
  108. data/spec/logger_spec.rb +0 -37
  109. data/spec/model_spec.rb +0 -236
  110. data/spec/notifier/mail_spec.rb +0 -97
  111. data/spec/spec_helper.rb +0 -21
  112. data/spec/storage/base_spec.rb +0 -33
  113. data/spec/storage/cloudfiles_spec.rb +0 -102
  114. data/spec/storage/dropbox_spec.rb +0 -89
  115. data/spec/storage/ftp_spec.rb +0 -133
  116. data/spec/storage/object_spec.rb +0 -74
  117. data/spec/storage/rsync_spec.rb +0 -115
  118. data/spec/storage/s3_spec.rb +0 -110
  119. data/spec/storage/scp_spec.rb +0 -129
  120. data/spec/storage/sftp_spec.rb +0 -125
  121. data/spec/version_spec.rb +0 -32
@@ -1,31 +0,0 @@
1
-
2
- There seemed to be a problem backing up <%= @model.label %> (<%= @model.trigger %>).
3
-
4
- ===========================================================================
5
- Exception that got raised:
6
- <%= @exception.to_s %>
7
- ===========================================================================
8
- <%= @exception.backtrace.join("\n") %>
9
- ===========================================================================
10
-
11
-
12
- You are running Backup version:
13
- <%= Backup::Version.current %>
14
-
15
- You are running Ruby version:
16
- <%= ENV["RUBY_VERSION"] %>
17
-
18
-
19
- ---------------------------------------------------------------------------
20
-
21
- View all Backup gem releases here:
22
- http://rubygems.org/gems/backup
23
-
24
- View the Backup git repository here:
25
- https://github.com/meskyanichi/backup
26
-
27
- View the Backup issues here:
28
- https://github.com/meskyanichi/backup/issues
29
-
30
- View the Backup wiki here:
31
- https://github.com/meskyanichi/backup/wiki
@@ -1,16 +0,0 @@
1
-
2
- Backup <%= @model.label %> (<%= @model.trigger %>) finished without any errors!
3
-
4
- ---------------------------------------------------------------------------
5
-
6
- View all Backup gem releases here:
7
- http://rubygems.org/gems/backup
8
-
9
- View the Backup git repository here:
10
- https://github.com/meskyanichi/backup
11
-
12
- View the Backup issues here:
13
- https://github.com/meskyanichi/backup/issues
14
-
15
- View the Backup wiki here:
16
- https://github.com/meskyanichi/backup/wiki
@@ -1,67 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module Backup
4
- module Storage
5
- class Base
6
- include Backup::Configuration::Helpers
7
-
8
- ##
9
- # The time when the backup initiated (in format: 2011.02.20.03.29.59)
10
- attr_accessor :time
11
-
12
- ##
13
- # Sets the limit to how many backups to keep in the remote location.
14
- # If the limit exceeds it will remove the oldest backup to make room for the newest
15
- attr_accessor :keep
16
-
17
- ##
18
- # Returns the local path
19
- def local_path
20
- TMP_PATH
21
- end
22
-
23
- ##
24
- # Returns the local archive filename
25
- def local_file
26
- @local_file ||= File.basename(Backup::Model.file)
27
- end
28
-
29
- ##
30
- # Returns the name of the file that's stored on the remote location
31
- def remote_file
32
- @remote_file ||= local_file
33
- end
34
-
35
- ##
36
- # Provider defaults to false and will be overridden when using
37
- # a service-based storage such as Amazon S3, Rackspace Cloud Files or Dropbox
38
- def provider
39
- false
40
- end
41
-
42
- ##
43
- # Checks the persisted storage data by type (S3, CloudFiles, SCP, etc)
44
- # to see if the amount of stored backups is greater than the amount of
45
- # backups allowed. If this is the case it'll invoke the #remove! method
46
- # on each of the oldest backups that exceed the storage limit (specified by @keep).
47
- # After that it'll re-assign the objects variable with an array of objects that still remain
48
- # after the removal of the older objects and files (that exceeded the @keep range). And finally
49
- # these remaining objects will be converted to YAML format and are written back to the YAML file
50
- def cycle!
51
- type = self.class.name.split("::").last
52
- storage_object = Backup::Storage::Object.new(type)
53
- objects = [self] + storage_object.load
54
- if keep.is_a?(Integer) and keep > 0 and objects.count > keep
55
- objects_to_remove = objects[keep..-1]
56
- objects_to_remove.each do |object|
57
- Logger.message "#{ self.class } started removing (cycling) \"#{ object.remote_file }\"."
58
- object.send(:remove!)
59
- end
60
- objects = objects - objects_to_remove
61
- end
62
- storage_object.write(objects)
63
- end
64
-
65
- end
66
- end
67
- end
@@ -1,95 +0,0 @@
1
- # encoding: utf-8
2
-
3
- ##
4
- # Only load the Fog gem when the Backup::Storage::CloudFiles class is loaded
5
- require 'fog'
6
-
7
- module Backup
8
- module Storage
9
- class CloudFiles < Base
10
-
11
- ##
12
- # Rackspace Cloud Files Credentials
13
- attr_accessor :username, :api_key
14
-
15
- ##
16
- # Rackspace Cloud Files container name and path
17
- attr_accessor :container, :path
18
-
19
- ##
20
- # Creates a new instance of the Rackspace Cloud Files storage object
21
- # First it sets the defaults (if any exist) and then evaluates
22
- # the configuration block which may overwrite these defaults
23
- def initialize(&block)
24
- load_defaults!
25
-
26
- @path ||= 'backups'
27
-
28
- instance_eval(&block) if block_given?
29
-
30
- @time = TIME
31
- end
32
-
33
- ##
34
- # This is the remote path to where the backup files will be stored
35
- def remote_path
36
- File.join(path, TRIGGER)
37
- end
38
-
39
- ##
40
- # This is the provider that Fog uses for the Cloud Files Storage
41
- def provider
42
- 'Rackspace'
43
- end
44
-
45
- ##
46
- # Performs the backup transfer
47
- def perform!
48
- transfer!
49
- cycle!
50
- end
51
-
52
- private
53
-
54
- ##
55
- # Establishes a connection to Rackspace Cloud Files and returns the Fog object.
56
- # Not doing any instance variable caching because this object gets persisted in YAML
57
- # format to a file and will issues. This, however has no impact on performance since it only
58
- # gets invoked once per object for a #transfer! and once for a remove! Backups run in the
59
- # background anyway so even if it were a bit slower it shouldn't matter.
60
- def connection
61
- Fog::Storage.new(
62
- :provider => provider,
63
- :rackspace_username => username,
64
- :rackspace_api_key => api_key
65
- )
66
- end
67
-
68
- ##
69
- # Transfers the archived file to the specified Cloud Files container
70
- def transfer!
71
- begin
72
- Logger.message("#{ self.class } started transferring \"#{ remote_file }\".")
73
- connection.put_object(
74
- container,
75
- File.join(remote_path, remote_file),
76
- File.open(File.join(local_path, local_file))
77
- )
78
- rescue Excon::Errors::SocketError => e
79
- puts "\nAn error occurred while trying to transfer the backup."
80
- puts "Make sure the container exists and try again.\n\n"
81
- exit
82
- end
83
- end
84
-
85
- ##
86
- # Removes the transferred archive file from the Cloud Files container
87
- def remove!
88
- begin
89
- connection.delete_object(container, File.join(remote_path, remote_file))
90
- rescue Excon::Errors::SocketError; end
91
- end
92
-
93
- end
94
- end
95
- end
@@ -1,82 +0,0 @@
1
- # encoding: utf-8
2
-
3
- ##
4
- # Only load the Dropbox gem when the Backup::Storage::Dropbox class is loaded
5
- require 'dropbox'
6
-
7
- module Backup
8
- module Storage
9
- class Dropbox < Base
10
-
11
- ##
12
- # Dropbox user credentials
13
- attr_accessor :email, :password
14
-
15
- ##
16
- # Dropbox API credentials
17
- attr_accessor :api_key, :api_secret
18
-
19
- ##
20
- # Path to where the backups will be stored
21
- attr_accessor :path
22
-
23
- ##
24
- # Creates a new instance of the Dropbox storage object
25
- # First it sets the defaults (if any exist) and then evaluates
26
- # the configuration block which may overwrite these defaults
27
- def initialize(&block)
28
- load_defaults!
29
-
30
- @path ||= 'backups'
31
-
32
- instance_eval(&block) if block_given?
33
-
34
- @time = TIME
35
- end
36
-
37
- ##
38
- # This is the remote path to where the backup files will be stored
39
- def remote_path
40
- File.join(path, TRIGGER)
41
- end
42
-
43
- ##
44
- # Performs the backup transfer
45
- def perform!
46
- transfer!
47
- cycle!
48
- end
49
-
50
- private
51
-
52
- ##
53
- # Establishes a connection to Dropbox and returns the Dropbox::Session object.
54
- # Not doing any instance variable caching because this object gets persisted in YAML
55
- # format to a file and will issues. This, however has no impact on performance since it only
56
- # gets invoked once per object for a #transfer! and once for a remove! Backups run in the
57
- # background anyway so even if it were a bit slower it shouldn't matter.
58
- def connection
59
- session = ::Dropbox::Session.new(api_key, api_secret)
60
- session.mode = :dropbox
61
- session.authorizing_user = email
62
- session.authorizing_password = password
63
- session.authorize!
64
- session
65
- end
66
-
67
- ##
68
- # Transfers the archived file to the specified Dropbox folder
69
- def transfer!
70
- Logger.message("#{ self.class } started transferring \"#{ remote_file }\".")
71
- connection.upload(File.join(local_path, local_file), remote_path, :timeout => 300)
72
- end
73
-
74
- ##
75
- # Removes the transferred archive file from the Dropbox folder
76
- def remove!
77
- connection.delete(File.join(remote_path, remote_file))
78
- end
79
-
80
- end
81
- end
82
- end
@@ -1,114 +0,0 @@
1
- # encoding: utf-8
2
-
3
- ##
4
- # Only load the Net::FTP library/gem when the Backup::Storage::FTP class is loaded
5
- require 'net/ftp'
6
-
7
- module Backup
8
- module Storage
9
- class FTP < Base
10
-
11
- ##
12
- # Server credentials
13
- attr_accessor :username, :password
14
-
15
- ##
16
- # Server IP Address and FTP port
17
- attr_accessor :ip, :port
18
-
19
- ##
20
- # Path to store backups to
21
- attr_accessor :path
22
-
23
- ##
24
- # Creates a new instance of the FTP storage object
25
- # First it sets the defaults (if any exist) and then evaluates
26
- # the configuration block which may overwrite these defaults
27
- def initialize(&block)
28
- load_defaults!
29
-
30
- @port ||= 21
31
- @path ||= 'backups'
32
-
33
- instance_eval(&block) if block_given?
34
-
35
- @time = TIME
36
- @path = path.sub(/^\~\//, '')
37
- end
38
-
39
- ##
40
- # This is the remote path to where the backup files will be stored
41
- def remote_path
42
- File.join(path, TRIGGER)
43
- end
44
-
45
- ##
46
- # Performs the backup transfer
47
- def perform!
48
- transfer!
49
- cycle!
50
- end
51
-
52
- private
53
-
54
- ##
55
- # Establishes a connection to the remote server and returns the Net::FTP object.
56
- # Not doing any instance variable caching because this object gets persisted in YAML
57
- # format to a file and will issues. This, however has no impact on performance since it only
58
- # gets invoked once per object for a #transfer! and once for a remove! Backups run in the
59
- # background anyway so even if it were a bit slower it shouldn't matter.
60
- #
61
- # Note *
62
- # Since the FTP port is defined as a constant in the Net::FTP class, and might be required
63
- # to change by the user, we dynamically remove and re-add the constant with the provided port value
64
- def connection
65
- if defined? Net::FTP::FTP_PORT
66
- Net::FTP.send(:remove_const, :FTP_PORT)
67
- end; Net::FTP.send(:const_set, :FTP_PORT, port)
68
-
69
- Net::FTP.new(ip, username, password)
70
- end
71
-
72
- ##
73
- # Transfers the archived file to the specified remote server
74
- def transfer!
75
- Logger.message("#{ self.class } started transferring \"#{ remote_file }\".")
76
- create_remote_directories!
77
- connection.put(
78
- File.join(local_path, local_file),
79
- File.join(remote_path, remote_file)
80
- )
81
- end
82
-
83
- ##
84
- # Removes the transferred archive file from the server
85
- def remove!
86
- begin
87
- connection.delete(
88
- File.join(remote_path, remote_file)
89
- )
90
- rescue Net::FTPPermError
91
- Logger.warn "Could not remove file \"#{ File.join(remote_path, remote_file) }\"."
92
- end
93
- end
94
-
95
- ##
96
- # Creates (if they don't exist yet) all the directories on the remote
97
- # server in order to upload the backup file. Net::FTP does not support
98
- # paths to directories that don't yet exist when creating new directories.
99
- # Instead, we split the parts up in to an array (for each '/') and loop through
100
- # that to create the directories one by one. Net::FTP raises an exception when
101
- # the directory it's trying ot create already exists, so we have rescue it
102
- def create_remote_directories!
103
- path_parts = Array.new
104
- remote_path.split('/').each do |path_part|
105
- path_parts << path_part
106
- begin
107
- connection.mkdir(path_parts.join('/'))
108
- rescue Net::FTPPermError; end
109
- end
110
- end
111
-
112
- end
113
- end
114
- end
@@ -1,45 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module Backup
4
- module Storage
5
- class Object
6
-
7
- ##
8
- # Holds the type attribute
9
- attr_accessor :storage_file
10
-
11
- ##
12
- # Instantiates a new Backup::Storage::Object and stores the
13
- # full path to the storage file (yaml) in the @storage_file attribute
14
- def initialize(type)
15
- @storage_file = File.join(DATA_PATH, TRIGGER, "#{type}.yml")
16
- end
17
-
18
- ##
19
- # Tries to load an existing YAML file and returns an
20
- # array of storage objects. If no file exists, an empty
21
- # array gets returned
22
- #
23
- # If a file is loaded it'll sort the array of objects by @time
24
- # descending. The newest backup storage object comes in Backup::Storage::Object.load[0]
25
- # and the oldest in Backup::Storage::Object.load[-1]
26
- def load
27
- if File.exist?(storage_file)
28
- YAML.load_file(storage_file).sort { |a,b| b.time <=> a.time }
29
- else
30
- []
31
- end
32
- end
33
-
34
- ##
35
- # Takes the provided objects and converts it to YAML format.
36
- # The YAML data gets written to the storage file
37
- def write(objects)
38
- File.open(storage_file, 'w') do |file|
39
- file.write(objects.to_yaml)
40
- end
41
- end
42
-
43
- end
44
- end
45
- end