amazon-pricing 0.1.12 → 0.1.13

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/Rakefile CHANGED
@@ -67,67 +67,72 @@ desc "Prints current RDS pricing in CSV format"
67
67
  task :print_rds_price_list do
68
68
  require 'amazon-pricing'
69
69
  pricing = AwsPricing::RdsPriceList.new
70
-
70
+
71
71
  line = "Region,Instance Type,API Name,Memory (MB),Disk (GB),Compute Units,Virtual Cores,Disk Type,"
72
-
73
-
74
- [:mysql, :oracle, :oracle_byol, :sqlserver, :sqlserver_express, :sqlserver_web, :sqlserver_byol].each do |db|
75
- if [:mysql, :oracle, :oracle_byol].include? db
76
- [:standard,:multiAZ].each do |deploy_type|
77
- line += "OD #{db} #{deploy_type} PPH,"
72
+
73
+ AwsPricing::DatabaseType.get_database_name.each do |db|
74
+ unless AwsPricing::DatabaseType.get_available_types(db).nil?
75
+ AwsPricing::DatabaseType.get_available_types(db).each do |deploy_type|
76
+ line += "OD "+ AwsPricing::DatabaseType.display_name("#{db}_#{deploy_type}") +" PPH,"
78
77
  end
79
78
  else
80
- line += "OD #{db} PPH,"
81
- end
79
+ line += "OD "+ AwsPricing::DatabaseType.display_name(db.to_s) +" PPH,"
80
+ end
82
81
  end
83
82
 
84
-
85
83
  [:year1, :year3].each do |term|
86
- [:light, :medium, :heavy].each do |res_type|
87
- [:mysql, :oracle, :oracle_byol, :sqlserver, :sqlserver_express, :sqlserver_web, :sqlserver_byol].each do |db|
88
- if [:mysql, :oracle, :oracle_byol].include? db
89
- [:standard,:multiAZ].each do |deploy_type|
90
- line += "#{term} #{res_type} #{deploy_type} #{db} Prepay,#{term} #{res_type} #{deploy_type} #{db} PPH,"
84
+ [:light, :medium, :heavy].each do |res_type|
85
+ AwsPricing::DatabaseType.get_database_name.each do |db|
86
+ unless AwsPricing::DatabaseType.get_available_types(db).nil?
87
+ AwsPricing::DatabaseType.get_available_types(db).each do |deploy_type|
88
+ line += "#{term} #{res_type} "+ AwsPricing::DatabaseType.display_name("#{db}_#{deploy_type}") +" Prepay,#{term} #{res_type} "+ AwsPricing::DatabaseType.display_name("#{db}_#{deploy_type}") +" PPH,"
89
+ end
90
+ else
91
+ line += "#{term} #{res_type} "+ AwsPricing::DatabaseType.display_name(db.to_s) +" Prepay,#{term} #{res_type} "+ AwsPricing::DatabaseType.display_name(db.to_s) +" PPH,"
91
92
  end
92
- else
93
- line += "#{term} #{res_type} #{db} Prepay,#{term} #{res_type} #{db} PPH,"
94
- end
95
- end
96
- end
93
+ end
94
+ end
97
95
  end
98
96
 
99
97
 
