bigbackup 1.0.0
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 +68 -0
- data/.rvmrc +1 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +38 -0
- data/README.rdoc +21 -0
- data/Rakefile +6 -0
- data/bigbackup.gemspec +27 -0
- data/bin/bigbackup.rb +26 -0
- data/config/bigbackup.yml +29 -0
- data/lib/big_backup.rb +39 -0
- data/lib/big_backup/archive.rb +29 -0
- data/lib/big_backup/base.rb +115 -0
- data/lib/big_backup/databases/base.rb +59 -0
- data/lib/big_backup/databases/mongodb.rb +30 -0
- data/lib/big_backup/databases/mysql.rb +29 -0
- data/lib/big_backup/uploader/base.rb +23 -0
- data/lib/big_backup/uploader/ftp.rb +29 -0
- data/lib/big_backup/version.rb +3 -0
- data/spec/lib/archive_spec.rb +21 -0
- data/spec/lib/base_spec.rb +16 -0
- data/spec/lib/databases/base_spec.rb +14 -0
- data/spec/lib/databases/mongodb_spec.rb +14 -0
- data/spec/lib/databases/mysql_spec.rb +14 -0
- data/spec/lib/uploader/ftp_spec.rb +9 -0
- data/spec/spec_helper.rb +11 -0
- metadata +117 -0
data/.gitignore
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
#----------------------------------------------------------------------------
|
2
|
+
# Ignore these files when commiting to a git repository
|
3
|
+
#----------------------------------------------------------------------------
|
4
|
+
|
5
|
+
# bundler state
|
6
|
+
/.bundle
|
7
|
+
/vendor/bundle/
|
8
|
+
|
9
|
+
# minimal Rails specific artifacts
|
10
|
+
db/*.sqlite3
|
11
|
+
/log/*
|
12
|
+
tmp/*
|
13
|
+
|
14
|
+
# various artifacts
|
15
|
+
**.war
|
16
|
+
*.rbc
|
17
|
+
*.sassc
|
18
|
+
.rspec
|
19
|
+
.sass-cache
|
20
|
+
/config/config.yml
|
21
|
+
/config/database.yml
|
22
|
+
/coverage.data
|
23
|
+
/coverage/
|
24
|
+
/db/*.javadb/
|
25
|
+
/db/*.sqlite3-journal
|
26
|
+
/doc/api/
|
27
|
+
/doc/app/
|
28
|
+
/doc/features.html
|
29
|
+
/doc/specs.html
|
30
|
+
/public/cache
|
31
|
+
/public/stylesheets/compiled
|
32
|
+
/public/system
|
33
|
+
/spec/tmp/*
|
34
|
+
/cache
|
35
|
+
/capybara*
|
36
|
+
/capybara-*.html
|
37
|
+
/gems
|
38
|
+
/rerun.txt
|
39
|
+
/spec/requests
|
40
|
+
/spec/routing
|
41
|
+
/spec/views
|
42
|
+
/specifications
|
43
|
+
|
44
|
+
# scm revert files
|
45
|
+
**.orig
|
46
|
+
|
47
|
+
# Mac finder artifacts
|
48
|
+
.DS_Store
|
49
|
+
|
50
|
+
# Netbeans project directory
|
51
|
+
/nbproject/
|
52
|
+
|
53
|
+
# RubyMine project directory
|
54
|
+
.idea
|
55
|
+
|
56
|
+
# Textmate project files
|
57
|
+
/*.tmpproj
|
58
|
+
|
59
|
+
# vim artifacts
|
60
|
+
**.swp
|
61
|
+
|
62
|
+
|
63
|
+
public/uploads
|
64
|
+
non_public
|
65
|
+
uploads
|
66
|
+
|
67
|
+
# CI reports
|
68
|
+
reports
|
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use 1.9.2
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
bigbackup (1.0.0)
|
5
|
+
activesupport
|
6
|
+
mail
|
7
|
+
rainbow
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: http://rubygems.org/
|
11
|
+
specs:
|
12
|
+
activesupport (3.0.7)
|
13
|
+
diff-lcs (1.1.2)
|
14
|
+
i18n (0.5.0)
|
15
|
+
mail (2.3.0)
|
16
|
+
i18n (>= 0.4.0)
|
17
|
+
mime-types (~> 1.16)
|
18
|
+
treetop (~> 1.4.8)
|
19
|
+
mime-types (1.16)
|
20
|
+
polyglot (0.3.1)
|
21
|
+
rainbow (1.1.1)
|
22
|
+
rspec (2.6.0)
|
23
|
+
rspec-core (~> 2.6.0)
|
24
|
+
rspec-expectations (~> 2.6.0)
|
25
|
+
rspec-mocks (~> 2.6.0)
|
26
|
+
rspec-core (2.6.0)
|
27
|
+
rspec-expectations (2.6.0)
|
28
|
+
diff-lcs (~> 1.1.2)
|
29
|
+
rspec-mocks (2.6.0)
|
30
|
+
treetop (1.4.9)
|
31
|
+
polyglot (>= 0.3.1)
|
32
|
+
|
33
|
+
PLATFORMS
|
34
|
+
ruby
|
35
|
+
|
36
|
+
DEPENDENCIES
|
37
|
+
bigbackup!
|
38
|
+
rspec
|
data/README.rdoc
ADDED
data/Rakefile
ADDED
data/bigbackup.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
|
4
|
+
require File.expand_path("../lib", __FILE__)+ "/big_backup/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "bigbackup"
|
8
|
+
s.version = BigBackupInfo::VERSION
|
9
|
+
s.platform = Gem::Platform::RUBY
|
10
|
+
s.authors = ["Alexander Klaiber"]
|
11
|
+
s.email = ["alex.klaiber@gmail.com"]
|
12
|
+
s.homepage = ""
|
13
|
+
s.summary = %q{BigBackup is a multi backup tool.}
|
14
|
+
s.description = s.summary
|
15
|
+
|
16
|
+
s.rubyforge_project = "big_backup"
|
17
|
+
|
18
|
+
s.add_development_dependency "rspec"
|
19
|
+
s.add_dependency 'activesupport'
|
20
|
+
s.add_dependency 'mail'
|
21
|
+
s.add_dependency 'rainbow'
|
22
|
+
|
23
|
+
s.files = `git ls-files`.split("\n")
|
24
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
25
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
26
|
+
s.require_paths = ["lib"]
|
27
|
+
end
|
data/bin/bigbackup.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/../lib/big_backup"
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
|
5
|
+
OptionParser.new do |opts|
|
6
|
+
opts.banner = "Usage: big_backup.rb [@options]"
|
7
|
+
|
8
|
+
opts.on("-c", "--config [CONFIGPATH]", String, "Path to Back Config yml (default : #{BigBackup.config_path})") do |config_path|
|
9
|
+
BigBackup.config_path = config_path
|
10
|
+
end
|
11
|
+
|
12
|
+
opts.separator ""
|
13
|
+
opts.separator "Common options:"
|
14
|
+
|
15
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
16
|
+
puts opts
|
17
|
+
exit
|
18
|
+
end
|
19
|
+
|
20
|
+
opts.on_tail("--version", "Show version") do
|
21
|
+
puts BigBackupInfo::VERSION
|
22
|
+
exit
|
23
|
+
end
|
24
|
+
end.parse!
|
25
|
+
|
26
|
+
BigBackup.run
|
@@ -0,0 +1,29 @@
|
|
1
|
+
tmpdir : /tmp
|
2
|
+
|
3
|
+
backup_server:
|
4
|
+
ftp:
|
5
|
+
ip: 127.0.0.1
|
6
|
+
user: user
|
7
|
+
passwd: password
|
8
|
+
|
9
|
+
|
10
|
+
directories:
|
11
|
+
- /home/aklaiber/bin
|
12
|
+
|
13
|
+
databases:
|
14
|
+
mongodb:
|
15
|
+
bonayou_development:
|
16
|
+
host: localhost
|
17
|
+
database: bonayou_development
|
18
|
+
|
19
|
+
freecent-development:
|
20
|
+
host: localhost
|
21
|
+
database: freecent-development
|
22
|
+
|
23
|
+
|
24
|
+
mysql:
|
25
|
+
comunio_de:
|
26
|
+
host: localhost
|
27
|
+
database: comunio_de
|
28
|
+
username: root
|
29
|
+
password: Ac$23hBx
|
data/lib/big_backup.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require "bundler/setup"
|
2
|
+
|
3
|
+
require 'active_support/core_ext'
|
4
|
+
require "yaml"
|
5
|
+
require 'rainbow'
|
6
|
+
require 'fileutils'
|
7
|
+
|
8
|
+
require "#{File.dirname(__FILE__)}/big_backup/base"
|
9
|
+
|
10
|
+
require "#{File.dirname(__FILE__)}/big_backup/archive"
|
11
|
+
|
12
|
+
require "#{File.dirname(__FILE__)}/big_backup/databases/base"
|
13
|
+
require "#{File.dirname(__FILE__)}/big_backup/databases/mysql"
|
14
|
+
require "#{File.dirname(__FILE__)}/big_backup/databases/mongodb"
|
15
|
+
|
16
|
+
require "#{File.dirname(__FILE__)}/big_backup/uploader/base"
|
17
|
+
require "#{File.dirname(__FILE__)}/big_backup/uploader/ftp"
|
18
|
+
|
19
|
+
module BigBackup
|
20
|
+
|
21
|
+
@@options = {}
|
22
|
+
@@options[:config_path] = "/usr/local/etc/bigbackup/bigbackup.yml"
|
23
|
+
@@options[:mail_config_path] = "/usr/local/etc/bigbackup/bigbackup_mail.yml"
|
24
|
+
|
25
|
+
def self.config_path=(config_path)
|
26
|
+
@@options[:config_path] = config_path
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.config_path
|
30
|
+
@@options[:config_path]
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.run
|
34
|
+
Base.new.start
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module BigBackup
|
2
|
+
class Archive
|
3
|
+
|
4
|
+
def initialize(config)
|
5
|
+
@config = config
|
6
|
+
end
|
7
|
+
|
8
|
+
def build_cmd(timestamp = nil)
|
9
|
+
cmd_line = String.new
|
10
|
+
if @config.kind_of?(Array)
|
11
|
+
@config.each do |dir|
|
12
|
+
cmd_line << " && " unless cmd_line.empty?
|
13
|
+
cmd_line << "tar -czf /tmp/bigbackup/#{File.basename(dir)}.tar.gz #{dir} > /dev/null 2>&1"
|
14
|
+
end
|
15
|
+
elsif @config.kind_of?(Hash)
|
16
|
+
@config.each_key do |database_name|
|
17
|
+
cmd_line << " && " unless cmd_line.empty?
|
18
|
+
unless timestamp.blank?
|
19
|
+
cmd_line << "tar -czf /tmp/bigbackup/#{database_name}_#{timestamp}.tar.gz /tmp/bigbackup/#{database_name}_#{timestamp} > /dev/null 2>&1"
|
20
|
+
else
|
21
|
+
cmd_line << "tar -czf /tmp/bigbackup/#{database_name}.tar.gz /tmp/bigbackup/#{database_name} > /dev/null 2>&1"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
cmd_line
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
module BigBackup
|
2
|
+
class Base
|
3
|
+
|
4
|
+
def initialize
|
5
|
+
@current_time = Time.now.strftime("%Y.%m.%d")
|
6
|
+
end
|
7
|
+
|
8
|
+
def start_message(message)
|
9
|
+
puts "\nStart".bright+" -> #{message}"
|
10
|
+
end
|
11
|
+
|
12
|
+
def ok_message(message)
|
13
|
+
puts "OK".color(:green).bright+" -> #{message}"
|
14
|
+
end
|
15
|
+
|
16
|
+
def error_message(message)
|
17
|
+
puts "ERROR".color(:red).bright+" -> #{message}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def exec_cmd(line)
|
21
|
+
system(line)
|
22
|
+
if $?.exitstatus > 0
|
23
|
+
error_message(line)
|
24
|
+
else
|
25
|
+
ok_message(line)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def backup_config
|
30
|
+
if File.exists?(BigBackup.config_path)
|
31
|
+
@backup_config ||= YAML.load_file(BigBackup.config_path)
|
32
|
+
else
|
33
|
+
@backup_config ||= YAML.load_file("#{File.dirname(__FILE__)}/../../config/bigbackup.yml")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def backup_databases
|
38
|
+
puts "\nCreate Backups".bright.color(:cyan)
|
39
|
+
self.backup_config['databases'].each do |type, config|
|
40
|
+
cmd_line = BigBackup::Database::Base.build(type, config).build_cmd(@current_time)
|
41
|
+
unless cmd_line.blank?
|
42
|
+
start_message(cmd_line)
|
43
|
+
exec_cmd(cmd_line)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def archive_databases
|
49
|
+
puts "\nArchive Backups".bright.color(:cyan)
|
50
|
+
self.backup_config['databases'].each do |type, config|
|
51
|
+
cmd_line = BigBackup::Archive.new(config).build_cmd(@current_time) + " > /dev/null 2>&1"
|
52
|
+
unless cmd_line.blank?
|
53
|
+
start_message(cmd_line)
|
54
|
+
exec_cmd(cmd_line)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def upload_databases
|
60
|
+
if self.backup_config.include?('backup_server')
|
61
|
+
puts "\nUpload Backups".bright.color(:cyan)
|
62
|
+
self.backup_config['databases'].each do |type, config|
|
63
|
+
start_message("upload #{type} backups")
|
64
|
+
begin
|
65
|
+
BigBackup::Uploader::Base.build(:ftp, config).upload(type, @current_time)
|
66
|
+
ok_message("database backups uploaded")
|
67
|
+
rescue Errno::ECONNREFUSED
|
68
|
+
error_message("Can't connect to FTP Server")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def archive_directories
|
75
|
+
puts "\nCreate directories backups".bright.color(:cyan)
|
76
|
+
cmd_line = BigBackup::Archive.new(self.backup_config['directories']).build_cmd + " > /dev/null 2>&1"
|
77
|
+
unless cmd_line.blank?
|
78
|
+
start_message(cmd_line)
|
79
|
+
exec_cmd(cmd_line)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def upload_directories
|
84
|
+
if self.backup_config.include?('backup_server')
|
85
|
+
puts "\nUpload directories Backups".bright.color(:cyan)
|
86
|
+
start_message("upload directorie backups")
|
87
|
+
begin
|
88
|
+
BigBackup::Uploader::Base.build(:ftp, self.backup_config['directories']).upload("directories_backup", @current_time)
|
89
|
+
ok_message("directories uploaded")
|
90
|
+
rescue Errno::ECONNREFUSED
|
91
|
+
error_message("Can't connect to FTP Server")
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def start
|
97
|
+
FileUtils.rm_rf "/tmp/bigbackup"
|
98
|
+
Dir.mkdir "/tmp/bigbackup"
|
99
|
+
if File.directory?("/tmp/bigbackup")
|
100
|
+
puts "\nStart BigBackup \n".color(:green).bright
|
101
|
+
if self.backup_config.include?('databases')
|
102
|
+
self.backup_databases
|
103
|
+
self.archive_databases
|
104
|
+
self.upload_databases
|
105
|
+
end
|
106
|
+
if self.backup_config.include?('directories')
|
107
|
+
self.archive_directories
|
108
|
+
self.upload_directories
|
109
|
+
end
|
110
|
+
puts "\nStop BigBackup \n".color(:green).bright
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module BigBackup
|
2
|
+
module Database
|
3
|
+
class Base
|
4
|
+
|
5
|
+
def initialize(config)
|
6
|
+
@config = config
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.build(type, config)
|
10
|
+
"BigBackup::Database::#{type.to_s.classify}".constantize.new(config)
|
11
|
+
end
|
12
|
+
|
13
|
+
protected
|
14
|
+
|
15
|
+
def database_system
|
16
|
+
raise "Please define the database system"
|
17
|
+
end
|
18
|
+
|
19
|
+
def cmd_options
|
20
|
+
raise "Please define the cmd options"
|
21
|
+
end
|
22
|
+
|
23
|
+
def cmd_line(backup_name, database_config, timestamp)
|
24
|
+
raise "Please define the cmd line"
|
25
|
+
end
|
26
|
+
|
27
|
+
public
|
28
|
+
|
29
|
+
def build_cmd(timestamp)
|
30
|
+
str = String.new
|
31
|
+
@config.each do |database, config|
|
32
|
+
str << " && " unless str.empty?
|
33
|
+
str << self.cmd_line(database, config, timestamp)
|
34
|
+
end
|
35
|
+
str;
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def build_cmd_options(database_config)
|
41
|
+
options_line = String.new
|
42
|
+
database_config.each do |key, value|
|
43
|
+
if self.cmd_options.include?(key)
|
44
|
+
case key
|
45
|
+
when 'password'
|
46
|
+
options_line << "#{self.cmd_options[key]}'#{value}' "
|
47
|
+
when 'username'
|
48
|
+
options_line << "#{self.cmd_options[key]} #{value} "
|
49
|
+
else
|
50
|
+
options_line << "#{self.cmd_options[key]} #{value} "
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
options_line
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module BigBackup
|
2
|
+
module Database
|
3
|
+
class Mongodb < Base
|
4
|
+
|
5
|
+
protected
|
6
|
+
|
7
|
+
def database_system
|
8
|
+
"mongodb"
|
9
|
+
end
|
10
|
+
|
11
|
+
def cmd_options
|
12
|
+
cmd_options = {}
|
13
|
+
cmd_options["host"] = '-h'
|
14
|
+
cmd_options["database"] = '-d'
|
15
|
+
cmd_options["password"] = '-p'
|
16
|
+
cmd_options["username"] = '-u'
|
17
|
+
return cmd_options
|
18
|
+
end
|
19
|
+
|
20
|
+
def cmd_line(backup_name, database_config, filename)
|
21
|
+
"mongodump #{build_cmd_options(database_config)}-o /tmp/bigbackup/#{backup_name}_#{filename} > /dev/null 2>&1"
|
22
|
+
end
|
23
|
+
|
24
|
+
def backup_dir
|
25
|
+
"mongodb"
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module BigBackup
|
2
|
+
module Database
|
3
|
+
class Mysql < Base
|
4
|
+
|
5
|
+
protected
|
6
|
+
|
7
|
+
def database_system
|
8
|
+
"mysql"
|
9
|
+
end
|
10
|
+
|
11
|
+
def cmd_options
|
12
|
+
cmd_options = {}
|
13
|
+
cmd_options["host"] = '-h'
|
14
|
+
cmd_options["password"] = '-p'
|
15
|
+
cmd_options["username"] = '-u'
|
16
|
+
return cmd_options
|
17
|
+
end
|
18
|
+
|
19
|
+
def cmd_line(backup_name, database_config, timestamp)
|
20
|
+
"mysqldump #{database_config['database']} #{build_cmd_options(database_config)}> /tmp/bigbackup/#{backup_name}_#{timestamp}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def backup_dir
|
24
|
+
"mysql"
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "net/ftp"
|
2
|
+
|
3
|
+
module BigBackup
|
4
|
+
module Uploader
|
5
|
+
class Base
|
6
|
+
def initialize(config)
|
7
|
+
@config = config
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.build(type, config)
|
11
|
+
"BigBackup::Uploader::#{type.to_s.classify}".constantize.new(config)
|
12
|
+
end
|
13
|
+
|
14
|
+
def uploader_config
|
15
|
+
if File.exists?(BigBackup.config_path)
|
16
|
+
@backup_config ||= YAML.load_file(BigBackup.config_path)['backup_server']
|
17
|
+
else
|
18
|
+
@backup_config ||= YAML.load_file("#{File.dirname(__FILE__)}/../../../config/bigbackup.yml")['backup_server']
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module BigBackup
|
2
|
+
module Uploader
|
3
|
+
class Ftp < Base
|
4
|
+
|
5
|
+
def initialize(config)
|
6
|
+
super(config)
|
7
|
+
@ftp_config = self.uploader_config['ftp']
|
8
|
+
end
|
9
|
+
|
10
|
+
def upload(backup_dir, timestamp)
|
11
|
+
Net::FTP.open(@ftp_config["ip"]) do |connection|
|
12
|
+
connection.login(@ftp_config["user"].to_s, @ftp_config["passwd"])
|
13
|
+
|
14
|
+
if @config.kind_of?(Array)
|
15
|
+
@config.each do |dir|
|
16
|
+
connection.put("/tmp/bigbackup/#{File.basename(dir)}.tar.gz", "#{backup_dir}/#{File.basename(dir)}.tar.gz")
|
17
|
+
end
|
18
|
+
elsif @config.kind_of?(Hash)
|
19
|
+
@config.each_key do |database_name|
|
20
|
+
connection.put("/tmp/bigbackup/#{database_name}_#{timestamp}.tar.gz", "#{backup_dir}/#{database_name}_#{timestamp}.tar.gz")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe BigBackup::Archive do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
@backup_config = YAML.load_file("#{File.dirname(__FILE__)}/../../config/bigbackup.yml")
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should return cmd line for directories" do
|
10
|
+
cmd_line = "tar -czf /tmp/test_backup1.tar.gz /tmp/test_backup1 && tar -czf /tmp/test_backup2.tar.gz /tmp/test_backup2"
|
11
|
+
|
12
|
+
BigBackup::Archive.new(@backup_config['directories']).build_cmd.should eql(cmd_line)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should return cmd line for databases" do
|
16
|
+
cmd_line = "tar -czf /tmp/mongodb_database_name_1.tar.gz /tmp/mongodb_database_name_1 && tar -czf /tmp/mongodb_database_name_2.tar.gz /tmp/mongodb_database_name_2"
|
17
|
+
|
18
|
+
BigBackup::Archive.new(@backup_config['databases']['mongodb']).build_cmd.should eql(cmd_line)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe BigBackup::Base do
|
4
|
+
|
5
|
+
describe "config" do
|
6
|
+
|
7
|
+
it "should load backup config" do
|
8
|
+
big_backup = BigBackup::Base.new
|
9
|
+
|
10
|
+
big_backup.backup_config["tmpdir"].should_not be_empty
|
11
|
+
big_backup.backup_config["tmpdir"].should eql("/tmp")
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe BigBackup::Database::Base do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@backup_config = YAML.load_file( "#{File.dirname(__FILE__)}/../../../config/bigbackup.yml" )
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should return backup system" do
|
10
|
+
BigBackup::Database::Base.build(:mysql, @backup_config).class.should eql(BigBackup::Database::Mysql)
|
11
|
+
BigBackup::Database::Base.build(:mongodb, @backup_config).class.should eql(BigBackup::Database::Mongodb)
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe BigBackup::Database::Mongodb do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@backup_config = YAML.load_file( "#{File.dirname(__FILE__)}/../../../config/bigbackup.yml" )['databases']['mongodb']
|
7
|
+
@cmd_line = "mongodump -d mongodb_database_1 -h localhost -u testuser -p'password' -o /tmp/mongodb_database_name_1_backup && mongodump -d mongodb_database_2 -h localhost -o /tmp/mongodb_database_name_2_backup"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should return cmd str" do
|
11
|
+
BigBackup::Database::Mongodb.new(@backup_config).build_cmd("backup").should eql(@cmd_line)
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe BigBackup::Database::Mysql do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@backup_config = YAML.load_file( "#{File.dirname(__FILE__)}/../../../config/bigbackup.yml" )['databases']['mysql']
|
7
|
+
@cmd_line = "mysqldump mysql_database_1 -h localhost -u username -p'password' > /tmp/mysql_database_name_1_123.sql && mysqldump mysql_database_2 -h localhost -u username -p'password' > /tmp/mysql_database_name_2_123.sql"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should return cmd str" do
|
11
|
+
BigBackup::Database::Mysql.new(@backup_config).build_cmd(123).should eql(@cmd_line)
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bigbackup
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Alexander Klaiber
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-05-20 00:00:00.000000000 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rspec
|
17
|
+
requirement: &85993850 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *85993850
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: activesupport
|
28
|
+
requirement: &85993640 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *85993640
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: mail
|
39
|
+
requirement: &85993430 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
type: :runtime
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *85993430
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rainbow
|
50
|
+
requirement: &85993220 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
type: :runtime
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *85993220
|
59
|
+
description: BigBackup is a multi backup tool.
|
60
|
+
email:
|
61
|
+
- alex.klaiber@gmail.com
|
62
|
+
executables:
|
63
|
+
- bigbackup.rb
|
64
|
+
extensions: []
|
65
|
+
extra_rdoc_files: []
|
66
|
+
files:
|
67
|
+
- .gitignore
|
68
|
+
- .rvmrc
|
69
|
+
- Gemfile
|
70
|
+
- Gemfile.lock
|
71
|
+
- README.rdoc
|
72
|
+
- Rakefile
|
73
|
+
- bigbackup.gemspec
|
74
|
+
- bin/bigbackup.rb
|
75
|
+
- config/bigbackup.yml
|
76
|
+
- lib/big_backup.rb
|
77
|
+
- lib/big_backup/archive.rb
|
78
|
+
- lib/big_backup/base.rb
|
79
|
+
- lib/big_backup/databases/base.rb
|
80
|
+
- lib/big_backup/databases/mongodb.rb
|
81
|
+
- lib/big_backup/databases/mysql.rb
|
82
|
+
- lib/big_backup/uploader/base.rb
|
83
|
+
- lib/big_backup/uploader/ftp.rb
|
84
|
+
- lib/big_backup/version.rb
|
85
|
+
- spec/lib/archive_spec.rb
|
86
|
+
- spec/lib/base_spec.rb
|
87
|
+
- spec/lib/databases/base_spec.rb
|
88
|
+
- spec/lib/databases/mongodb_spec.rb
|
89
|
+
- spec/lib/databases/mysql_spec.rb
|
90
|
+
- spec/lib/uploader/ftp_spec.rb
|
91
|
+
- spec/spec_helper.rb
|
92
|
+
has_rdoc: true
|
93
|
+
homepage: ''
|
94
|
+
licenses: []
|
95
|
+
post_install_message:
|
96
|
+
rdoc_options: []
|
97
|
+
require_paths:
|
98
|
+
- lib
|
99
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ! '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
requirements: []
|
112
|
+
rubyforge_project: big_backup
|
113
|
+
rubygems_version: 1.6.2
|
114
|
+
signing_key:
|
115
|
+
specification_version: 3
|
116
|
+
summary: BigBackup is a multi backup tool.
|
117
|
+
test_files: []
|