xaviershay-db2s3 0.2 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -1,11 +1,15 @@
1
1
  DB2S3 - A rails plugin to backup Mysql to Amazon S3
2
2
  ---------------------------------------------------
3
-
4
- Dependencies:
5
- gem install aws-s3
3
+ You're looking at a monthly spend of four cents
4
+ So pony up you cheap bastard, and store your backups on S3
6
5
 
7
6
  Usage:
8
- ./script/plugin install git://github.com/xaviershay/db2s3.git
7
+ # In config/environment.rb
8
+ config.gem "xaviershay-db2s3", :lib => "db2s3", :source => "http://gems.github.com"
9
+
10
+ # In Rakefile
11
+ require 'db2s3/tasks'
12
+
9
13
  # In config/initializers/db2s3.rb
10
14
  DB2S3::Config.instance_eval do
11
15
  S3 = {
@@ -16,6 +20,8 @@ Usage:
16
20
  end
17
21
  # DB credentials are read from your rails environment
18
22
 
23
+ rake gems:install
24
+
19
25
  # Add to your crontab or whatever
20
26
  rake db2s3:backup:full
21
27
  rake db2s3:backup:incremental # Unimplemented
data/db2s3.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{db2s3}
5
- s.version = "0.2"
5
+ s.version = "0.2.1"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Xavier Shay"]
@@ -16,6 +16,7 @@ Gem::Specification.new do |s|
16
16
  init.rb
17
17
  lib
18
18
  lib/db2s3.rb
19
+ lib/db2s3/tasks.rb
19
20
  rails
20
21
  rails/init.rb
21
22
  spec
@@ -0,0 +1 @@
1
+ Dir["#{File.dirname(__FILE__)}/../../tasks/*.rake"].each { |ext| load ext }
data/lib/db2s3.rb CHANGED
@@ -23,14 +23,16 @@ class DB2S3
23
23
  transfer_dollars_per_byte_per_month = 0.10 / 1024.0 / 1024.0 / 1024.0
24
24
  full_dumps_per_month = 30
25
25
 
26
- storage_cost = dump_file.size * storage_dollars_per_byte_per_month
27
- transfer_cost = dump_file.size * full_dumps_per_month * transfer_dollars_per_byte_per_month
26
+ storage_cost = (dump_file.size * storage_dollars_per_byte_per_month * 100).ceil / 100.0
27
+ transfer_cost = (dump_file.size * full_dumps_per_month * transfer_dollars_per_byte_per_month * 100).ceil / 100.0
28
+ requests_cost = 0.02 # TODO: Actually calculate this, with incremental backups could be more
28
29
 
29
30
  {
30
31
  :db_size => dump_file.size,
31
32
  :storage_cost => storage_cost,
32
33
  :transfer_cost => transfer_cost,
33
- :total_cost => storage_cost + transfer_cost,
34
+ :total_cost => storage_cost + transfer_cost + requests_cost,
35
+ :requests_cost => requests_cost,
34
36
  :full_backups_per_month => full_dumps_per_month
35
37
  }
36
38
  end
data/rails/init.rb CHANGED
@@ -1 +1 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/lib/db2s3')
1
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/db2s3')
data/spec/db2s3_spec.rb CHANGED
@@ -28,11 +28,21 @@ describe 'db2s3' do
28
28
  db2s3.stub!(:dump_db).and_return(stub("dump file", :size => 1024 * 1024 * 1024))
29
29
  metrics = db2s3.metrics
30
30
  metrics.should == {
31
- :storage_cost => 0.15, # 15c/GB-Month, we're only storing one backup
31
+ :storage_cost => 0.15, # 15c/GB-Month rounded up to nearest cent, we're only storing one backup
32
32
  :transfer_cost => 3.0, # 10c/GB-Month * 30 backups
33
33
  :db_size => 1024 * 1024 * 1024, # 1 GB
34
- :total_cost => 3.15,
34
+ :total_cost => 3.17,
35
+ :requests_cost => 0.02,
35
36
  :full_backups_per_month => 30 # Default 1 backup/day
36
37
  }
37
38
  end
39
+
40
+ it 'rounds transfer cost metric up to nearest cent' do
41
+ db2s3 = DB2S3.new
42
+ # 1 KB DB
43
+ db2s3.stub!(:dump_db).and_return(stub("dump file", :size => 1024))
44
+ metrics = db2s3.metrics
45
+ metrics[:storage_cost].should == 0.01
46
+ metrics[:transfer_cost].should == 0.01
47
+ end
38
48
  end
data/tasks/tasks.rake CHANGED
@@ -15,15 +15,20 @@ namespace :db2s3 do
15
15
  s.sub(/\.?0*$/, units[e])
16
16
  end
17
17
 
18
+ def format_cost(cost)
19
+ "%.2f" % [cost]
20
+ end
21
+
18
22
  metrics = DB2S3.new.metrics
19
23
  puts <<-EOS
20
24
  Estimates only, does not take into account metadata overhead
21
25
 
22
26
  DB Size: #{format_size(metrics[:db_size])}
23
27
  Full backups/month: #{metrics[:full_backups_per_month]}
24
- Storage Cost $US: #{metrics[:storage_cost]}
25
- Transfer Cost $US: #{metrics[:transfer_cost]}
26
- Total Cost $US: #{metrics[:total_cost]}
28
+ Storage Cost $US: #{format_cost(metrics[:storage_cost])}
29
+ Transfer Cost $US: #{format_cost(metrics[:transfer_cost])}
30
+ Requests Cost $US: #{format_cost(metrics[:requests_cost])}
31
+ Total Cost $US: #{format_cost(metrics[:total_cost])}
27
32
  EOS
28
33
  end
29
34
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xaviershay-db2s3
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.2"
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Xavier Shay
@@ -37,6 +37,7 @@ files:
37
37
  - init.rb
38
38
  - lib
39
39
  - lib/db2s3.rb
40
+ - lib/db2s3/tasks.rb
40
41
  - rails
41
42
  - rails/init.rb
42
43
  - spec