100
- puts line.chop
101
-
102
- pricing.regions.each do |region|
103
- region.rds_instance_types.each do |t|
104
- line = "#{region.name},#{t.name},#{t.api_name},#{t.memory_in_mb},#{t.disk_in_gb},#{t.compute_units},#{t.virtual_cores},#{t.disk_type},"
105
- [:mysql, :oracle, :oracle_byol, :sqlserver, :sqlserver_express, :sqlserver_web, :sqlserver_byol].each do |db|
106
- if [:mysql, :oracle, :oracle_byol].include? db
107
- [:standard,:multiAZ].each do |deploy_type|
108
- line += "#{t.price_per_hour(db, :ondemand, nil, deploy_type == :multiAZ)},"
109
- end
110
- else
111
- line += "#{t.price_per_hour(db, :ondemand, nil, false)},"
112
- end
113
- end
114
-
115
- [:year1, :year3].each do |term|
116
- [:light, :medium, :heavy].each do |res_type|
117
- [:mysql, :oracle, :oracle_byol, :sqlserver, :sqlserver_express, :sqlserver_web, :sqlserver_byol].each do |db|
118
- if [:mysql, :oracle, :oracle_byol].include? db
119
- [:standard,:multiAZ].each do |deploy_type|
120
- line += "#{t.prepay(db, res_type, term, deploy_type == :multiAZ)},#{t.price_per_hour(db, res_type, term, deploy_type == :multiAZ)},"
98
+ puts line.chop
99
+
100
+ pricing.regions.each do |region|
101
+ region.rds_instance_types.each do |t|
102
+ line = "#{region.name},#{t.name},#{t.api_name},#{t.memory_in_mb},#{t.disk_in_gb},#{t.compute_units},#{t.virtual_cores},#{t.disk_type},"
103
+ AwsPricing::DatabaseType.get_database_name.each do |db|
104
+ unless AwsPricing::DatabaseType.get_available_types(db).nil?
105
+ AwsPricing::DatabaseType.get_available_types(db).each do |deploy_type|
106
+ if deploy_type == :byol_multiaz
107
+ line += "#{t.price_per_hour(db, :ondemand, nil, true, true)},"
108
+ else
109
+ line += "#{t.price_per_hour(db, :ondemand, nil, deploy_type == :multiaz, deploy_type == :byol)},"
110
+ end
111
+ end
112
+ else
113
+ line += "#{t.price_per_hour(db, :ondemand, nil)},"
114
+ end
115
+ end
116
+ [:year1, :year3].each do |term|
117
+ [:light, :medium, :heavy].each do |res_type|
118
+ AwsPricing::DatabaseType.get_database_name.each do |db|
119
+ unless AwsPricing::DatabaseType.get_available_types(db).nil?
120
+ AwsPricing::DatabaseType.get_available_types(db).each do |deploy_type|
121
+ if deploy_type == :byol_multiaz
122
+ line += "#{t.prepay(db, res_type, term, true, true)},#{t.price_per_hour(db, res_type, term, true, true)},"
123
+ else
124
+ line += "#{t.prepay(db, res_type, term, deploy_type == :multiaz, deploy_type == :byol)},#{t.price_per_hour(db, res_type, term, deploy_type == :multiaz, deploy_type == :byol)},"
125
+ end
121
126
  end
122
127
  else
123
- line += "#{t.prepay(db, res_type, term, false)},#{t.price_per_hour(db, res_type, term, false)},"
128
+ line += "#{t.prepay(db, res_type, term)},#{t.price_per_hour(db, res_type, term)},"
124
129
  end
125
- end
126
- end
127
- end
128
- puts line.chop
129
- end
130
- end
130
+ end
131
+ end
132
+ end
133
+ puts line.chop
134
+ end
135
+ end
131
136
  end
132
137
 
133
138
  task :default => [:test]
@@ -137,8 +137,6 @@ module AwsPricing
137
137
 
138
138
  end
139
139
 
140
-
141
-
142
140
  class RdsPriceList < PriceList
143
141
 
144
142
  def initialize
@@ -154,30 +152,39 @@ module AwsPricing
154
152
 
155
153
  @@OD_DB_DEPLOY_TYPE = {
156
154
  :mysql=> {:mysql=>["standard","multiAZ"]},
157
- :oracle=> {:oracle=>["li-standard","li-multiAZ"], :oracle_byol=>["byol-standard","byol-multiAZ"]},
158
- :sqlserver=> {:sqlserver=>["li-se"], :sqlserver_express=>["li-ex"], :sqlserver_web=>["li-web"], :sqlserver_byol=>["byol"]}
155
+ :oracle=> {:oracle_se1=>["li-standard","li-multiAZ","byol-standard","byol-multiAZ"], :oracle_se=>["byol-standard","byol-multiAZ"], :oracle_ee=>["byol-standard","byol-multiAZ"]},
156
+ :sqlserver=> {:sqlserver_ex=>["li-ex"], :sqlserver_web=>["li-web"], :sqlserver_se=>["li-se", "byol"], :sqlserver_ee=>["byol"]}
159
157
  }
160
158
 
161
159
 
162
160
  @@RESERVED_DB_DEPLOY_TYPE = {
163
- :oracle=> {:oracle=>"li", :oracle_byol=>"byol"},
164
- :sqlserver=> {:sqlserver=>"li-se", :sqlserver_express=>"li-ex", :sqlserver_web=>"li-web", :sqlserver_byol=>"byol"}
161
+ :oracle=> {:oracle_se1=>["li","byol"], :oracle_se=>["byol"], :oracle_ee=>["byol"]},
162
+ :sqlserver=> {:sqlserver_ex=>["li-ex"], :sqlserver_web=>["li-web"], :sqlserver_se=>["li-se","byol"], :sqlserver_ee=>["byol"]}
165
163
  }
166
164
 
167
165
 
168
166
  def is_multi_az?(type)
169
167
  return true if type.match("multiAZ")
170
168
  false
169
+ end
170
+
171
+ def is_byol?(type)
172
+ return true if type.match("byol")
173
+ false
171
174
  end
