computation 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- 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
|