amazon-pricing 0.1.19 → 0.1.20

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.19)
4
+ amazon-pricing (0.1.20)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -38,7 +38,11 @@ module AwsPricing
38
38
  def fetch_url(url)
39
39
  uri = URI.parse(url)
40
40
  page = Net::HTTP.get_response(uri)
41
- JSON.parse(page.body)
41
+ # Now that AWS switched from json to jsonp, remove first/last lines
42
+ body = page.body.gsub("callback(", "").reverse.sub(")", "").reverse
43
+
44
+ #body = page.body.split("\n")[1..-2].join("\n")
45
+ JSON.parse(body)
42
46
  end
43
47
 
44
48
  protected
@@ -58,8 +62,8 @@ module AwsPricing
58
62
  region
59
63
  end
60
64
 
61
- EC2_BASE_URL = "http://aws.amazon.com/ec2/pricing/"
62
- RDS_BASE_URL = "http://aws.amazon.com/rds/pricing/"
65
+ EC2_BASE_URL = "http://aws-assets-pricing-prod.s3.amazonaws.com/pricing/ec2/"
66
+ RDS_BASE_URL = "http://aws-assets-pricing-prod.s3.amazonaws.com/pricing/rds/"
63
67
 
64
68
  # Lookup allows us to map to AWS API region names
65
69
  @@Region_Lookup = {
@@ -92,14 +96,14 @@ module AwsPricing
92
96
 
93
97
  def get_ec2_on_demand_instance_pricing
94
98
  @@OS_TYPES.each do |os|
95
- fetch_ec2_instance_pricing(EC2_BASE_URL + "json/#{os}-od.json", :ondemand, os)
99
+ fetch_ec2_instance_pricing(EC2_BASE_URL + "#{os}-od.js", :ondemand, os)
96
100
  end
97
101
  end
98
102
 
99
103
  def get_ec2_reserved_instance_pricing
100
104
  @@OS_TYPES.each do |os|
101
105
  @@RES_TYPES.each do |res_type|
102
- fetch_ec2_instance_pricing(EC2_BASE_URL + "json/#{os}-ri-#{res_type}.json", res_type, os)
106
+ fetch_ec2_instance_pricing(EC2_BASE_URL + "#{os}-ri-#{res_type}.js", res_type, os)
103
107
  end
104
108
  end
105
109
  end
@@ -114,7 +118,10 @@ module AwsPricing
114
118
  # e.g. type = {"type"=>"hiCPUODI", "sizes"=>[{"size"=>"med", "valueColumns"=>[{"name"=>"mswinSQL", "prices"=>{"USD"=>"N/A"}}]}, {"size"=>"xl", "valueColumns"=>[{"name"=>"mswinSQL", "prices"=>{"USD"=>"2.427"}}]}]}
115
119
  reg['instanceTypes'].each do |type|
116
120
  # e.g. size = {"size"=>"xl", "valueColumns"=>[{"name"=>"mswinSQL", "prices"=>{"USD"=>"2.427"}}]}
117
- type['sizes'].each do |size|
121
+ # Amazon now can return array or hash here (hash = only 1 item)
122
+ items = type['sizes']
123
+ items = [type] if items.nil?
124
+ items.each do |size|
118
125
  begin
119
126
  api_name, name = Ec2InstanceType.get_name(type["type"], size["size"], type_of_instance != :ondemand)
120
127
 
@@ -128,7 +135,7 @@ module AwsPricing
128
135
  end
129
136
 
130
137
  def fetch_ec2_ebs_pricing
131
- res = fetch_url(EC2_BASE_URL + "pricing-ebs.json")
138
+ res = fetch_url(EC2_BASE_URL + "pricing-ebs.js")
132
139
  res["config"]["regions"].each do |ebs_types|
133
140
  region = get_region(ebs_types["region"])
134
141
  region.ebs_price = EbsPrice.new(region, ebs_types)
@@ -183,9 +190,9 @@ module AwsPricing
183
190
  is_byol = is_byol? dp_type
184
191
 
185
192
  if [:mysql, :postgresql, :oracle].include? db
186
- fetch_on_demand_rds_instance_pricing(RDS_BASE_URL+"#{db}/pricing-#{dp_type}-deployments.json",:ondemand, db_type, is_byol)
193
+ fetch_on_demand_rds_instance_pricing(RDS_BASE_URL+"#{db}/pricing-#{dp_type}-deployments.js",:ondemand, db_type, is_byol)
187
194
  elsif db == :sqlserver
188
- fetch_on_demand_rds_instance_pricing(RDS_BASE_URL+"#{db}/sqlserver-#{dp_type}-ondemand.json",:ondemand, db_type, is_byol)
195
+ fetch_on_demand_rds_instance_pricing(RDS_BASE_URL+"#{db}/sqlserver-#{dp_type}-ondemand.js",:ondemand, db_type, is_byol)
189
196
  end
190
197
  end
191
198
  }