172
175
 
173
176
  def get_rds_on_demand_instance_pricing
174
177
  @@DB_TYPE.each do |db|
175
178
  @@OD_DB_DEPLOY_TYPE[db].each {|db_type, db_instances|
176
179
  db_instances.each do |dp_type|
180
+ #
181
+ # to find out the byol type
182
+ is_byol = is_byol? dp_type
183
+
177
184
  if db == :mysql or db == :oracle
178
- fetch_on_demand_rds_instance_pricing(RDS_BASE_URL+"#{db}/pricing-#{dp_type}-deployments.json",:ondemand, db_type)
185
+ fetch_on_demand_rds_instance_pricing(RDS_BASE_URL+"#{db}/pricing-#{dp_type}-deployments.json",:ondemand, db_type, is_byol)
179
186
  elsif db == :sqlserver
180
- fetch_on_demand_rds_instance_pricing(RDS_BASE_URL+"#{db}/sqlserver-#{dp_type}-ondemand.json",:ondemand, db_type)
187
+ fetch_on_demand_rds_instance_pricing(RDS_BASE_URL+"#{db}/sqlserver-#{dp_type}-ondemand.json",:ondemand, db_type, is_byol)
181
188
  end
182
189
  end
183
190
  }
@@ -188,20 +195,26 @@ module AwsPricing
188
195
  @@DB_TYPE.each do |db|
189
196
  if db == :mysql
190
197
  @@RES_TYPES.each do |res_type|
191
- fetch_reserved_rds_instance_pricing(RDS_BASE_URL+"#{db}/pricing-#{res_type}-utilization-reserved-instances.json", res_type, db)
198
+ fetch_reserved_rds_instance_pricing(RDS_BASE_URL+"#{db}/pricing-#{res_type}-utilization-reserved-instances.json", res_type, db, false)
192
199
  end
193
200
  else
194
201
  @@RESERVED_DB_DEPLOY_TYPE[db].each {|db_type, db_instance|
195
202
  @@RES_TYPES.each do |res_type|
196
- fetch_reserved_rds_instance_pricing(RDS_BASE_URL+"#{db}/pricing-#{db_instance}-#{res_type}-utilization-reserved-instances.json", res_type, db_type) if db == :oracle
197
- fetch_reserved_rds_instance_pricing(RDS_BASE_URL+"#{db}/sqlserver-#{db_instance}-#{res_type}-ri.json", res_type, db_type) if db == :sqlserver
203
+ db_instance.each do |dp_type|
204
+ is_byol = is_byol? dp_type
205
+ if db == :oracle
206
+ fetch_reserved_rds_instance_pricing(RDS_BASE_URL+"#{db}/pricing-#{dp_type}-#{res_type}-utilization-reserved-instances.json", res_type, db_type, is_byol)
207
+ elsif db == :sqlserver
208
+ fetch_reserved_rds_instance_pricing(RDS_BASE_URL+"#{db}/sqlserver-#{dp_type}-#{res_type}-ri.json", res_type, db_type, is_byol)
209
+ end
210
+ end
198
211
  end
199
212
  }
200
213
  end
201
214
  end
202
215
  end
203
216
 
204
- def fetch_on_demand_rds_instance_pricing(url, type_of_rds_instance, db_type)
217
+ def fetch_on_demand_rds_instance_pricing(url, type_of_rds_instance, db_type, is_byol)
205
218
  res = fetch_url(url)
206
219
  res['config']['regions'].each do |reg|
207
220
  region_name = reg['region']
@@ -212,22 +225,22 @@ module AwsPricing
212
225
  #
213
226
  # this is special case URL, it is oracle - multiAZ type of deployment but it doesn't have mutliAZ attributes in json.
214
227
  if url == "http://aws.amazon.com/rds/pricing/oracle/pricing-li-multiAZ-deployments.json"
215
- isMultiAz = true
228
+ is_multi_az = true
216
229
  else
217
- isMultiAz = is_multi_az? type["name"]
230
+ is_multi_az = is_multi_az? type["name"]
218
231
  end
219
232
  api_name, name = RdsInstanceType.get_name(type["name"], tier["name"], type_of_rds_instance != :ondemand)
220
233
 
221
- region.add_or_update_rds_instance_type(api_name, name, db_type, type_of_rds_instance, tier, isMultiAz)
234
+ region.add_or_update_rds_instance_type(api_name, name, db_type, type_of_rds_instance, tier, is_multi_az, is_byol)
222
235
  rescue UnknownTypeError
223
236
  $stderr.puts "WARNING: encountered #{$!.message}"
