awscosts 0.0.1 → 0.0.2

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/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ **/*.DS_Store
data/README.md CHANGED
@@ -51,6 +51,13 @@ To find the price per GB processed of an ELB in the Sydney region.
51
51
 
52
52
  AWSCosts.region('ap-southeast-2').ec2.elb.price_per_gb
53
53
 
54
+ ### EMR
55
+
56
+ To find the on demand EC2 price and Elastic MapReduce price for the Oregon region.
57
+
58
+ AWSCosts.region('us-west-2').emr.ec2_price('cc2.8xlarge')
59
+ AWSCosts.region('us-west-2').emr.emr_price('cc2.8xlarge')
60
+
54
61
  ## Supported Services
55
62
 
56
63
  The following AWS services are currently support (more to come):
@@ -60,6 +67,7 @@ The following AWS services are currently support (more to come):
60
67
  * Reserved medium utilisation
61
68
  * Reserved heavy utilisation
62
69
  * Elastic Load Balancer (ELB)
70
+ * Elastic MapReduce (EMR)
63
71
 
64
72
  EC2 platforms:
65
73
 
data/lib/awscosts.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "awscosts/version"
2
2
  require "awscosts/region"
3
3
  require "awscosts/ec2"
4
+ require "awscosts/emr"
4
5
 
5
6
  module AWSCosts
6
7
 
@@ -0,0 +1,65 @@
1
+ require 'httparty'
2
+ require 'json'
3
+
4
+ class AWSCosts::EMR
5
+
6
+ TYPE_TRANSLATION = { 'stdODI.sm' => 'm1.small',
7
+ 'stdODI.med' => 'm1.medium',
8
+ 'stdODI.lg' => 'm1.large',
9
+ 'stdODI.xl' => 'm1.xlarge',
10
+ 'hiMemODI.xl' => 'm2.xlarge',
11
+ 'hiMemODI.xxl' => 'm2.2xlarge',
12
+ 'hiMemODI.xxxxl' => 'm2.4xlarge',
13
+ 'hiCPUODI.med' => 'c1.medium',
14
+ 'hiCPUODI.xl' => 'c1.xlarge',
15
+ 'clusterComputeI.xxxxl' => 'cc1.4xlarge',
16
+ 'clusterComputeI.xxxxxxxxl' => 'cc2.8xlarge',
17
+ 'clusterGPUI.xxxxl' => 'cg1.4xlarge',
18
+ 'hiStoreODI.xxxxxxxxl' => 'hs1.8xlarge',
19
+ 'hiIOODI.xxxxl' => 'hi1.4xlarge' }
20
+
21
+ def initialize data
22
+ @data= data
23
+ end
24
+
25
+ def ec2_price size=nil
26
+ size ? @data['ec2'][size] : @data['ec2']
27
+ end
28
+
29
+ def emr_price size=nil
30
+ size ? @data['emr'][size] : @data['emr']
31
+ end
32
+
33
+ def self.fetch region
34
+ @cache ||= begin
35
+ result = {}
36
+ data= JSON.parse(HTTParty.get("http://aws.amazon.com/elasticmapreduce/pricing/pricing-emr.json").body)
37
+ data['config']['regions'].each do |region|
38
+ platforms = {}
39
+ region['instanceTypes'].each do |instance_type|
40
+ type = instance_type['type']
41
+ instance_type['sizes'].each do |instance_size|
42
+ size = instance_size['size']
43
+ platform_cost = Hash.new({})
44
+ instance_size['valueColumns'].each do |value|
45
+ platform_cost[value['name']] = value['prices']['USD'].to_f
46
+ end
47
+ platform_cost.each_pair do |p,v|
48
+ platforms[p] = {} unless platforms.key?(p)
49
+ platforms[p][TYPE_TRANSLATION["#{type}.#{size}"]] = v
50
+ end
51
+ end
52
+ end
53
+ result[region['region']] = platforms
54
+ end
55
+ result
56
+ end
57
+ self.new(@cache[region])
58
+ end
59
+
60
+ private
61
+ def self.cache
62
+ @@cache ||= {}
63
+ end
64
+ end
65
+
@@ -23,6 +23,9 @@ class AWSCosts::Region
23
23
  AWSCosts::EC2.new(self)
24
24
  end
25
25
 
26
+ def emr
27
+ AWSCosts::EMR.fetch(self.price_mapping)
28
+ end
26
29
 
27
30
  private
28
31
  def initialize name
@@ -1,3 +1,3 @@
1
1
  module AWSCosts
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awscosts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -94,6 +94,7 @@ files:
94
94
  - lib/awscosts/ec2_elb.rb
95
95
  - lib/awscosts/ec2_on_demand.rb
96
96
  - lib/awscosts/ec2_reserved_instances.rb
97
+ - lib/awscosts/emr.rb
97
98
  - lib/awscosts/region.rb
98
99
  - lib/awscosts/version.rb
99
100
  - spec/awscosts/ec2_spec.rb
@@ -114,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
114
115
  version: '0'
115
116
  segments:
116
117
  - 0
117
- hash: 4440165124257606433
118
+ hash: 1325715737968826083
118
119
  required_rubygems_version: !ruby/object:Gem::Requirement
119
120
  none: false
120
121
  requirements:
@@ -123,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
124
  version: '0'
124
125
  segments:
125
126
  - 0
126
- hash: 4440165124257606433
127
+ hash: 1325715737968826083
127
128
  requirements: []
128
129
  rubyforge_project:
129
130
  rubygems_version: 1.8.23