amazon-pricing 0.1.62 → 0.1.63

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,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- amazon-pricing (0.1.62)
4
+ amazon-pricing (0.1.63)
5
5
  mechanize (~> 2.7.2)
6
6
 
7
7
  GEM
data/Rakefile CHANGED
@@ -102,7 +102,7 @@ def print_rds_table(pricing, target_region = nil)
102
102
  end
103
103
 
104
104
  [:year1, :year3].each do |term|
105
- [:light, :medium, :heavy].each do |res_type|
105
+ [:light, :medium, :heavy, :allupfront, :partialupfront, :noupfront].each do |res_type|
106
106
  AwsPricing::DatabaseType.get_database_name.each do |db|
107
107
  unless AwsPricing::DatabaseType.get_available_types(db).nil?
108
108
  AwsPricing::DatabaseType.get_available_types(db).each do |deploy_type|
@@ -136,7 +136,7 @@ def print_rds_table(pricing, target_region = nil)
136
136
  end
137
137
  end
138
138
  [:year1, :year3].each do |term|
139
- [:light, :medium, :heavy].each do |res_type|
139
+ [:light, :medium, :heavy, :allupfront, :partialupfront, :noupfront].each do |res_type|
140
140
  AwsPricing::DatabaseType.get_database_name.each do |db|
141
141
  unless AwsPricing::DatabaseType.get_available_types(db).nil?
142
142
  AwsPricing::DatabaseType.get_available_types(db).each do |deploy_type|
@@ -81,12 +81,47 @@ module AwsPricing
81
81
  when "yearTerm1Hourly"
82
82
  db.set_price_per_hour(type_of_instance, :year1, price)
83
83
  when "yearTerm3Hourly"
84
- db.set_price_per_hour(type_of_instance, :year3, price)
84
+ db.set_price_per_hour(type_of_instance, :year3, price)
85
85
  end
86
86
  end
87
87
  end
88
88
  end
89
89
 
90
+ def update_pricing_new(database_type, type_of_instance, prices, term = nil, is_multi_az, is_byol)
91
+ db = get_category_type(database_type, is_multi_az, is_byol)
92
+ if db.nil?
93
+ db = DatabaseType.new(self, database_type)
94
+
95
+ if is_multi_az == true and is_byol == true
96
+ @category_types["#{database_type}_byol_multiaz"] = db
97
+ elsif is_multi_az == true and is_byol == false
98
+ @category_types["#{database_type}_multiaz"] = db
99
+ elsif is_multi_az == false and is_byol == true
100
+ @category_types["#{database_type}_byol"] = db
101
+ else
102
+ @category_types[database_type] = db
103
+ end
104
+
105
+ end
106
+
107
+ terms_to_years = {
108
+ "yrTerm1" => :year1,
109
+ "yrTerm3" => :year3
110
+ }
111
+ years = terms_to_years[term]
112
+ prices.each do |price|
113
+ p = price['prices']['USD']
114
+ case price['name']
115
+ when 'upfront'
116
+ db.set_prepay(type_of_instance, years, p.to_f) unless type_of_instance == :noupfront || p == "N/A"
117
+ when 'monthlyStar'
118
+ db.set_price_per_hour(type_of_instance, years, p.to_f * 12 / 365 / 24) unless type_of_instance == :allupfront || p == "N/A"
119
+ else
120
+ # Do nothing for other names
121
+ end
122
+ end
123
+ end
124
+
90
125
  def update_pricing2(database_type, type_of_instance, is_multi_az, is_byol, ondemand_pph = nil, year1_prepay = nil, year3_prepay = nil, year1_pph = nil, year3_pph = nil)
91
126
  db = get_category_type(database_type, is_multi_az, is_byol)
92
127
  if db.nil?
@@ -5,6 +5,7 @@ module AwsPricing
5
5
  super
6
6
  InstanceType.populate_lookups
7
7
  get_rds_on_demand_instance_pricing
8
+ get_rds_reserved_instance_pricing2
8
9
  get_rds_reserved_instance_pricing
9
10
  end
10
11
 
@@ -34,6 +35,22 @@ module AwsPricing
34
35
  :sqlserver=> {:sqlserver_ex=>["li-ex"], :sqlserver_web=>["li-web"], :sqlserver_se=>["li-se","byol"], :sqlserver_ee=>["byol"]}