@@ -197,9 +204,9 @@ module AwsPricing
197
204
  if [:mysql, :postgresql].include? db
198
205
  @@RES_TYPES.each do |res_type|
199
206
  if db == :postgresql and res_type == :heavy
200
- fetch_reserved_rds_instance_pricing(RDS_BASE_URL+"#{db}/pricing-#{res_type}-utilization-reserved-instances.json", res_type, db, false)
207
+ fetch_reserved_rds_instance_pricing(RDS_BASE_URL+"#{db}/pricing-#{res_type}-utilization-reserved-instances.js", res_type, db, false)
201
208
  elsif db == :mysql
202
- fetch_reserved_rds_instance_pricing(RDS_BASE_URL+"#{db}/pricing-#{res_type}-utilization-reserved-instances.json", res_type, db, false)
209
+ fetch_reserved_rds_instance_pricing(RDS_BASE_URL+"#{db}/pricing-#{res_type}-utilization-reserved-instances.js", res_type, db, false)
203
210
  end
204
211
  end
205
212
  else
@@ -208,9 +215,9 @@ module AwsPricing
208
215
  db_instance.each do |dp_type|
209
216
  is_byol = is_byol? dp_type
210
217
  if db == :oracle
211
- fetch_reserved_rds_instance_pricing(RDS_BASE_URL+"#{db}/pricing-#{dp_type}-#{res_type}-utilization-reserved-instances.json", res_type, db_type, is_byol)
218
+ fetch_reserved_rds_instance_pricing(RDS_BASE_URL+"#{db}/pricing-#{dp_type}-#{res_type}-utilization-reserved-instances.js", res_type, db_type, is_byol)
212
219
  elsif db == :sqlserver
213
- fetch_reserved_rds_instance_pricing(RDS_BASE_URL+"#{db}/sqlserver-#{dp_type}-#{res_type}-ri.json", res_type, db_type, is_byol)
220
+ fetch_reserved_rds_instance_pricing(RDS_BASE_URL+"#{db}/sqlserver-#{dp_type}-#{res_type}-ri.js", res_type, db_type, is_byol)
214
221
  end
215
222
  end
216
223
  end
@@ -229,7 +236,7 @@ module AwsPricing
229
236
  begin
230
237
  #
231
238
  # this is special case URL, it is oracle - multiAZ type of deployment but it doesn't have mutliAZ attributes in json.
232
- if url == "http://aws.amazon.com/rds/pricing/oracle/pricing-li-multiAZ-deployments.json"
239
+ if url == "http://aws.amazon.com/rds/pricing/oracle/pricing-li-multiAZ-deployments.js"
233
240
  is_multi_az = true
234
241
  else
235
242
  is_multi_az = is_multi_az? type["name"]
