aws-rikanjo 0.0.8 → 0.0.9

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.
@@ -1,24 +1,34 @@
1
1
  require "spec_helper"
2
- require "aws/rikanjo/mode/rds"
2
+ require "aws/rikanjo/rds"
3
3
 
4
4
  include RikanjoSpecHelper
5
5
 
6
- describe 'AWS::Rikanjo::Mode::Rds' do
6
+ describe 'AWS::Rikanjo::Rds' do
7
7
 
8
8
  describe 'url' do
9
9
 
10
+ it "build previous price url" do
11
+ a = Aws::RiKanjoo::Rds.new(
12
+ region = 'ap-northeast-1',
13
+ instance_type = 'm1.large',
14
+ ri_util = 'light',
15
+ multiaz = false,
16
+ )
17
+ expect(a.price_url).to eq "http://a0.awsstatic.com/pricing/1/rds/mysql/previous-generation"
18
+ end
19
+
10
20
  it "build current price url" do
11
- a = Aws::RiKanjoo::Mode::Rds.new(
21
+ a = Aws::RiKanjoo::Rds.new(
12
22
  region = 'ap-northeast-1',
13
23
  instance_type = 'm3.large',
14
24
  ri_util = 'light',
15
25
  multiaz = false,
16
26
  )
17
- expect(a.price_url).to eq "https://a0.awsstatic.com/pricing/1/rds/mysql"
27
+ expect(a.price_url).to eq "http://a0.awsstatic.com/pricing/1/rds/mysql"
18
28
  end
19
29
 
20
30
  it "build current om price file" do
21
- a = Aws::RiKanjoo::Mode::Rds.new(
31
+ a = Aws::RiKanjoo::Rds.new(
22
32
  region = 'ap-northeast-1',
23
33
  instance_type = 'm2.xlarge',
24
34
  ri_util = 'medium',
@@ -28,7 +38,7 @@ describe 'AWS::Rikanjo::Mode::Rds' do
28
38
  end
29
39
 
30
40
  it "build current om price file(multiaz)" do
31
- a = Aws::RiKanjoo::Mode::Rds.new(
41
+ a = Aws::RiKanjoo::Rds.new(
32
42
  region = 'ap-northeast-1',
33
43
  instance_type = 'm2.xlarge',
34
44
  ri_util = 'medium',
@@ -38,7 +48,7 @@ describe 'AWS::Rikanjo::Mode::Rds' do
38
48
  end
39
49
 
40
50
  it "build current ri price file" do
41
- a = Aws::RiKanjoo::Mode::Rds.new(
51
+ a = Aws::RiKanjoo::Rds.new(
42
52
  region = 'ap-northeast-1',
43
53
  instance_type = 'm2.xlarge',
44
54
  ri_util = 'medium',
@@ -54,14 +64,14 @@ describe 'AWS::Rikanjo::Mode::Rds' do
54
64
 
55
65
  before :all do
56
66
  # rikanjo (single-az)
57
- a1 = Aws::RiKanjoo::Mode::Rds.new(
67
+ a1 = Aws::RiKanjoo::Rds.new(
58
68
  region = 'ap-northeast-1',
59
69
  instance_type = 'm3.medium',
60
70
  ri_util = 'medium',
61
71
  multiaz = false,
62
72
  )
63
73
  # rikanjo (multi-az)
64
- a2 = Aws::RiKanjoo::Mode::Rds.new(
74
+ a2 = Aws::RiKanjoo::Rds.new(
65
75
  region = 'ap-northeast-1',
66
76
  instance_type = 'm3.medium',
67
77
  ri_util = 'medium',
@@ -74,7 +84,7 @@ describe 'AWS::Rikanjo::Mode::Rds' do
74
84
 
75
85
  it "is able to get the price(singleaz)" do
76
86
  regions.each do |region|
77
- a = Aws::RiKanjoo::Mode::Rds.new(
87
+ a = Aws::RiKanjoo::Rds.new(
78
88
  region = region,
79
89
  instance_type = 'm3.large',
80
90
  ri_util = 'medium',
@@ -93,7 +103,7 @@ describe 'AWS::Rikanjo::Mode::Rds' do
93
103
 
94
104
  it "is able to get the price(multiaz)" do
95
105
  regions.each do |region|
96
- a = Aws::RiKanjoo::Mode::Rds.new(
106
+ a = Aws::RiKanjoo::Rds.new(
97
107
  region = region,
98
108
  instance_type = 'm3.large',
99
109
  ri_util = 'medium',
@@ -112,7 +122,7 @@ describe 'AWS::Rikanjo::Mode::Rds' do
112
122
 
113
123
  it "an exception is raised when there are no instance-type" do
114
124
  regions.each do |region|
115
- a = Aws::RiKanjoo::Mode::Rds.new(
125
+ a = Aws::RiKanjoo::Rds.new(
116
126
  region = region,
117
127
  instance_type = 'm3.large.not.exists',
118
128
  ri_util = 'medium',
metadata CHANGED
@@ -1,41 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-rikanjo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - kenjiskywalker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-16 00:00:00.000000000 Z
11
+ date: 2014-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: yajl-ruby
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
39
81
  - !ruby/object:Gem::Version
40
82
  version: '0'
41
83
  description: AWS RI Cost Calc Tool
@@ -46,8 +88,10 @@ executables:
46
88
  extensions: []
47
89
  extra_rdoc_files: []
48
90
  files:
49
- - ".gitignore"
50
- - ".rspec"
91
+ - .gitignore
92
+ - .hound.yml
93
+ - .rspec
94
+ - .travis.yml
51
95
  - Gemfile
52
96
  - LICENSE.txt
53
97
  - README.md
@@ -55,8 +99,11 @@ files:
55
99
  - aws-rikanjo.gemspec
56
100
  - bin/rikanjo
57
101
  - lib/aws/rikanjo.rb
58
- - lib/aws/rikanjo/mode/ec2.rb
59
- - lib/aws/rikanjo/mode/rds.rb
102
+ - lib/aws/rikanjo/base.rb
103
+ - lib/aws/rikanjo/calc.rb
104
+ - lib/aws/rikanjo/cli.rb
105
+ - lib/aws/rikanjo/ec2.rb
106
+ - lib/aws/rikanjo/rds.rb
60
107
  - lib/aws/rikanjo/version.rb
61
108
  - spec/lib/rikanjo_ec2_spec.rb
62
109
  - spec/lib/rikanjo_rds_spec.rb
@@ -72,17 +119,17 @@ require_paths:
72
119
  - lib
73
120
  required_ruby_version: !ruby/object:Gem::Requirement
74
121
  requirements:
75
- - - ">="
122
+ - - '>='
76
123
  - !ruby/object:Gem::Version
77
124
  version: '0'
78
125
  required_rubygems_version: !ruby/object:Gem::Requirement
79
126
  requirements:
80
- - - ">="
127
+ - - '>='
81
128
  - !ruby/object:Gem::Version
82
129
  version: '0'
83
130
  requirements: []
84
131
  rubyforge_project:
85
- rubygems_version: 2.2.2
132
+ rubygems_version: 2.0.14
86
133
  signing_key:
87
134
  specification_version: 4
88
135
  summary: calc 1 year cost. check sweet spot
@@ -1,120 +0,0 @@
1
- require 'yajl'
2
-
3
- module Aws
4
- class RiKanjoo
5
- class Mode
6
- class Ec2
7
- attr_reader :region, :instance_type, :ri_util
8
-
9
- def initialize(region, instance_type, ri_util)
10
- @region = region
11
- @instance_type = instance_type
12
- @ri_util = ri_util
13
- @os = 'linux'
14
- @current_price_url = 'http://a0.awsstatic.com/pricing/1/ec2'
15
- @previous_price_url = 'http://a0.awsstatic.com/pricing/1/ec2/previous-generation'
16
- end
17
-
18
- def om_price_from_contents contents
19
- region = self.convert_region(@region)
20
-
21
- # parse
22
- json = self.parse_contents(contents)
23
-
24
- # select 'region' and 'instance_type'
25
- json["config"]["regions"].each do |r|
26
- # r = {"region"=>"us-east", "instanceTypes"=>[{"type"=>"generalCurrentGen", ...
27
- next unless r["region"] == region
28
- r["instanceTypes"].each do |type|
29
- # type = {"type"=>"generalCurrentGen", "sizes"=>[{"size"=>"m3.medium", "vCPU"=>"1" ...
30
- type["sizes"].each do |i|
31
- next unless i["size"] == @instance_type
32
-
33
- return {:hr_price => i["valueColumns"][0]["prices"]["USD"]}
34
- end
35
- end
36
- end
37
-
38
- abort("[ec2][#{region}][#{@instance_type}] Not found om-price?")
39
- end
40
-
41
- def ri_price_from_contents contents
42
- region = self.clean_region(@region)
43
-
44
- # parse
45
- json = self.parse_contents(contents)
46
-
47
- ri_info = nil
48
-
49
- json["config"]["regions"].each do |r|
50
- next unless r["region"] == region
51
-
52
- r["instanceTypes"].each do |type|
53
- type["sizes"].each do |i|
54
- next unless i["size"] == @instance_type
55
-
56
- ri_info = ri_info || {}
57
- i["valueColumns"].each do |y|
58
- case y["name"]
59
- when "yrTerm1"
60
- ri_info[@ri_util] = {:upfront => y["prices"]["USD"]}
61
- when "yrTerm1Hourly"
62
- ri_info[@ri_util].store(:hr_price, y["prices"]["USD"])
63
- end
64
- end
65
- end
66
- end
67
- end
68
-
69
- abort("[ec2][#{region}][#{@instance_type}] Not found ri-price?") unless ri_info
70
-
71
- return ri_info
72
- end
73
-
74
- def price_url
75
- return (self.previous_generation_type) ? @previous_price_url : @current_price_url
76
- end
77
-
78
- def om_price_file
79
- return "#{@os}-od.min.js"
80
- end
81
-
82
- def ri_price_file
83
- return (self.previous_generation_type) ? "#{@ri_util}_#{@os}.min.js" : "#{@os}-ri-#{@ri_util}.min.js"
84
- end
85
-
86
- def previous_generation_type
87
- case @instance_type
88
- when /^(c1|m2|cc2\.8xlarge|cr1\.8xlarge|hi1\.4xlarge|cg1\.4xlarge)/ then true
89
- when /^m1/ then (@instance_type == "m1.small") ? false : true
90
- else false
91
- end
92
- end
93
-
94
- def parse_contents data
95
- data = data.gsub("/*\n * This file is intended for use only on aws.amazon.com. We do not guarantee its availability or accuracy.\n *\n * Copyright 2014 Amazon.com, Inc. or its affiliates. All rights reserved.\n */\ncallback({",'{').gsub("\);", '').gsub(/([a-zA-Z]+):/, '"\1":')
96
- return Yajl::Parser.parse(data)
97
- end
98
-
99
- def convert_region region
100
- # not same om region
101
- case region
102
- when "us-east-1" then "us-east"
103
- when "us-west-1" then "us-west"
104
- when "us-west-2" then "us-west-2"
105
- when "eu-west-1" then "eu-ireland"
106
- when "ap-southeast-1" then "apac-sin"
107
- when "ap-northeast-1" then "apac-tokyo"
108
- when "ap-southeast-2" then "apac-syd"
109
- when "sa-east-1" then "sa-east-1"
110
- end
111
- end
112
-
113
- def clean_region region
114
- return region.gsub(/^us-east-1$/, 'us-east')
115
- end
116
-
117
- end
118
- end
119
- end
120
- end
@@ -1,117 +0,0 @@
1
- module Aws
2
- class RiKanjoo
3
- class Mode
4
- class Rds
5
- attr_reader :region, :instance_type, :ri_util
6
-
7
- def initialize(region, instance_type, ri_util, multiaz)
8
- @region = region
9
- @instance_type = "db.#{instance_type}"
10
- @ri_util = ri_util
11
- @rdbms = 'mysql'
12
- @price_url = "https://a0.awsstatic.com/pricing/1/rds/#{@rdbms}"
13
- @multiaz = multiaz
14
- end
15
-
16
- def om_price_from_contents contents
17
- region = self.convert_region(@region)
18
-
19
- # parse
20
- json = self.parse_contents(contents)
21
-
22
- # select 'region' and 'instance_type'
23
- json["config"]["regions"].each do |r|
24
- # r = {"region"=>"us-east", "instanceTypes"=>[{"type"=>"generalCurrentGen", ...
25
- next unless r["region"] == region
26
- r["types"].each do |type|
27
- # type = {"type"=>"generalCurrentGen", "sizes"=>[{"size"=>"m3.medium", "vCPU"=>"1" ...
28
- type["tiers"].each do |i|
29
- next unless i["name"] == @instance_type
30
-
31
- return {:hr_price => i["prices"]["USD"]}
32
- end
33
- end
34
- end
35
-
36
- abort("[rds][#{region}][#{@instance_type}] Not found om-price?")
37
- end
38
-
39
- def ri_price_from_contents contents
40
- region = self.convert_region(@region)
41
- mtype = (@multiaz) ? 'multiAZdeployRes' : 'stdDeployRes'
42
-
43
- # parse
44
- json = self.parse_contents(contents)
45
-
46
- ri_info = nil
47
-
48
- json["config"]["regions"].each do |r|
49
- next unless r["region"] == region
50
-
51
- r["instanceTypes"].each do |type|
52
- # beauty
53
- type["type"].gsub!(/Single-AZ Deployment \(Reserved\)/, 'stdDeployRes')
54
-
55
- next unless type["type"] == mtype
56
-
57
- type["tiers"].each do |i|
58
- next unless i["size"] == @instance_type
59
-
60
- ri_info = ri_info || {}
61
- i["valueColumns"].each do |y|
62
- # beauty
63
- y["name"].gsub!(/^year/, 'yr')
64
- y["prices"]["USD"].gsub!(/,/, '')
65
-
66
- case y["name"]
67
- when "yrTerm1"
68
- ri_info[@ri_util] = {:upfront => y["prices"]["USD"]}
69
- when "yrTerm1Hourly"
70
- ri_info[@ri_util].store(:hr_price, y["prices"]["USD"])
71
- end
72
- end
73
-
74
- end
75
- end
76
- end
77
-
78
- abort("[rds][#{region}][#{@instance_type}] Not found ri-price?") unless ri_info
79
-
80
- return ri_info
81
- end
82
-
83
- def price_url
84
- @price_url
85
- end
86
-
87
- def om_price_file
88
- return (@multiaz) ? "pricing-multiAZ-deployments.min.js" : "pricing-standard-deployments.min.js"
89
- end
90
-
91
- def ri_price_file
92
- return "pricing-#{@ri_util}-utilization-reserved-instances.min.js"
93
- end
94
-
95
- def parse_contents data
96
- data = data.gsub("/*\n * This file is intended for use only on aws.amazon.com. We do not guarantee its availability or accuracy.\n *\n * Copyright 2014 Amazon.com, Inc. or its affiliates. All rights reserved.\n */\ncallback({",'{').gsub("\);", '').gsub(/([a-zA-Z]+):/, '"\1":')
97
- return Yajl::Parser.parse(data)
98
- end
99
-
100
- def convert_region region
101
- # not same om region
102
- case region
103
- when "us-east-1" then "us-east"
104
- when "us-west-1" then "us-west"
105
- when "us-west-2" then "us-west-2"
106
- when "eu-west-1" then "eu-ireland"
107
- when "ap-southeast-1" then "apac-sin"
108
- when "ap-northeast-1" then "apac-tokyo"
109
- when "ap-southeast-2" then "apac-syd"
110
- when "sa-east-1" then "sa-east-1"
111
- end
112
- end
113
-
114
- end
115
- end
116
- end
117
- end