awscosts 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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -4
  3. data/awscosts.gemspec +1 -0
  4. data/fixtures/vcr_cassettes/AWSCosts_EBS.yml +17 -496
  5. data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_linux.yml +63 -4583
  6. data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_rhel.yml +63 -4585
  7. data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_sles.yml +63 -4585
  8. data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_windows.yml +63 -4583
  9. data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_windows_with_sql.yml +63 -3535
  10. data/fixtures/vcr_cassettes/AWSCosts_EC2OnDemand/EC2_type_of_windows_with_sql_web.yml +63 -4060
  11. data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/Reserved_instances/in_the_us-east-1_region/EC2_type_of_linux.yml +16 -5970
  12. data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/Reserved_instances/in_the_us-east-1_region/EC2_type_of_rhel.yml +16 -5970
  13. data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/Reserved_instances/in_the_us-east-1_region/EC2_type_of_sles.yml +16 -5970
  14. data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/Reserved_instances/in_the_us-east-1_region/EC2_type_of_windows.yml +16 -5970
  15. data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/Reserved_instances/in_the_us-east-1_region/EC2_type_of_windows_with_sql.yml +16 -5970
  16. data/fixtures/vcr_cassettes/AWSCosts_EC2ReservedInstances/Reserved_instances/in_the_us-east-1_region/EC2_type_of_windows_with_sql_web.yml +16 -5970
  17. data/fixtures/vcr_cassettes/AWSCosts_ELB.yml +17 -283
  18. data/fixtures/vcr_cassettes/AWSCosts_EMR.yml +12 -12
  19. data/fixtures/vcr_cassettes/AWSCosts_ElasticIPs.yml +17 -445
  20. data/fixtures/vcr_cassettes/AWSCosts_S3DataTransfer.yml +19 -925
  21. data/fixtures/vcr_cassettes/AWSCosts_S3Requests.yml +19 -454
  22. data/fixtures/vcr_cassettes/AWSCosts_S3Storage.yml +19 -1396
  23. data/lib/awscosts/cache.rb +26 -4
  24. data/lib/awscosts/ec2.rb +26 -5
  25. data/lib/awscosts/ec2_ebs.rb +3 -14
  26. data/lib/awscosts/ec2_ebs_optimized.rb +31 -0
  27. data/lib/awscosts/ec2_elastic_ips.rb +4 -4
  28. data/lib/awscosts/ec2_elb.rb +4 -4
  29. data/lib/awscosts/ec2_on_demand.rb +24 -19
  30. data/lib/awscosts/ec2_reserved_instances.rb +7 -8
  31. data/lib/awscosts/emr.rb +1 -2
  32. data/lib/awscosts/region.rb +12 -10
  33. data/lib/awscosts/s3.rb +4 -3
  34. data/lib/awscosts/s3_data_transfer.rb +7 -7
  35. data/lib/awscosts/s3_requests.rb +5 -6
  36. data/lib/awscosts/s3_storage.rb +7 -7
  37. data/lib/awscosts/version.rb +1 -1
  38. data/spec/awscosts/ec2_ebs_spec.rb +17 -33
  39. data/spec/awscosts/ec2_elastic_ips_spec.rb +2 -0
  40. data/spec/awscosts/ec2_reserved_instances_spec.rb +3 -0
  41. metadata +17 -2
@@ -1,10 +1,9 @@
1
1
  require 'httparty'
2
- require 'json'
3
2
 
4
3
  class AWSCosts::S3Requests
5
4
 
6
5
  def initialize data
7
- @data= data
6
+ @data = data
8
7
  end
9
8
 
10
9
  def price tier = nil
@@ -12,14 +11,14 @@ class AWSCosts::S3Requests
12
11
  end
13
12
 
14
13
  def self.fetch region
15
- transformed= AWSCosts::Cache.get("/s3/pricing/pricing-requests.json") do |data|
14
+ transformed = AWSCosts::Cache.get_jsonp("/pricing/1/s3/pricing-requests-s3.min.js") do |data|
16
15
  result = {}
17
- data['config']['regions'].each do |region|
16
+ data['config']['regions'].each do |r|
18
17
  tiers = {}
19
- region['tiers'].each do |tier|
18
+ r['tiers'].each do |tier|
20
19
  tiers[tier['name']] = { rate: tier['rate'], price: tier['prices']['USD'].to_f}
21
20
  end
22
- result[region['region']] = tiers
21
+ result[r['region']] = tiers
23
22
  end
24
23
  result
25
24
  end
@@ -1,10 +1,9 @@
1
1
  require 'httparty'
2
- require 'json'
3
2
 
4
3
  class AWSCosts::S3Storage
5
4
 
6
5
  def initialize data
7
- @data= data
6
+ @data = data
8
7
  end
9
8
 
10
9
  def price tier = nil