@@ -65,7 +65,7 @@ module AwsPricing
65
65
  @@Name_Lookup = {
66
66
  'm1.small' => 'Standard Small', 'm1.medium' => 'Standard Medium', 'm1.large' => 'Standard Large', 'm1.xlarge' => 'Standard Extra Large',
67
67
  'm2.xlarge' => 'Hi-Memory Extra Large', 'm2.2xlarge' => 'Hi-Memory Double Extra Large', 'm2.4xlarge' => 'Hi-Memory Quadruple Extra Large',
68
- 'm3.xlarge' => 'M3 Extra Large Instance', 'm3.2xlarge' => 'M3 Double Extra Large Instance',
68
+ 'm3.medium' => 'M3 Medium Instance', 'm3.large'=>'M3 Large Instance', 'm3.xlarge' => 'M3 Extra Large Instance', 'm3.2xlarge' => 'M3 Double Extra Large Instance',
69
69
  'c1.medium' => 'High-CPU Medium', 'c1.xlarge' => 'High-CPU Extra Large',
70
70
  'hi1.4xlarge' => 'High I/O Quadruple Extra Large',
71
71
  'cg1.4xlarge' => 'Cluster GPU Quadruple Extra Large',
@@ -21,7 +21,7 @@ module AwsPricing
21
21
  class InstanceType
22
22
  attr_accessor :name, :api_name, :memory_in_mb, :platform, :compute_units, :virtual_cores, :disk_type, :disk_in_gb
23
23
 
24
- def initialize(region, api_name, name)
24
+ def initialize(region, api_name, name, json)
25
25
  @category_types = {}
26
26
 
27
27
  @region = region
@@ -113,13 +113,12 @@ module AwsPricing
113
113
  @@Memory_Lookup = {
114
114
  'm1.small' => 1700, 'm1.medium' => 3750, 'm1.large' => 7500, 'm1.xlarge' => 15000,
115
115
  'm2.xlarge' => 17100, 'm2.2xlarge' => 34200, 'm2.4xlarge' => 68400,
116
- 'm3.xlarge' => 15000, 'm3.2xlarge' => 30000,
116
+ 'm3.medium' => 3750, 'm3.large' => 7500, 'm3.xlarge' => 15000, 'm3.2xlarge' => 30000,
117
117
  'c1.medium' => 1700, 'c1.xlarge' => 7000,
118
118
  'hi1.4xlarge' => 60500,
119
119
  'cg1.4xlarge' => 22000,
120
120
  'cc1.4xlarge' => 23000, 'cc2.8xlarge' => 60500,
121
121
  't1.micro' => 1700,
122
- 'm3.xlarge' => 15000, 'm3.xlarge' => 30000,
123
122
  'cr1.8xlarge' => 244000,
124
123
  'hs1.8xlarge' => 117000,
125
124
  'g2.2xlarge' => 15000,
@@ -132,13 +131,12 @@ module AwsPricing
132
131
  @@Disk_Lookup = {
133
132
  'm1.small' => 160, 'm1.medium' => 410, 'm1.large' =>850, 'm1.xlarge' => 1690,
134
133
  'm2.xlarge' => 420, 'm2.2xlarge' => 850, 'm2.4xlarge' => 1690,
135
- 'm3.xlarge' => 0, 'm3.2xlarge' => 0,
134
+ 'm3.medium' => 4, 'm3.large' => 32, 'm3.xlarge' => 80, 'm3.2xlarge' => 160,
136
135
  'c1.medium' => 350, 'c1.xlarge' => 1690,
137
136
  'hi1.4xlarge' => 2048,
138
137
  'cg1.4xlarge' => 1690,
139
138
  'cc1.4xlarge' => 1690, 'cc2.8xlarge' => 3370,
140
139
  't1.micro' => 160,
141
- 'm3.xlarge' => 0, 'm3.xlarge' => 0,
142
140
  'cr1.8xlarge' => 240,
143
141
  'hs1.8xlarge' => 48000,
144
142
  'g2.2xlarge' => 60,
@@ -151,13 +149,12 @@ module AwsPricing
151
149
  @@Platform_Lookup = {
152
150
  'm1.small' => 32, 'm1.medium' => 32, 'm1.large' => 64, 'm1.xlarge' => 64,
153
151
  'm2.xlarge' => 64, 'm2.2xlarge' => 64, 'm2.4xlarge' => 64,
154
- 'm3.xlarge' => 64, 'm3.2xlarge' => 64,
152
+ 'm3.medium' => 64, 'm3.large' => 64, 'm3.xlarge' => 64, 'm3.2xlarge' => 64,
155
153
  'c1.medium' => 32, 'c1.xlarge' => 64,
156
154
  'hi1.4xlarge' => 64,
157
155
  'cg1.4xlarge' => 64,
158
156
  'cc1.4xlarge' => 64, 'cc2.8xlarge' => 64,
159
157
  't1.micro' => 32,
160
- 'm3.xlarge' => 64, 'm3.xlarge' => 64,
161
158
  'cr1.8xlarge' => 64,
162
159
  'hs1.8xlarge' => 64,
163
160
  'g2.2xlarge' => 64,
@@ -170,7 +167,7 @@ module AwsPricing
170
167
  @@Compute_Units_Lookup = {
171
168
  'm1.small' => 1, 'm1.medium' => 2, 'm1.large' => 4, 'm1.xlarge' => 8,
172
169
  'm2.xlarge' => 6.5, 'm2.2xlarge' => 13, 'm2.4xlarge' => 26,
173
- 'm3.xlarge' => 13, 'm3.2xlarge' => 26,
170
+ 'm3.medium' => 3, 'm3.large' => 6.5, 'm3.xlarge' => 13, 'm3.2xlarge' => 26,
174
171
  'c1.medium' => 5, 'c1.xlarge' => 20,
175
172
  'hi1.4xlarge' => 35,
176
173
  'cg1.4xlarge' => 34,
@@ -190,7 +187,7 @@ module AwsPricing
190
187
  @@Virtual_Cores_Lookup = {
191
188
  'm1.small' => 1, 'm1.medium' => 1, 'm1.large' => 2, 'm1.xlarge' => 4,
192
189
  'm2.xlarge' => 2, 'm2.2xlarge' => 4, 'm2.4xlarge' => 8,
193
- 'm3.xlarge' => 4, 'm3.2xlarge' => 8,
190
+ 'm3.medium' => 1, 'm3.large' => 2, 'm3.xlarge' => 4, 'm3.2xlarge' => 8,
194
191
  'c1.medium' => 2, 'c1.xlarge' => 8,
195
192
  'hi1.4xlarge' => 16,
196
193
  'cg1.4xlarge' => 8,
@@ -209,7 +206,7 @@ module AwsPricing
209
206
  @@Disk_Type_Lookup = {
210
207
  'm1.small' => :ephemeral, 'm1.medium' => :ephemeral, 'm1.large' => :ephemeral, 'm1.xlarge' => :ephemeral,
211
208
  'm2.xlarge' => :ephemeral, 'm2.2xlarge' => :ephemeral, 'm2.4xlarge' => :ephemeral,
212
- 'm3.xlarge' => :ephemeral, 'm3.2xlarge' => :ephemeral,
209
+ 'm3.medium' => :ssd, 'm3.large' => :ssd, 'm3.xlarge' => :ssd, 'm3.2xlarge' => :ssd,
213
210
  'c1.medium' => :ephemeral, 'c1.xlarge' => :ephemeral,
214
211
  'hi1.4xlarge' => :ssd,
215
212
  'cg1.4xlarge' => :ephemeral,
@@ -49,7 +49,7 @@ module AwsPricing
49
49
  def add_or_update_ec2_instance_type(api_name, name, operating_system, type_of_instance, json)
50
50
  current = get_ec2_instance_type(api_name)
51
51
  if current.nil?
52
- current = Ec2InstanceType.new(self, api_name, name)
52
+ current = Ec2InstanceType.new(self, api_name, name, json)
53
53
  @ec2_instance_types[api_name] = current
54
54
  end
55
55
  current.update_pricing(operating_system, type_of_instance, json)
@@ -59,7 +59,7 @@ module AwsPricing
59
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
- current = RdsInstanceType.new(self, api_name, name)
62
+ current = RdsInstanceType.new(self, api_name, name, json)
63
63
  @rds_instance_types[api_name] = current
64
64
  end
65
65
  current.update_pricing(db_type, type_of_instance, json, is_multi_az, is_byol)
@@ -8,5 +8,5 @@
8
8
  # Home:: http://github.com/CloudHealth/amazon-pricing
9
9
  #++
10
10
  module AwsPricing
11
- VERSION = '0.1.19'
11
+ VERSION = '0.1.20'
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.19
4
+ version: 0.1.20
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-12-21 00:00:00.000000000 Z
12
+ date: 2014-01-21 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A Ruby library for retrieving pricing for Amazon Web Services
15
15
  email:
@@ -64,7 +64,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
64
64
  version: '0'
65
65
  segments:
66
66
  - 0
67
- hash: 4018300996554376891
67
+ hash: -574504011495470816
68
68
  required_rubygems_version: !ruby/object:Gem::Requirement
69
69
  none: false
70
70
  requirements:
@@ -73,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
73
  version: '0'
74
74
  segments:
75
75
  - 0
76
- hash: 4018300996554376891
76
+ hash: -574504011495470816
77
77
  requirements: []
78
78
  rubyforge_project: amazon-pricing
79
79
  rubygems_version: 1.8.25