db-rotator 0.0.3 → 0.1.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.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/db-rotator.gemspec +1 -1
- data/lib/db_rotator.rb +19 -0
- data/lib/db_rotator_config.rb +3 -0
- data/test/helper.rb +3 -1
- data/test/test_db_rotator.rb +36 -9
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 548ebd4b7086d44bccfe3f6640b4dc4ac90c9b77
|
4
|
+
data.tar.gz: 8e64b24dcfb012bd525512314d69cdf716c5bfff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a98adb179de802fcabd20a9310a11ea513a99c2ea9b66c3e31cf73e2ae98d2d1a719374949c180457f323e0a4216c1a3bb6cc4ef13ca66e64785cfdf48a87df
|
7
|
+
data.tar.gz: 88132fb3cf019e39d93bedeeaadb96a1b21001cd702edd2b6908d98c9e21832fe6441a85487f59631e1927659a2d280fdf1ae5dffd568b7b5f00eb389954b5af
|
data/README.md
CHANGED
@@ -60,3 +60,5 @@ Example: `scp hostname:/path/to/mysql/backups/backup_filename.sql.bz2`
|
|
60
60
|
- **reasonable_diskspace** (-s). Rough estimate of temporary disk space required to import a typical dump, in GB. Ensures this amount of space is free before importing. Default: nil
|
61
61
|
- **rails_db_yaml_path** (-y). Updates database name in your YAML file. Example: `/path/to/railsroot/config/database.yml` Default: nil
|
62
62
|
- **rails_environments** (-e). In conjunction with -y, which rails envs to update DB name for. If passing multiple via command line, use a comma to separate, like `-e "development,staging"`. Default: ["development"]
|
63
|
+
- **on_success** (-S). Executes COMMAND on successful completion
|
64
|
+
- **on_failure** (-F). Executes COMMAND if there is an error
|
data/db-rotator.gemspec
CHANGED
data/lib/db_rotator.rb
CHANGED
@@ -6,12 +6,19 @@ class DBRotator
|
|
6
6
|
def initialize(config)
|
7
7
|
@config = config.config
|
8
8
|
@schemas = []
|
9
|
+
|
9
10
|
populate_schemas
|
11
|
+
rescue
|
12
|
+
on_failure $!
|
10
13
|
end
|
11
14
|
|
12
15
|
def rotate
|
13
16
|
refresh
|
14
17
|
update_db_yaml
|
18
|
+
on_success
|
19
|
+
|
20
|
+
rescue
|
21
|
+
on_failure $!
|
15
22
|
end
|
16
23
|
|
17
24
|
def refresh
|
@@ -28,6 +35,18 @@ class DBRotator
|
|
28
35
|
|
29
36
|
private
|
30
37
|
|
38
|
+
def on_success
|
39
|
+
bash_exec "#{@config[:on_success]}" if @config[:on_success]
|
40
|
+
end
|
41
|
+
|
42
|
+
def on_failure(err)
|
43
|
+
if @config[:on_failure]
|
44
|
+
bash_exec "#{@config[:on_failure]} #{err.class.name} '#{err.message}'"
|
45
|
+
else
|
46
|
+
raise err
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
31
50
|
def download_dump
|
32
51
|
verbose_message "Downloading dump..."
|
33
52
|
bash_exec "rm -f #{local_dump_path}"
|
data/lib/db_rotator_config.rb
CHANGED
@@ -19,6 +19,9 @@ class DBRotatorConfig
|
|
19
19
|
reasonable_diskspace: [['-s', "--minimum-diskspace [GB]", "Rough estimate of temporary disk space required to import a typical dump, in GB."], nil],
|
20
20
|
rails_db_yaml_path: [['-y', "--rails-db-yaml [PATH]", "Updates database name in your YAML file when given.", "Default: nil"], nil],
|
21
21
|
rails_environments: [['-e', "--rails-db-environments [ENV1,ENV2]", Array, "In conjunction with -y, which rails envs to update DB name for. Default: development"], ["development"]],
|
22
|
+
on_success: [['-S', "--on_success [COMMAND]", "Executes command on successful completion."], nil],
|
23
|
+
on_failure: [['-F', "--on_failure [COMMAND]", "Executes command if there is an error."], nil],
|
24
|
+
|
22
25
|
|
23
26
|
config_file: [['-f', "--config-file PATH", "Runs rotator with configuration from this .yml file."], nil],
|
24
27
|
}
|
data/test/helper.rb
CHANGED
@@ -3,6 +3,7 @@ require_relative '../lib/db_rotator'
|
|
3
3
|
require_relative '../lib/db_rotator_config'
|
4
4
|
|
5
5
|
TEST_SCHEMA_PREFIX = "__minitest_"
|
6
|
+
TEST_MYSQL_COMMAND = "mysql -u root"
|
6
7
|
|
7
8
|
def dummy_config(config={})
|
8
9
|
DBRotatorConfig.new.tap do |cfg|
|
@@ -10,7 +11,8 @@ def dummy_config(config={})
|
|
10
11
|
db_prefix: TEST_SCHEMA_PREFIX,
|
11
12
|
scp_command: "cp test/fixtures/basic_dump.sql.bz2",
|
12
13
|
|
13
|
-
local_dump_destination: "/tmp"
|
14
|
+
local_dump_destination: "/tmp",
|
15
|
+
mysql_command: TEST_MYSQL_COMMAND,
|
14
16
|
}.merge(config))
|
15
17
|
|
16
18
|
cfg.add_default_values
|
data/test/test_db_rotator.rb
CHANGED
@@ -2,9 +2,9 @@ require_relative '../test/helper'
|
|
2
2
|
|
3
3
|
describe DBRotator do
|
4
4
|
after do
|
5
|
-
|
5
|
+
`#{TEST_MYSQL_COMMAND} -B -e 'SHOW SCHEMAS;'`.split.each do |schema|
|
6
6
|
if /^#{TEST_SCHEMA_PREFIX}/.match(schema)
|
7
|
-
|
7
|
+
`#{TEST_MYSQL_COMMAND} -e "DROP SCHEMA #{schema}"`
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
@@ -23,22 +23,49 @@ describe DBRotator do
|
|
23
23
|
|
24
24
|
Time.stub(:now, t1) do
|
25
25
|
dbr.rotate
|
26
|
-
|
27
|
-
|
26
|
+
`#{TEST_MYSQL_COMMAND} -B -e 'SHOW SCHEMAS;'`.must_include(dbname_with(t1))
|
27
|
+
`#{TEST_MYSQL_COMMAND} -B -e 'SHOW TABLES FROM #{dbname_with(t1)};'`.must_include("test")
|
28
28
|
end
|
29
29
|
|
30
30
|
Time.stub(:now, t2) do
|
31
31
|
dbr.rotate
|
32
|
-
|
33
|
-
|
32
|
+
`#{TEST_MYSQL_COMMAND} -B -e 'SHOW SCHEMAS;'`.must_include(dbname_with(t2))
|
33
|
+
`#{TEST_MYSQL_COMMAND} -B -e 'SHOW SCHEMAS;'`.must_include(dbname_with(t1))
|
34
34
|
end
|
35
35
|
|
36
36
|
Time.stub(:now, t3) do
|
37
37
|
dbr.rotate
|
38
|
-
|
39
|
-
|
38
|
+
`#{TEST_MYSQL_COMMAND} -B -e 'SHOW SCHEMAS;'`.must_include(dbname_with(t3))
|
39
|
+
`#{TEST_MYSQL_COMMAND} -B -e 'SHOW SCHEMAS;'`.must_include(dbname_with(t2))
|
40
40
|
|
41
|
-
|
41
|
+
`#{TEST_MYSQL_COMMAND} -B -e 'SHOW SCHEMAS;'`.wont_include(dbname_with(t1))
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "callbacks" do
|
47
|
+
before do
|
48
|
+
`test -e /tmp/success && rm /tmp/success`
|
49
|
+
`test -e /tmp/failure && rm /tmp/failure`
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "on_success" do
|
53
|
+
it "calls on_success when specified" do
|
54
|
+
dbr = DBRotator.new(dummy_config(on_success: 'touch /tmp/success'))
|
55
|
+
dbr.rotate
|
56
|
+
FileTest.exists?('/tmp/success').must_equal true
|
57
|
+
FileTest.exists?('/tmp/failure').must_equal false
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "on_failure" do
|
62
|
+
it "calls on_failure" do
|
63
|
+
dbr = DBRotator.new(dummy_config(
|
64
|
+
on_failure: 'touch /tmp/failure && true',
|
65
|
+
mysql_command: 'crap command 2> /dev/null'))
|
66
|
+
dbr.rotate
|
67
|
+
FileTest.exists?('/tmp/success').must_equal false
|
68
|
+
FileTest.exists?('/tmp/failure').must_equal true
|
42
69
|
end
|
43
70
|
end
|
44
71
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: db-rotator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Nelson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-10-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -65,7 +65,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
65
65
|
version: '0'
|
66
66
|
requirements: []
|
67
67
|
rubyforge_project:
|
68
|
-
rubygems_version: 2.
|
68
|
+
rubygems_version: 2.1.11
|
69
69
|
signing_key:
|
70
70
|
specification_version: 4
|
71
71
|
summary: Easy MySQL database rotation and pruning
|