224
237
  end
225
238
  end
226
- end
239
+ end
227
240
  end
228
241
  end
229
242
 
230
- def fetch_reserved_rds_instance_pricing(url, type_of_rds_instance, db_type)
243
+ def fetch_reserved_rds_instance_pricing(url, type_of_rds_instance, db_type, is_byol)
231
244
  res = fetch_url(url)
232
245
  res['config']['regions'].each do |reg|
233
246
  region_name = reg['region']
@@ -235,10 +248,10 @@ module AwsPricing
235
248
  reg['instanceTypes'].each do |type|
236
249
  type['tiers'].each do |tier|
237
250
  begin
238
- isMultiAz = is_multi_az? type["type"]
251
+ is_multi_az = is_multi_az? type["type"]
239
252
  api_name, name = RdsInstanceType.get_name(type["type"], tier["size"], true)
240
253
 
241
- region.add_or_update_rds_instance_type(api_name, name, db_type, type_of_rds_instance, tier, isMultiAz)
254
+ region.add_or_update_rds_instance_type(api_name, name, db_type, type_of_rds_instance, tier, is_multi_az, is_byol)
242
255
  rescue UnknownTypeError
243
256
  $stderr.puts "WARNING: encountered #{$!.message}"
244
257
  end
@@ -247,6 +260,4 @@ module AwsPricing
247
260
  end
248
261
  end
249
262
  end
250
-
251
-
252
263
  end
@@ -16,7 +16,7 @@ module AwsPricing
16
16
  :light_prepay_1_year, :light_prepay_3_year, :medium_prepay_1_year, :medium_prepay_3_year, :heavy_prepay_1_year, :heavy_prepay_3_year
17
17
 
18
18
 
19
- def initialize(instance_type, name)
19
+ def initialize(instance_type=nil, name=nil)
20
20
  @instance_type = instance_type
21
21
  @name = name
22
22
  end
@@ -9,5 +9,48 @@
9
9
  #++
10
10
  module AwsPricing
11
11
  class DatabaseType < CategoryType
12
+
13
+ @@Database_Name_Lookup = {
14
+ 'mysql_standard'=> 'MySQL Community Edition',
15
+ 'mysql_multiaz'=> 'MySQL Community Edition (Multi-AZ)',
16
+ 'oracle_se1_standard'=> 'Oracle Database Standard Edition One',
17
+ 'oracle_se1_multiaz'=> 'Oracle Database Standard Edition One (Multi-AZ)',
18
+ 'oracle_se1_byol'=> 'Oracle Database Standard Edition One (BYOL)',
19
+ 'oracle_se1_byol_multiaz'=> 'Oracle Database Standard Edition One (BYOL Multi-AZ)',
20
+ 'oracle_se_byol'=> 'Oracle Database Standard Edition (BYOL)',
21
+ 'oracle_se_byol_multiaz'=> 'Oracle Database Standard Edition (BYOL Multi-AZ)',
22
+ 'oracle_ee_byol'=> 'Oracle Database Enterprise Edition (BYOL)',
23
+ 'oracle_ee_byol_multiaz'=> 'Oracle Database Enterprise Edition (BYOL Multi-AZ)',
24
+ 'sqlserver_ex'=> 'Microsoft SQL Server Express Edition',
25
+ 'sqlserver_web'=> 'Microsoft SQL Server Web Edition',
26
+ 'sqlserver_se_standard'=> 'Microsoft SQL Server Standard Edition',
27
+ 'sqlserver_se_byol'=> 'Microsoft SQL Server Standard Edition (BYOL)',
28
+ 'sqlserver_ee_byol'=> 'Microsoft SQL Server Enterprise Edition (BYOL)'
29
+ }
30
+
31
+ @@DB_Deploy_Types = {
32
+ :mysql=>[:standard, :multiaz],
33
+ :oracle_se1=>[:standard, :multiaz, :byol, :byol_multiaz],
34
+ :oracle_se=>[:byol, :byol_multiaz],
35
+ :oracle_ee=>[:byol, :byol_multiaz],
36
+ :sqlserver_se=>[:standard, :byol],
37
+ :sqlserver_ee=>[:byol]
38
+ }
39
+
40
+ def self.display_name(name)
41
+ @@Database_Name_Lookup[name]
42
+ end
43
+
44
+ def self.get_database_name
45
+ [:mysql, :oracle_se1, :oracle_se, :oracle_ee, :sqlserver_ex, :sqlserver_web, :sqlserver_se, :sqlserver_ee]
46
+ end
47
+
48
+ def self.get_available_types(db)
49
+ @@DB_Deploy_Types[db]
50
+ end
51
+
52
+ def display_name
53
+ self.class.display_name(name)
54
+ end
12
55
  end