35
36
  }
36
37
 
38
+ @@RESERVED_DB_DEPLOY_TYPE2 = {
39
+ :mysql => {:mysql=>["standard","multiAZ"]},
40
+ :postgresql => {:postgresql=>["standard","multiAZ"]},
41
+ :oracle => {:oracle_se1=>["license-included-standard", "license-included-multiAZ"],
42
+ :oracle_se=>["byol-standard", "byol-multiAZ"]},
43
+ :sqlserver=> {:sqlserver_se=>["byol-standard", "byol-multiAZ"]}
44
+ }
45
+
46
+ @@RESERVED_DB_WITH_SAME_PRICING2 = {
47
+ :mysql => [:mysql],
48
+ :postgresql => [:postgresql],
49
+ :oracle_se1 => [:oracle_se1],
50
+ :oracle_se => [:oracle_se, :oracle_se1, :oracle_ee],
51
+ :sqlserver_se => [:sqlserver_se, :sqlserver_ee]
52
+ }
53
+
37
54
  def is_multi_az?(type)
38
55
  return true if type.upcase.match("MULTI-AZ")
39
56
  false
@@ -80,6 +97,60 @@ module AwsPricing
80
97
  end
81
98
  end
82
99
 
100
+ def get_rds_reserved_instance_pricing2
101
+ @@DB_TYPE.each do |db_name|
102
+ @@RESERVED_DB_DEPLOY_TYPE2[db_name].each do |db, deploy_types|
103
+ deploy_types.each do |deploy_type|
104
+ is_byol = is_byol? deploy_type
105
+ is_multi_az = deploy_type.upcase.include?("MULTIAZ")
106
+ db_str = db == :sqlserver_se ? 'sql-server-se' : db.to_s.gsub(/_/, '-')
107
+ dbs_with_same_pricing = @@RESERVED_DB_WITH_SAME_PRICING2[db]
108
+ fetch_reserved_rds_instance_pricing2(RDS_BASE_URL+"reserved-instances/#{db_str}-#{deploy_type}.min.js", dbs_with_same_pricing, is_multi_az, is_byol)
109
+ end
110
+ end
111
+ end
112
+ end
113
+
114
+ def fetch_reserved_rds_instance_pricing2(url, dbs, is_multi_az, is_byol)
115
+ res = PriceList.fetch_url(url)
116
+ res['config']['regions'].each do |reg|
117
+ region_name = reg['region']
118
+ region = get_region(region_name)
119
+ if region.nil?
120
+ $stderr.puts "[fetch_reserved_rds_instance_pricing2] WARNING: unable to find region #{region_name}"
121
+ next
122
+ end
123
+ reg['instanceTypes'].each do |type|
124
+ api_name = type["type"]
125
+ instance_type = region.get_rds_instance_type(api_name)
126
+ if instance_type.nil?
127
+ $stderr.puts "[fetch_reserved_rds_instance_pricing2] WARNING: new reserved instances not found for #{api_name} in #{region_name}"
128
+ next
129
+ end
130
+
131
+ type["terms"].each do |term|
132
+ term["purchaseOptions"].each do |option|
133
+ case option["purchaseOption"]
134
+ when "noUpfront"
135
+ reservation_type = :noupfront
136
+ when "allUpfront"
137
+ reservation_type = :allupfront
138
+ when "partialUpfront"
139
+ reservation_type = :partialupfront
140
+ end
141
+
142
+ duration = term["term"]
143
+ prices = option["valueColumns"]
144
+ dbs.each do |db|
145
+ instance_type.update_pricing_new(db, reservation_type, prices, duration, is_multi_az, is_byol)
146
+ end
147
+ end
148
+ end
149
+
150
+ end
151
+ end
152
+ end
153
+
83
154
  def get_rds_reserved_instance_pricing
84
155
  @@DB_TYPE.each do |db|
85
156
  if [:mysql, :postgresql].include? db
@@ -8,5 +8,5 @@
8
8
  # Home:: http://github.com/CloudHealth/amazon-pricing
9
9
  #++
10
10
  module AwsPricing
11
- VERSION = '0.1.62'
12
- end
11
+ VERSION = '0.1.63'
12
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amazon-pricing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.62
4
+ version: 0.1.63
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-06-22 00:00:00.000000000 Z
12
+ date: 2015-06-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mechanize