@@ -12,18 +11,19 @@ class AWSCosts::S3Storage
12
11
  end
13
12
 
14
13
  def self.fetch region
15
- transformed= AWSCosts::Cache.get("/s3/pricing/pricing-storage.json") do |data|
14
+ transformed = AWSCosts::Cache.get_jsonp("/pricing/1/s3/pricing-storage-s3.min.js") do |data|
16
15
  result = {}
17
- data['config']['regions'].each do |region|
16
+ data['config']['regions'].each do |r|
18
17
  tiers = {}
19
- region['tiers'].each do |tier|
18
+ r['tiers'].each do |tier|
20
19
  storage_type = {}
21
20
  tiers[tier['name']] = storage_type
22
21
  tier['storageTypes'].each do |type|
23
- storage_type[type['type']] = type['prices']['USD'].to_f
22
+ # Don't return 0.0 for "N/A*" since that is misleading
23
+ storage_type[type['type']] = type['prices']['USD'] == 'N/A*' ? nil : type['prices']['USD'].to_f
24
24
  end
25
25
  end
26
- result[region['region']] = tiers
26
+ result[r['region']] = tiers
27
27
  end
28
28
  result
29
29
  end
@@ -1,3 +1,3 @@
1
1
  module AWSCosts
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -7,40 +7,24 @@ describe AWSCosts::EBS do
7
7
  context "in the region of #{region}" do
8
8
  subject { AWSCosts.region(region).ec2.ebs}
9
9
 
10
- describe 'standard EBS volume' do
11
- let(:price) { subject.price(:standard) }
12
-
13
- it 'should provide price per GB / month for provisioned storage' do
14
- price['perGBmoProvStorage'].should > 0
15
- end
16
-
17
- it 'should provide price per Million requests per month' do
18
- price['perMMIOreq'].should > 0
19
- end
20
- end
21
-
22
- describe 'provisioned IOPS price' do
23
- let(:price) { subject.price(:provisioned_iops) }
24
-
25
- it 'should provide price per GB / month for provisioned storage' do
26
- price['perGBmoProvStorage'].should > 0
27
- end
28
-
29
- it 'should provide a price per PIOPS' do
30
- price['perPIOPSreq'].should > 0
31
- end
32
- end
33
-
34
- describe 'Snapshots to S3' do
35
- let(:price) { subject.price(:snapshots_to_s3) }
36
-
37
- it 'should provide a price per GB stored / month' do
38
- price['perGBmoDataStored'].should > 0
39
- end
40
- end
41
- end
10
+ ['Amazon EBS General Purpose (SSD) volumes',
11
+ 'Amazon EBS Provisioned IOPS (SSD) volumes',
12
+ 'Amazon EBS Magnetic volumes', 'ebsSnapsToS3'].each do |name|
13
+
14
+ describe "for '#{name}'" do
15
+ let(:price) { subject.price.find { |p| p['name'] == name } }
16
+
17
+ it 'should provide a name' do
18
+ price['name'].should_not be_nil
19
+ end
20
+
21
+ it 'should provide values ' do
22
+ price['values'].should_not be_nil
23
+ end
24
+ end
25
+ end
26
+ end
42
27
  end
43
-
44
28
  end
45
29
 
46
30
 
@@ -4,6 +4,8 @@ describe AWSCosts::ElasticIPs do
4
4
  use_vcr_cassette
5
5
 
6
6
  AWSCosts::Region::SUPPORTED.keys.each do |region|
7
+ # no pricing for Frankfurt, yet!
8
+ next if region == 'eu-central-1'
7
9
 
8
10
  context "in the region of #{region}" do
9
11
  subject { AWSCosts.region(region).ec2.elastic_ips}
@@ -6,6 +6,9 @@ describe AWSCosts::EC2ReservedInstances do
6
6
 
7
7
  AWSCosts::Region::SUPPORTED.keys.each do |r|
8
8
 
9
+ # no pricing for Frankfurt, yet!
10
+ next if r == 'eu-central-1'
11
+
9
12
  context "in the #{r} region" do
10
13
  [:windows, :linux, :windows_with_sql, :windows_with_sql_web, :rhel, :sles].each do |type|
11
14
  context "EC2 type of #{type}" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awscosts
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
  - Stephen Bartlett
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-03 00:00:00.000000000 Z
11
+ date: 2015-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.11.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: oj
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.1'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -131,6 +145,7 @@ files:
131
145
  - lib/awscosts/cache.rb
132
146
  - lib/awscosts/ec2.rb
133
147
  - lib/awscosts/ec2_ebs.rb
148
+ - lib/awscosts/ec2_ebs_optimized.rb
134
149
  - lib/awscosts/ec2_elastic_ips.rb
135
150
  - lib/awscosts/ec2_elb.rb
136
151
  - lib/awscosts/ec2_on_demand.rb