13
56
  end
@@ -49,9 +49,13 @@ module AwsPricing
49
49
  @category_types.values
50
50
  end
51
51
 
52
- def get_category_type(name, multiAz = false)
53
- if multiAz
54
- db = @category_types["#{name}_multiAz"]
52
+ def get_category_type(name, multi_az = false, byol = false)
53
+ if multi_az == true and byol == true
54
+ db = @category_types["#{name}_byol_multiaz"]
55
+ elsif multi_az == true and byol == false
56
+ db = @category_types["#{name}_multiaz"]
57
+ elsif multi_az == false and byol == true
58
+ db = @category_types["#{name}_byol"]
55
59
  else
56
60
  db = @category_types[name]
57
61
  end
@@ -59,15 +63,15 @@ module AwsPricing
59
63
 
60
64
  # type_of_instance = :ondemand, :light, :medium, :heavy
61
65
  # term = :year_1, :year_3, nil
62
- def price_per_hour(category_type, type_of_instance, term = nil, isMultiAz = false)
63
- cat = get_category_type(category_type, isMultiAz)
66
+ def price_per_hour(category_type, type_of_instance, term = nil, is_multi_az = false, isByol = false)
67
+ cat = get_category_type(category_type, is_multi_az, isByol)
64
68
  cat.price_per_hour(type_of_instance, term) unless cat.nil?
65
69
  end
66
70
 
67
71
  # type_of_instance = :ondemand, :light, :medium, :heavy
68
72
  # term = :year_1, :year_3, nil
69
- def prepay(category_type, type_of_instance, term = nil, isMultiAz = false)
70
- cat = get_category_type(category_type, isMultiAz)
73
+ def prepay(category_type, type_of_instance, term = nil, is_multi_az = false, isByol = false)
74
+ cat = get_category_type(category_type, is_multi_az, isByol)
71
75
  cat.prepay(type_of_instance, term) unless cat.nil?
72
76
  end
73
77
 
@@ -3,15 +3,21 @@ module AwsPricing
3
3
  class RdsInstanceType < InstanceType
4
4
  # database_type = :mysql, :oracle, :sqlserver
5
5
  # type_of_instance = :ondemand, :light, :medium, :heavy
6
- def update_pricing(database_type, type_of_instance, json, isMultiAz)
7
- db = get_category_type(database_type, isMultiAz)
6
+ def update_pricing(database_type, type_of_instance, json, is_multi_az, is_byol)
7
+ db = get_category_type(database_type, is_multi_az, is_byol)
8
8
  if db.nil?
9
9
  db = DatabaseType.new(self, database_type)
10
- if isMultiAz
11
- @category_types["#{database_type}_multiAz"] = db
10
+
11
+ if is_multi_az == true and is_byol == true
12
+ @category_types["#{database_type}_byol_multiaz"] = db
13
+ elsif is_multi_az == true and is_byol == false
14
+ @category_types["#{database_type}_multiaz"] = db
15
+ elsif is_multi_az == false and is_byol == true
16
+ @category_types["#{database_type}_byol"] = db
12
17
  else
13
18
  @category_types[database_type] = db
14
- end
19
+ end
20
+
15
21
  end
16
22
 
17
23
  if type_of_instance == :ondemand
@@ -56,13 +56,13 @@ module AwsPricing
56
56
  current
57
57
  end
58
58
 
59
- def add_or_update_rds_instance_type(api_name, name, db_type, type_of_instance, json, isMultiAz)
59
+ def add_or_update_rds_instance_type(api_name, name, db_type, type_of_instance, json, is_multi_az, is_byol)
60
60
  current = get_rds_instance_type(api_name)
61
61
  if current.nil?
62
62
  current = RdsInstanceType.new(self, api_name, name)
63
63
  @rds_instance_types[api_name] = current
64
64
  end
65
- current.update_pricing(db_type, type_of_instance, json, isMultiAz)
65
+ current.update_pricing(db_type, type_of_instance, json, is_multi_az, is_byol)
66
66
  current
67
67
  end
68
68
 
@@ -8,5 +8,5 @@
8
8
  # Home:: http://github.com/CloudHealth/amazon-pricing
9
9
  #++
10
10
  module AwsPricing
11
- VERSION = '0.1.12'
11
+ VERSION = '0.1.13'
12
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.12
4
+ version: 0.1.13
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: 2013-11-06 00:00:00.000000000 Z
12
+ date: 2013-11-09 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A Ruby library for retrieving pricing for Amazon Web Services
15
15
  email: