computation 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.
- data/TODO +14 -0
- data/features/computation_committees.feature +17 -2
- data/features/computation_emissions.feature +2 -2
- data/lib/computation/carbon_model.rb +9 -3
- data/lib/computation/fallback.rb +1 -1
- data/lib/test_support/db/fixtures/egrid_regions.csv +3 -0
- data/lib/test_support/db/fixtures/egrid_subregions.csv +3 -0
- data/lib/test_support/db/fixtures/zip_codes.csv +2 -0
- metadata +30 -116
data/TODO
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
* In the future: add parameters for
|
2
|
+
* cpu wattage
|
3
|
+
* hard disk
|
4
|
+
* memory
|
5
|
+
* hosting company
|
6
|
+
* develop power usage estimates for different companies
|
7
|
+
|
8
|
+
* Develop plugin for New Relic
|
9
|
+
* API key parameter
|
10
|
+
* ENV Parameters for carbon model
|
11
|
+
* Website badge
|
12
|
+
* Link for site owners to buy offsets
|
13
|
+
* Future: display how much has been offset on badge
|
14
|
+
|
@@ -11,7 +11,7 @@ Feature: Computation Committee Calculations
|
|
11
11
|
Given a computation emitter
|
12
12
|
When the "duration" committee is calculated
|
13
13
|
Then the committee should have used quorum "default"
|
14
|
-
And the conclusion of the committee should be "
|
14
|
+
And the conclusion of the committee should be "3600.0"
|
15
15
|
|
16
16
|
Scenario: eGRID subregion committee from default
|
17
17
|
Given a computation emitter
|
@@ -53,10 +53,24 @@ Feature: Computation Committee Calculations
|
|
53
53
|
Then the committee should have used quorum "default"
|
54
54
|
And the conclusion of the committee should be "1.5"
|
55
55
|
|
56
|
+
Scenario Outline: Duration in hours from duration
|
57
|
+
Given a computation emitter
|
58
|
+
And a characteristic "duration" of "<seconds>"
|
59
|
+
When the "duration_in_hours" committee is calculated
|
60
|
+
Then the committee should have used quorum "from duration"
|
61
|
+
And the conclusion of the committee should be "<hours>"
|
62
|
+
Examples:
|
63
|
+
| seconds | hours |
|
64
|
+
| 0.0 | 0.0 |
|
65
|
+
| 1800.0 | 0.5 |
|
66
|
+
| 3600.0 | 1.0 |
|
67
|
+
| 7200.0 | 2.0 |
|
68
|
+
|
56
69
|
Scenario: Electricity use commitee from default EC2 compute units, duration, electricity intensity, zip code, and PUE
|
57
70
|
Given a computation emitter
|
58
71
|
When the "ec2_compute_units" committee is calculated
|
59
72
|
And the "duration" committee is calculated
|
73
|
+
And the "duration_in_hours" committee is calculated
|
60
74
|
And the "egrid_subregion" committee is calculated
|
61
75
|
And the "egrid_region" committee is calculated
|
62
76
|
And the "electricity_intensity" committee is calculated
|
@@ -68,10 +82,11 @@ Feature: Computation Committee Calculations
|
|
68
82
|
Scenario: Electricity use commitee from EC2 compute units, duration, electricity intensity, zip code, and PUE
|
69
83
|
Given a computation emitter
|
70
84
|
And a characteristic "ec2_compute_units" of "10"
|
71
|
-
And a characteristic "duration" of "
|
85
|
+
And a characteristic "duration" of "36000"
|
72
86
|
And a characteristic "zip_code.name" of "94122"
|
73
87
|
And a characteristic "electricity_intensity" of "1.0"
|
74
88
|
And a characteristic "power_usage_effectiveness" of "2.0"
|
89
|
+
When the "duration_in_hours" committee is calculated
|
75
90
|
And the "egrid_subregion" committee is calculated
|
76
91
|
And the "egrid_region" committee is calculated
|
77
92
|
And the "electricity_use" committee is calculated
|
@@ -12,7 +12,7 @@ Feature: Computation Emissions Calculations
|
|
12
12
|
Then the emission value should be within "0.01" kgs of "2.81"
|
13
13
|
|
14
14
|
Scenario: Calculations starting from duration
|
15
|
-
Given a computation has "duration" of "
|
15
|
+
Given a computation has "duration" of "36000"
|
16
16
|
When emissions are calculated
|
17
17
|
Then the emission value should be within "0.01" kgs of "2.81"
|
18
18
|
|
@@ -33,7 +33,7 @@ Feature: Computation Emissions Calculations
|
|
33
33
|
|
34
34
|
Scenario: Calculations starting from EC2 compute units, duration, electricity intensity, zip code, and PUE
|
35
35
|
Given a computation has "ec2_compute_units" of "10"
|
36
|
-
And it has "duration" of "
|
36
|
+
And it has "duration" of "36000"
|
37
37
|
And it has "zip_code.name" of "94122"
|
38
38
|
And it has "electricity_intensity" of "1.0"
|
39
39
|
And it has "power_usage_effectiveness" of "2.0"
|
@@ -20,8 +20,14 @@ module BrighterPlanet
|
|
20
20
|
end
|
21
21
|
|
22
22
|
committee :electricity_use do # returns kWh including distribution losses
|
23
|
-
quorum 'from compute units, time, electricity intensity, PUE, and eGRID region', :needs => [:ec2_compute_units, :
|
24
|
-
(characteristics[:ec2_compute_units] * characteristics[:
|
23
|
+
quorum 'from compute units, time, electricity intensity, PUE, and eGRID region', :needs => [:ec2_compute_units, :duration_in_hours, :electricity_intensity, :power_usage_effectiveness, :egrid_region] do |characteristics|
|
24
|
+
(characteristics[:ec2_compute_units] * characteristics[:duration_in_hours] * characteristics[:electricity_intensity] * characteristics[:power_usage_effectiveness]) / (1 - characteristics[:egrid_region].loss_factor)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
committee :duration_in_hours do
|
29
|
+
quorum 'from duration', :needs => :duration do |characteristics|
|
30
|
+
characteristics[:duration] / (60 * 60)
|
25
31
|
end
|
26
32
|
end
|
27
33
|
|
@@ -53,7 +59,7 @@ module BrighterPlanet
|
|
53
59
|
end
|
54
60
|
end
|
55
61
|
|
56
|
-
committee :duration do # returns
|
62
|
+
committee :duration do # returns seconds
|
57
63
|
quorum 'default' do
|
58
64
|
base.fallback.duration
|
59
65
|
end
|
data/lib/computation/fallback.rb
CHANGED
@@ -2,7 +2,7 @@ module BrighterPlanet
|
|
2
2
|
module Computation
|
3
3
|
module Fallback
|
4
4
|
def self.included(base)
|
5
|
-
base.falls_back_on :duration =>
|
5
|
+
base.falls_back_on :duration => 3600.0, # assume 1 hour
|
6
6
|
:ec2_compute_units => 1, # assume 1 EC2 Unit
|
7
7
|
:power_usage_effectiveness => 1.5, # based on Amazon's EC2 cost comparison calculator statement that most data centers have PUE of 1.3 - 3.0
|
8
8
|
:electricity_intensity => 0.075 # kW based on Amazon's EC2 cost comparison calculator stating 150W for small compute instance equivalent server and 0.5 power conversion factor (to get average operating load from nameplate capacity) - EC2 probably has lower draw but higher power conversion factor
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: computation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 15
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
8
|
+
- 9
|
9
|
+
version: 0.0.9
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Andy Rossmeissl
|
@@ -19,140 +18,51 @@ autorequire:
|
|
19
18
|
bindir: bin
|
20
19
|
cert_chain: []
|
21
20
|
|
22
|
-
date:
|
21
|
+
date: 2011-01-21 00:00:00 -05:00
|
23
22
|
default_executable:
|
24
23
|
dependencies:
|
25
24
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
27
|
-
prerelease: false
|
25
|
+
name: bueller
|
28
26
|
requirement: &id001 !ruby/object:Gem::Requirement
|
29
|
-
none: false
|
30
|
-
requirements:
|
31
|
-
- - ~>
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
hash: 5
|
34
|
-
segments:
|
35
|
-
- 3
|
36
|
-
version: "3"
|
37
|
-
type: :development
|
38
|
-
version_requirements: *id001
|
39
|
-
- !ruby/object:Gem::Dependency
|
40
|
-
name: bundler
|
41
|
-
prerelease: false
|
42
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
43
|
-
none: false
|
44
|
-
requirements:
|
45
|
-
- - ~>
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
hash: 23
|
48
|
-
segments:
|
49
|
-
- 1
|
50
|
-
- 0
|
51
|
-
- 0
|
52
|
-
version: 1.0.0
|
53
|
-
type: :development
|
54
|
-
version_requirements: *id002
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: cucumber
|
57
|
-
prerelease: false
|
58
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
59
|
-
none: false
|
60
|
-
requirements:
|
61
|
-
- - ">="
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
hash: 3
|
64
|
-
segments:
|
65
|
-
- 0
|
66
|
-
version: "0"
|
67
|
-
type: :development
|
68
|
-
version_requirements: *id003
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: jeweler
|
71
|
-
prerelease: false
|
72
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
hash: 7
|
78
|
-
segments:
|
79
|
-
- 1
|
80
|
-
- 4
|
81
|
-
- 0
|
82
|
-
version: 1.4.0
|
83
|
-
type: :development
|
84
|
-
version_requirements: *id004
|
85
|
-
- !ruby/object:Gem::Dependency
|
86
|
-
name: rake
|
87
|
-
prerelease: false
|
88
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
89
27
|
none: false
|
90
28
|
requirements:
|
91
29
|
- - ">="
|
92
30
|
- !ruby/object:Gem::Version
|
93
|
-
hash: 3
|
94
31
|
segments:
|
95
32
|
- 0
|
96
33
|
version: "0"
|
97
34
|
type: :development
|
98
|
-
version_requirements: *id005
|
99
|
-
- !ruby/object:Gem::Dependency
|
100
|
-
name: rdoc
|
101
|
-
prerelease: false
|
102
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
103
|
-
none: false
|
104
|
-
requirements:
|
105
|
-
- - ">="
|
106
|
-
- !ruby/object:Gem::Version
|
107
|
-
hash: 3
|
108
|
-
segments:
|
109
|
-
- 0
|
110
|
-
version: "0"
|
111
|
-
type: :development
|
112
|
-
version_requirements: *id006
|
113
|
-
- !ruby/object:Gem::Dependency
|
114
|
-
name: rspec
|
115
35
|
prerelease: false
|
116
|
-
|
117
|
-
none: false
|
118
|
-
requirements:
|
119
|
-
- - ~>
|
120
|
-
- !ruby/object:Gem::Version
|
121
|
-
hash: 7
|
122
|
-
segments:
|
123
|
-
- 2
|
124
|
-
version: "2"
|
125
|
-
type: :development
|
126
|
-
version_requirements: *id007
|
36
|
+
version_requirements: *id001
|
127
37
|
- !ruby/object:Gem::Dependency
|
128
38
|
name: sniff
|
129
|
-
|
130
|
-
requirement: &id008 !ruby/object:Gem::Requirement
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
131
40
|
none: false
|
132
41
|
requirements:
|
133
|
-
- -
|
42
|
+
- - ~>
|
134
43
|
- !ruby/object:Gem::Version
|
135
|
-
hash: 3
|
136
44
|
segments:
|
137
45
|
- 0
|
138
|
-
|
46
|
+
- 4
|
47
|
+
- 9
|
48
|
+
version: 0.4.9
|
139
49
|
type: :development
|
140
|
-
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: *id002
|
141
52
|
- !ruby/object:Gem::Dependency
|
142
53
|
name: emitter
|
143
|
-
|
144
|
-
requirement: &id009 !ruby/object:Gem::Requirement
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
145
55
|
none: false
|
146
56
|
requirements:
|
147
57
|
- - ~>
|
148
58
|
- !ruby/object:Gem::Version
|
149
|
-
hash: 13
|
150
59
|
segments:
|
151
60
|
- 0
|
152
61
|
- 3
|
153
62
|
version: "0.3"
|
154
63
|
type: :runtime
|
155
|
-
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: *id003
|
156
66
|
description: A software model in Ruby for the greenhouse gas emissions of a computer's computations
|
157
67
|
email: andy@rossmeissl.net
|
158
68
|
executables: []
|
@@ -162,27 +72,32 @@ extensions: []
|
|
162
72
|
extra_rdoc_files:
|
163
73
|
- LICENSE
|
164
74
|
- README.rdoc
|
75
|
+
- TODO
|
165
76
|
files:
|
166
|
-
- LICENSE
|
167
|
-
- README.rdoc
|
168
77
|
- lib/computation.rb
|
78
|
+
- lib/test_support/db/fixtures/egrid_subregions.csv
|
79
|
+
- lib/test_support/db/fixtures/egrid_regions.csv
|
80
|
+
- lib/test_support/db/fixtures/zip_codes.csv
|
81
|
+
- lib/test_support/computation_record.rb
|
82
|
+
- lib/computation/fallback.rb
|
169
83
|
- lib/computation/carbon_model.rb
|
170
|
-
- lib/computation/characterization.rb
|
171
84
|
- lib/computation/data.rb
|
172
|
-
- lib/computation/fallback.rb
|
173
85
|
- lib/computation/relationships.rb
|
86
|
+
- lib/computation/characterization.rb
|
174
87
|
- lib/computation/summarization.rb
|
175
|
-
-
|
88
|
+
- LICENSE
|
89
|
+
- README.rdoc
|
90
|
+
- TODO
|
176
91
|
- features/support/env.rb
|
177
|
-
- features/computation_committees.feature
|
178
92
|
- features/computation_emissions.feature
|
93
|
+
- features/computation_committees.feature
|
179
94
|
has_rdoc: true
|
180
95
|
homepage: http://github.com/brighterplanet/computation
|
181
96
|
licenses: []
|
182
97
|
|
183
98
|
post_install_message:
|
184
|
-
rdoc_options:
|
185
|
-
|
99
|
+
rdoc_options: []
|
100
|
+
|
186
101
|
require_paths:
|
187
102
|
- lib
|
188
103
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -190,7 +105,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
190
105
|
requirements:
|
191
106
|
- - ">="
|
192
107
|
- !ruby/object:Gem::Version
|
193
|
-
hash:
|
108
|
+
hash: 260890931
|
194
109
|
segments:
|
195
110
|
- 0
|
196
111
|
version: "0"
|
@@ -199,7 +114,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
199
114
|
requirements:
|
200
115
|
- - ">="
|
201
116
|
- !ruby/object:Gem::Version
|
202
|
-
hash: 3
|
203
117
|
segments:
|
204
118
|
- 0
|
205
119
|
version: "0"
|
@@ -212,6 +126,6 @@ specification_version: 3
|
|
212
126
|
summary: A carbon model
|
213
127
|
test_files:
|
214
128
|
- features/support/env.rb
|
215
|
-
- features/computation_committees.feature
|
216
129
|
- features/computation_emissions.feature
|
130
|
+
- features/computation_committees.feature
|
217
131
|
- lib/test_support/computation_record.rb
|