tronprint 0.0.2 → 0.0.3
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/README.rdoc +92 -4
- data/Rakefile +5 -19
- data/lib/tronprint/aggregator.rb +30 -12
- data/lib/tronprint/application.rb +8 -0
- data/lib/tronprint/cpu_monitor.rb +16 -1
- data/lib/tronprint/rails/generator.rb +1 -0
- data/lib/tronprint/rails/tronprint_helper.rb +6 -0
- data/lib/tronprint/rails.rb +3 -1
- data/lib/tronprint.rb +48 -4
- data/spec/tronprint/rails/tronprint_helper_spec.rb +1 -1
- data/spec/tronprint_spec.rb +2 -10
- data/tronprint.gemspec +27 -110
- metadata +53 -172
- data/VERSION +0 -1
data/README.rdoc
CHANGED
@@ -1,9 +1,97 @@
|
|
1
|
-
=
|
1
|
+
= Tronprint
|
2
2
|
|
3
|
-
|
3
|
+
"The Grid: a digital frontier. I tried to picture clusters of information
|
4
|
+
as they moved through the computer. Ships, motorcycles... Were the circuits
|
5
|
+
like freeways? I kept dreaming of a world I'd never see. And then, one day,
|
6
|
+
I got in!"
|
7
|
+
|
8
|
+
-Floyd
|
9
|
+
|
10
|
+
Tronprint helps you visualize the carbon footprint of all of those little
|
11
|
+
Ruby processes zooming around on your system in their light cycles. You
|
12
|
+
can then show this footprint to the world of the Users via Rails helpers.
|
13
|
+
|
14
|
+
The emission estimates are calculated using {CM1}[http://carbon.brighterplanet.com],
|
15
|
+
{Brighter Planet's}[http://brighterplanet.com] carbon emissions calculation service.
|
16
|
+
Specifically, the {computation emitter}[http://carbon.brighterplanet.com/models/computation]
|
17
|
+
is used.
|
18
|
+
|
19
|
+
== Getting Started
|
20
|
+
|
21
|
+
If you haven't already, go to http://keys.brighterplanet.com and sign up for an
|
22
|
+
API key. Non-commercial use of CM1 is free, but commercial use is
|
23
|
+
{charged}[http://carbon.brighterplanet.com/pricing] per-query.
|
24
|
+
|
25
|
+
=== Rails
|
26
|
+
|
27
|
+
Add tronprint to your Gemfile:
|
28
|
+
|
29
|
+
gem 'tronprint'
|
30
|
+
|
31
|
+
And install the gem from the command line:
|
32
|
+
|
33
|
+
bundle update
|
34
|
+
|
35
|
+
Once you start your Rails app, Tronprint will automatically begin collecting
|
36
|
+
usage data. If you have multiple Rails processes running, Tronprint will
|
37
|
+
keep track of aggregate statistics for all processes. This is where
|
38
|
+
Tronprint.application_name comes into play. By default, your application's
|
39
|
+
directory name is used.
|
40
|
+
|
41
|
+
In order to display your application's footprint, you can use Tronprint's
|
42
|
+
built-in view helper: TronprintHelper. Feel free to cache your footprint
|
43
|
+
to minimize the number of API requests made to CM1.
|
44
|
+
|
45
|
+
==== Heroku
|
46
|
+
|
47
|
+
The easiest way to get started on Heroku is to sign up for a free MongoHQ
|
48
|
+
account to be used for the Tronprint::Aggregator. Since Heroku doesn't
|
49
|
+
allow access to the filesystem, Tronprint::Aggregator's default YAML
|
50
|
+
storage option will not work. Once you have MongoDB set up, change
|
51
|
+
config/tronprint.yml to:
|
52
|
+
|
53
|
+
---
|
54
|
+
:aggregator_options:
|
55
|
+
:adapter: :mongodb
|
56
|
+
:host: example.mongohq.com
|
57
|
+
:port: 1234
|
58
|
+
:db: tronprint
|
59
|
+
:collection: tronprint
|
60
|
+
:application_name: my_app
|
61
|
+
|
62
|
+
=== Other Ruby Apps
|
63
|
+
|
64
|
+
Tronprint will work with any Ruby app, but you have to do a little self-configuration.
|
65
|
+
|
66
|
+
When your application has started, all you have to do is make a call to
|
67
|
+
Tronprint.run. This starts up a thread that collects statistics at a
|
68
|
+
certain interval and stores the results in a key/value store.
|
69
|
+
|
70
|
+
To retrieve the footprint, make a call to Tronprint.emission_estimate. This
|
71
|
+
returns an instance of {Carbon::EmissionEstimate}[https://github.com/brighterplanet/carbon/blob/master/lib/carbon/emission_estimate.rb].
|
72
|
+
It can be converted to a float for the amount in kilograms or other
|
73
|
+
methods, such as EmissionEstimate#methodology can provide a link to the
|
74
|
+
methodology statement used to derive the estimate.
|
75
|
+
|
76
|
+
=== Aggregator Configuration Notes
|
77
|
+
|
78
|
+
If you want to hide your aggregator configuration, you can leave the :aggregator_options
|
79
|
+
item blank in config/tronprint.yml. In your application, manually set
|
80
|
+
Tronprint.aggregator_options to the values you desire.
|
81
|
+
|
82
|
+
== Configuration
|
83
|
+
|
84
|
+
There are several properties of Tronprint that can be configured. The configuration
|
85
|
+
is persisted in `pwd`/config/tronprint.yml. Here is a list of options that
|
86
|
+
can be set:
|
87
|
+
|
88
|
+
:zip_code:: The ZIP code where the server or host computer resides.
|
89
|
+
:brighter_planet_key:: Your Brighter Planet CM1 key. Get one from {keys.brighterplanet.com}[http://keys.brighterplanet.com].
|
90
|
+
:application_name:: The name of your application.
|
91
|
+
:aggregator_options:: A hash of options to send to the aggregator. A sub-option of :adapter is required. This corresponds to the name of an adapter supported by {moneta}[http://github.com/wycats/moneta]. All other sub-options given are passed on to the moneta adapter's initializer.
|
4
92
|
|
5
93
|
== Note on Patches/Pull Requests
|
6
|
-
|
94
|
+
|
7
95
|
* Fork the project.
|
8
96
|
* Make your feature addition or bug fix.
|
9
97
|
* Add tests for it. This is important so I don't break it in a
|
@@ -14,4 +102,4 @@ Description goes here.
|
|
14
102
|
|
15
103
|
== Copyright
|
16
104
|
|
17
|
-
Copyright
|
105
|
+
Copyright © 2010 Brighter Planet. See LICENSE for details.
|
data/Rakefile
CHANGED
@@ -2,26 +2,10 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
|
4
4
|
begin
|
5
|
-
require '
|
6
|
-
|
7
|
-
gem.name = 'tronprint'
|
8
|
-
gem.summary = 'Ruby process carbon footprinter'
|
9
|
-
gem.description = 'A gem for monitoring the carbon footprint of your ruby app'
|
10
|
-
gem.email = 'dkastner@gmail.com'
|
11
|
-
gem.homepage = 'http://github.com/dkastner/tronprint'
|
12
|
-
gem.authors = ['Derek Kastner']
|
13
|
-
gem.add_development_dependency 'cucumber'
|
14
|
-
gem.add_development_dependency 'jeweler', '~> 1.4.0'
|
15
|
-
gem.add_development_dependency 'rake'
|
16
|
-
gem.add_development_dependency 'rspec', '~>2.0'
|
17
|
-
gem.add_development_dependency 'sandbox'
|
18
|
-
gem.add_dependency 'carbon', '~> 1.0.3'
|
19
|
-
gem.add_dependency 'i18n'
|
20
|
-
gem.add_dependency 'moneta'
|
21
|
-
end
|
22
|
-
Jeweler::GemcutterTasks.new
|
5
|
+
require 'bueller'
|
6
|
+
Bueller::Tasks.new
|
23
7
|
rescue LoadError
|
24
|
-
puts "
|
8
|
+
puts "Bueller (or a dependency) not available. Install it with: gem install bueller"
|
25
9
|
end
|
26
10
|
|
27
11
|
begin
|
@@ -42,8 +26,10 @@ require 'rake/rdoctask'
|
|
42
26
|
Rake::RDocTask.new do |rdoc|
|
43
27
|
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
44
28
|
|
29
|
+
rdoc.main = 'README.rdoc'
|
45
30
|
rdoc.rdoc_dir = 'rdoc'
|
46
31
|
rdoc.title = "tronprint #{version}"
|
47
32
|
rdoc.rdoc_files.include('README*')
|
33
|
+
rdoc.rdoc_files.include('LICENSE')
|
48
34
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
49
35
|
end
|
data/lib/tronprint/aggregator.rb
CHANGED
@@ -2,38 +2,56 @@ require 'delegate'
|
|
2
2
|
require 'moneta'
|
3
3
|
|
4
4
|
module Tronprint
|
5
|
+
|
6
|
+
# Tronprint::Aggregator stores aggregate application statistics
|
7
|
+
# to some sort of persistent key/value store. By default, this
|
8
|
+
# is a YAML file, but any key/value store supported by
|
9
|
+
# {moneta}[http://github.com/wycats/moneta] will work.
|
5
10
|
class Aggregator < Delegator
|
11
|
+
|
12
|
+
# Initialize the Aggregator with the following options:
|
13
|
+
# +adapter+:: The underscore-ized name of the moneta class to use.
|
14
|
+
#
|
15
|
+
# All other options are passed to the moneta adapter.
|
16
|
+
# You'll have to read {moneda's source code}[https://github.com/wycats/moneta/tree/master/lib/moneta/adapters]
|
17
|
+
# for options needed by your desired adapter.
|
6
18
|
def initialize(options = {})
|
7
19
|
adapter_underscored = options.delete :adapter
|
8
|
-
adapter_underscored ||=
|
20
|
+
adapter_underscored ||= 'pstore'
|
21
|
+
adapter_underscored = adapter_underscored.to_s.downcase
|
9
22
|
begin
|
10
|
-
require "moneta/#{adapter_underscored
|
23
|
+
require "moneta/#{adapter_underscored}"
|
11
24
|
klass = Moneta.const_get adapter_constant(adapter_underscored)
|
12
25
|
rescue LoadError # Bundler hack
|
13
|
-
require "moneta/adapters/#{adapter_underscored
|
26
|
+
require "moneta/adapters/#{adapter_underscored}"
|
14
27
|
klass = Moneta::Adapters.const_get adapter_constant(adapter_underscored)
|
15
28
|
end
|
16
|
-
args = adapter_underscored ==
|
17
|
-
|
29
|
+
args = adapter_underscored == 'memory' ? [] : [options]
|
30
|
+
instance = klass.new(*args)
|
31
|
+
__setobj__ instance # required in Ruby 1.8.7
|
32
|
+
super instance
|
18
33
|
end
|
19
34
|
|
20
|
-
def __getobj__
|
35
|
+
def __getobj__ # :nodoc:
|
21
36
|
@delegate_sd_obj
|
22
37
|
end
|
23
|
-
def __setobj__(obj)
|
38
|
+
def __setobj__(obj) # :nodoc:
|
24
39
|
@delegate_sd_obj = obj
|
25
40
|
end
|
26
41
|
|
42
|
+
# The class name of the desired moneta adapter
|
27
43
|
def adapter_constant(adapter_underscored)
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
44
|
+
case adapter_underscored
|
45
|
+
when 'pstore' then 'PStore'
|
46
|
+
when 'yaml' then 'YAML'
|
47
|
+
when 'mongodb' then 'MongoDB'
|
32
48
|
else
|
33
|
-
adapter_underscored.
|
49
|
+
adapter_underscored.split('_').map(&:capitalize).join('')
|
34
50
|
end
|
35
51
|
end
|
36
52
|
|
53
|
+
# Increment the total statistic by the given +value+,
|
54
|
+
# specified by the given +key+.
|
37
55
|
def update(key, value)
|
38
56
|
old_value = self[key]
|
39
57
|
new_value = old_value ? old_value + value : value
|
@@ -1,6 +1,9 @@
|
|
1
1
|
require 'carbon'
|
2
2
|
|
3
3
|
module Tronprint
|
4
|
+
|
5
|
+
# Tronprint::Application is the class responsible for
|
6
|
+
# obtaining emission estimates from CM1.
|
4
7
|
class Application
|
5
8
|
include Carbon
|
6
9
|
|
@@ -11,12 +14,17 @@ module Tronprint
|
|
11
14
|
|
12
15
|
attr_accessor :duration, :zip_code, :brighter_planet_key
|
13
16
|
|
17
|
+
# Initialize using Rails' model initializer style.
|
18
|
+
#
|
19
|
+
# Tronprint::Application.new :duration => 3.0
|
14
20
|
def initialize(attrs = {})
|
15
21
|
attrs.each do |name, value|
|
16
22
|
self.send("#{name}=", value)
|
17
23
|
end
|
18
24
|
end
|
19
25
|
|
26
|
+
# The options accepted are those accepted by
|
27
|
+
# {Carbon::EmissionEstimate}[http://rdoc.info/github/brighterplanet/carbon/master/Carbon#emission_estimate-instance_method]
|
20
28
|
def emission_estimate(options = {})
|
21
29
|
super options.merge(:key => brighter_planet_key)
|
22
30
|
end
|
@@ -1,11 +1,18 @@
|
|
1
1
|
module Tronprint
|
2
|
+
|
3
|
+
# Tronprint::CPUMonitor is a thread that monitors aggregate CPU usage.
|
2
4
|
class CPUMonitor < Thread
|
3
5
|
attr_accessor :total_recorded_cpu_time, :aggregator, :application_name
|
4
6
|
|
7
|
+
# Parameters:
|
8
|
+
# +aggregator+:: A Tronprint::Aggregator instance.
|
9
|
+
# +application_name+:: A unique application name.
|
10
|
+
# +options+:: Extra options, such as:
|
11
|
+
# --+run+:: Whether to fork the thread and run continuously. +true+ by default.
|
5
12
|
def initialize(aggregator, application_name, options = {})
|
6
13
|
self.aggregator = aggregator
|
7
14
|
self.application_name = application_name
|
8
|
-
options[:run]
|
15
|
+
options[:run] = true if options[:run].nil?
|
9
16
|
if options[:run]
|
10
17
|
super do
|
11
18
|
while(true) do
|
@@ -13,27 +20,35 @@ module Tronprint
|
|
13
20
|
sleep(5)
|
14
21
|
end
|
15
22
|
end
|
23
|
+
else
|
24
|
+
super() {} # Ruby 1.8 hack
|
16
25
|
end
|
17
26
|
end
|
18
27
|
|
28
|
+
# The key used to store CPU data in the Aggregator.
|
19
29
|
def key
|
20
30
|
[application_name, 'application', 'cpu_time'].join('/')
|
21
31
|
end
|
22
32
|
|
33
|
+
# The process used to collect CPU uptime data and store it.
|
23
34
|
def monitor
|
24
35
|
elapsed_time = elapsed_cpu_time
|
25
36
|
aggregator.update key, elapsed_time
|
26
37
|
self.total_recorded_cpu_time += elapsed_time
|
27
38
|
end
|
28
39
|
|
40
|
+
# The total amount of CPU time used by the current process
|
41
|
+
# since the time the process started.
|
29
42
|
def total_cpu_time
|
30
43
|
Process.times.inject(0) { |sum, i| sum += i }
|
31
44
|
end
|
32
45
|
|
46
|
+
# The total amount of CPU time we've recorded for the application.
|
33
47
|
def total_recorded_cpu_time
|
34
48
|
@total_recorded_cpu_time ||= 0.0
|
35
49
|
end
|
36
50
|
|
51
|
+
# The amount of CPU time consumed since the last time we checked.
|
37
52
|
def elapsed_cpu_time
|
38
53
|
total_cpu_time - total_recorded_cpu_time
|
39
54
|
end
|
@@ -1,11 +1,17 @@
|
|
1
|
+
# Rails helper for displaying footprint data.
|
1
2
|
module TronprintHelper
|
3
|
+
|
4
|
+
# The total amount of CO2e generated by the application.
|
2
5
|
def total_footprint
|
3
6
|
emission_estimate.to_f
|
4
7
|
end
|
8
|
+
# A URL for the methodology statement of the emissions calculation.
|
5
9
|
def footprint_methodology
|
6
10
|
emission_estimate.methodology
|
7
11
|
end
|
8
12
|
|
13
|
+
# The Carbon::EmissionEstimate object representing the
|
14
|
+
# estimate processed by CM1.
|
9
15
|
def emission_estimate
|
10
16
|
@emission_estimate ||= Tronprint.emission_estimate
|
11
17
|
end
|
data/lib/tronprint/rails.rb
CHANGED
data/lib/tronprint.rb
CHANGED
@@ -7,57 +7,98 @@ if defined?(Rails)
|
|
7
7
|
require 'tronprint/rails'
|
8
8
|
end
|
9
9
|
|
10
|
+
# "The Grid: A digital frontier. I tried to picture clusters of information
|
11
|
+
# as they moved through the computer. Ships, motorcycles... Were the circuits
|
12
|
+
# like freeways? I kept dreaming of a world I'd never see. And then, one day,
|
13
|
+
# I got in!"
|
14
|
+
#
|
15
|
+
# -Floyd
|
16
|
+
#
|
17
|
+
# Tronprint helps you visualize the carbon footprint of all of those little
|
18
|
+
# Ruby processes zooming around on your system in their light cycles. You
|
19
|
+
# can then show this footprint to the world of the Users via Rails helpers.
|
20
|
+
#
|
21
|
+
# The Tronprint module itself provides a method, .emission_estimate, that
|
22
|
+
# will tell you the number of kilograms of CO2 (including the equivalent
|
23
|
+
# amount of CO2 representing other greenhouse gasses) the current ruby
|
24
|
+
# application is generating.
|
25
|
+
#
|
26
|
+
# The aggregate amount of CO2-generating activity is stored in a user-defined
|
27
|
+
# key/value store that will keep track of emissions for any application
|
28
|
+
# specified by Tronprint.application_name.
|
29
|
+
#
|
30
|
+
# == Getting Started
|
31
|
+
#
|
32
|
+
# See README.rdoc for more information.
|
10
33
|
module Tronprint
|
11
34
|
extend self
|
12
35
|
|
13
36
|
attr_accessor :aggregator_options, :zip_code, :application_name, :brighter_planet_key
|
14
37
|
|
38
|
+
# Options to send the aggregator. See Tronprint::Aggregator.new
|
15
39
|
def aggregator_options
|
16
40
|
@aggregator_options ||= config[:aggregator_options]
|
17
41
|
end
|
18
42
|
|
43
|
+
# The zip code of the server's hosting location. This affects
|
44
|
+
# the total footprint because certain regions rely more heavily
|
45
|
+
# on different sources of electricity.
|
19
46
|
def zip_code
|
20
47
|
@zip_code ||= config[:zip_code]
|
21
48
|
end
|
22
49
|
|
50
|
+
# This is your Brighter Planet API key. Get one from
|
51
|
+
# {keys.brighterplanet.com}[http://keys.brighterplanet.com]
|
23
52
|
def brighter_planet_key
|
24
53
|
@brighter_planet_key ||= config[:brighter_planet_key]
|
25
54
|
end
|
26
55
|
|
56
|
+
# The name of your application (used to group aggregate data).
|
57
|
+
def application_name
|
58
|
+
@application_name ||= config[:application_name]
|
59
|
+
end
|
60
|
+
|
61
|
+
# Run the footprinter by starting up a background thread which
|
62
|
+
# collects data.
|
27
63
|
def run
|
28
64
|
cpu_monitor
|
29
65
|
end
|
30
66
|
|
67
|
+
# Check whether the data collection thread is running.
|
31
68
|
def running?
|
32
69
|
!@cpu_monitor.nil?
|
33
70
|
end
|
34
71
|
|
72
|
+
# The Tronprint::Aggregator instance.
|
35
73
|
def aggregator
|
36
74
|
@aggregator ||= Aggregator.new aggregator_options
|
37
75
|
end
|
38
76
|
|
77
|
+
# The Tronprint::CPUMonitor instance.
|
39
78
|
def cpu_monitor
|
40
79
|
@cpu_monitor ||= CPUMonitor.new aggregator, application_name
|
41
80
|
end
|
42
81
|
|
43
|
-
|
44
|
-
@application_name ||= config[:application_name]
|
45
|
-
end
|
46
|
-
|
82
|
+
# Fetch the total amount of CPU time used by the application.
|
47
83
|
def total_duration
|
48
84
|
aggregator[cpu_monitor.key]
|
49
85
|
end
|
50
86
|
|
87
|
+
# The current configuration.
|
51
88
|
def config
|
52
89
|
load_config || default_config
|
53
90
|
end
|
54
91
|
|
92
|
+
# Fetch the configuration stored in config/tronprint.yml.
|
55
93
|
def load_config
|
56
94
|
return @loaded_config unless @loaded_config.nil?
|
57
95
|
path = File.expand_path('config/tronprint.yml', Dir.pwd)
|
58
96
|
@loaded_config = YAML::load_file path if File.exist? path
|
59
97
|
end
|
60
98
|
|
99
|
+
# By default, the YAML adapter is used and aggregate statistics
|
100
|
+
# are stored in `pwd`/tronprint_stats.yml. The application name
|
101
|
+
# is assumed to be the name of the current directory.
|
61
102
|
def default_config
|
62
103
|
@default_config ||= {
|
63
104
|
:aggregator_options => {
|
@@ -68,6 +109,9 @@ module Tronprint
|
|
68
109
|
}
|
69
110
|
end
|
70
111
|
|
112
|
+
# Calculate emissions using aggregated data. A call is made to
|
113
|
+
# Brighter Planet's CM1 emission estimate service. Specifically,
|
114
|
+
# the call is made to the {computation emitter}[http://carbon.brighterplanet.com/models/computation]
|
71
115
|
def emission_estimate
|
72
116
|
app = Application.new :zip_code => zip_code, :duration => total_duration,
|
73
117
|
:brighter_planet_key => brighter_planet_key
|
@@ -10,7 +10,7 @@ describe TronprintHelper do
|
|
10
10
|
|
11
11
|
describe '#total_footprint' do
|
12
12
|
it 'should return the total footprint' do
|
13
|
-
|
13
|
+
helper.stub!(:emission_estimate).and_return 89.4
|
14
14
|
helper.total_footprint.should == 89.4
|
15
15
|
end
|
16
16
|
end
|
data/spec/tronprint_spec.rb
CHANGED
@@ -26,15 +26,6 @@ describe Tronprint do
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
describe '.footprint_amount' do
|
30
|
-
let(:estimate) { mock Object, :to_f => 100.1 }
|
31
|
-
|
32
|
-
it 'should return the total footprint of the application' do
|
33
|
-
Tronprint.stub!(:emission_estimate).and_return estimate
|
34
|
-
Tronprint.footprint_amount.should == 100.1
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
29
|
describe '.emission_estimate' do
|
39
30
|
it 'should send the zip code and total duration to the application' do
|
40
31
|
Tronprint.instance_variable_set(:@emission_estimate, nil)
|
@@ -84,7 +75,8 @@ describe Tronprint do
|
|
84
75
|
|
85
76
|
describe '.total_duration' do
|
86
77
|
it 'should look up the total for the application' do
|
87
|
-
Tronprint
|
78
|
+
mock_cpu = mock Tronprint::CPUMonitor, :key => 'groove/application/cpu_time'
|
79
|
+
Tronprint.instance_variable_set :@cpu_monitor, mock_cpu
|
88
80
|
Tronprint.application_name = 'groove'
|
89
81
|
Tronprint.aggregator.update 'groove/application/cpu_time', 5.0
|
90
82
|
Tronprint.total_duration.should == 5.0
|
data/tronprint.gemspec
CHANGED
@@ -1,123 +1,40 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
1
|
# -*- encoding: utf-8 -*-
|
5
2
|
|
6
3
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.0.
|
4
|
+
s.name = 'tronprint'
|
5
|
+
s.version = "0.0.3"
|
9
6
|
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
s.date = %q{2011-01-12}
|
7
|
+
s.authors = ['Derek Kastner']
|
8
|
+
s.date = "2011-01-19"
|
13
9
|
s.description = %q{A gem for monitoring the carbon footprint of your ruby app}
|
14
10
|
s.email = %q{dkastner@gmail.com}
|
15
|
-
s.
|
16
|
-
|
17
|
-
|
11
|
+
s.homepage = %q{http://github.com/brighterplanet/tronprint}
|
12
|
+
|
13
|
+
s.files = Dir.glob('lib/**/*.rb') + [
|
14
|
+
'.document',
|
15
|
+
'.rspec',
|
16
|
+
'Gemfile',
|
17
|
+
'Rakefile',
|
18
|
+
'tronprint.gemspec',
|
19
|
+
'autotest/discover.rb'
|
18
20
|
]
|
19
|
-
s.
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
"LICENSE",
|
24
|
-
"README.rdoc",
|
25
|
-
"Rakefile",
|
26
|
-
"VERSION",
|
27
|
-
"autotest/discover.rb",
|
28
|
-
"features/step_definitions/tronprint_steps.rb",
|
29
|
-
"features/support/env.rb",
|
30
|
-
"features/tronprint.feature",
|
31
|
-
"lib/tronprint.rb",
|
32
|
-
"lib/tronprint/aggregator.rb",
|
33
|
-
"lib/tronprint/application.rb",
|
34
|
-
"lib/tronprint/cpu_monitor.rb",
|
35
|
-
"lib/tronprint/rails.rb",
|
36
|
-
"lib/tronprint/rails/generator.rb",
|
37
|
-
"lib/tronprint/rails/tronprint_helper.rb",
|
38
|
-
"spec/spec.opts",
|
39
|
-
"spec/spec_helper.rb",
|
40
|
-
"spec/tronprint/aggregator_spec.rb",
|
41
|
-
"spec/tronprint/application_spec.rb",
|
42
|
-
"spec/tronprint/computer_spec.rb",
|
43
|
-
"spec/tronprint/cpu_monitor_spec.rb",
|
44
|
-
"spec/tronprint/rails/tronprint_helper_spec.rb",
|
45
|
-
"spec/tronprint_spec.rb",
|
46
|
-
"tronprint.gemspec"
|
21
|
+
s.test_files = Dir.glob('spec/**/*') + Dir.glob('features/**/*')
|
22
|
+
s.extra_rdoc_files = [
|
23
|
+
'LICENSE',
|
24
|
+
'README.rdoc'
|
47
25
|
]
|
48
|
-
|
49
|
-
s.require_paths = [
|
26
|
+
|
27
|
+
s.require_paths = ['lib']
|
50
28
|
s.rubygems_version = %q{1.3.7}
|
51
29
|
s.summary = %q{Ruby process carbon footprinter}
|
52
|
-
s.test_files = [
|
53
|
-
"spec/spec_helper.rb",
|
54
|
-
"spec/tronprint/aggregator_spec.rb",
|
55
|
-
"spec/tronprint/application_spec.rb",
|
56
|
-
"spec/tronprint/computer_spec.rb",
|
57
|
-
"spec/tronprint/cpu_monitor_spec.rb",
|
58
|
-
"spec/tronprint/rails/tronprint_helper_spec.rb",
|
59
|
-
"spec/tronprint_spec.rb"
|
60
|
-
]
|
61
|
-
|
62
|
-
if s.respond_to? :specification_version then
|
63
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
64
|
-
s.specification_version = 3
|
65
30
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
s.add_development_dependency(%q<rspec>, ["~> 2.0"])
|
75
|
-
s.add_development_dependency(%q<sandbox>, [">= 0"])
|
76
|
-
s.add_development_dependency(%q<cucumber>, [">= 0"])
|
77
|
-
s.add_development_dependency(%q<jeweler>, ["~> 1.4.0"])
|
78
|
-
s.add_development_dependency(%q<rake>, [">= 0"])
|
79
|
-
s.add_development_dependency(%q<rspec>, ["~> 2.0"])
|
80
|
-
s.add_development_dependency(%q<sandbox>, [">= 0"])
|
81
|
-
s.add_runtime_dependency(%q<carbon>, ["~> 1.0.3"])
|
82
|
-
s.add_runtime_dependency(%q<i18n>, [">= 0"])
|
83
|
-
s.add_runtime_dependency(%q<moneta>, [">= 0"])
|
84
|
-
else
|
85
|
-
s.add_dependency(%q<tronprint>, [">= 0"])
|
86
|
-
s.add_dependency(%q<carbon>, ["~> 1.0.3"])
|
87
|
-
s.add_dependency(%q<i18n>, [">= 0"])
|
88
|
-
s.add_dependency(%q<moneta>, [">= 0"])
|
89
|
-
s.add_dependency(%q<cucumber>, [">= 0"])
|
90
|
-
s.add_dependency(%q<jeweler>, ["~> 1.4.0"])
|
91
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
92
|
-
s.add_dependency(%q<rspec>, ["~> 2.0"])
|
93
|
-
s.add_dependency(%q<sandbox>, [">= 0"])
|
94
|
-
s.add_dependency(%q<cucumber>, [">= 0"])
|
95
|
-
s.add_dependency(%q<jeweler>, ["~> 1.4.0"])
|
96
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
97
|
-
s.add_dependency(%q<rspec>, ["~> 2.0"])
|
98
|
-
s.add_dependency(%q<sandbox>, [">= 0"])
|
99
|
-
s.add_dependency(%q<carbon>, ["~> 1.0.3"])
|
100
|
-
s.add_dependency(%q<i18n>, [">= 0"])
|
101
|
-
s.add_dependency(%q<moneta>, [">= 0"])
|
102
|
-
end
|
103
|
-
else
|
104
|
-
s.add_dependency(%q<tronprint>, [">= 0"])
|
105
|
-
s.add_dependency(%q<carbon>, ["~> 1.0.3"])
|
106
|
-
s.add_dependency(%q<i18n>, [">= 0"])
|
107
|
-
s.add_dependency(%q<moneta>, [">= 0"])
|
108
|
-
s.add_dependency(%q<cucumber>, [">= 0"])
|
109
|
-
s.add_dependency(%q<jeweler>, ["~> 1.4.0"])
|
110
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
111
|
-
s.add_dependency(%q<rspec>, ["~> 2.0"])
|
112
|
-
s.add_dependency(%q<sandbox>, [">= 0"])
|
113
|
-
s.add_dependency(%q<cucumber>, [">= 0"])
|
114
|
-
s.add_dependency(%q<jeweler>, ["~> 1.4.0"])
|
115
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
116
|
-
s.add_dependency(%q<rspec>, ["~> 2.0"])
|
117
|
-
s.add_dependency(%q<sandbox>, [">= 0"])
|
118
|
-
s.add_dependency(%q<carbon>, ["~> 1.0.3"])
|
119
|
-
s.add_dependency(%q<i18n>, [">= 0"])
|
120
|
-
s.add_dependency(%q<moneta>, [">= 0"])
|
121
|
-
end
|
31
|
+
s.add_development_dependency 'cucumber'
|
32
|
+
s.add_development_dependency 'bueller', '~> 0.0.2'
|
33
|
+
s.add_development_dependency 'rake'
|
34
|
+
s.add_development_dependency 'rspec', '~> 2.0'
|
35
|
+
s.add_development_dependency 'sandbox'
|
36
|
+
s.add_runtime_dependency 'carbon', '~> 1.0.3'
|
37
|
+
s.add_runtime_dependency 'i18n'
|
38
|
+
s.add_runtime_dependency 'moneta'
|
122
39
|
end
|
123
40
|
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 3
|
9
|
+
version: 0.0.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Derek Kastner
|
@@ -14,11 +14,12 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-19 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
21
|
+
name: cucumber
|
22
|
+
prerelease: false
|
22
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
23
24
|
none: false
|
24
25
|
requirements:
|
@@ -27,149 +28,27 @@ dependencies:
|
|
27
28
|
segments:
|
28
29
|
- 0
|
29
30
|
version: "0"
|
30
|
-
type: :
|
31
|
-
prerelease: false
|
31
|
+
type: :development
|
32
32
|
version_requirements: *id001
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
35
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
-
none: false
|
37
|
-
requirements:
|
38
|
-
- - ~>
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
segments:
|
41
|
-
- 1
|
42
|
-
- 0
|
43
|
-
- 3
|
44
|
-
version: 1.0.3
|
45
|
-
type: :runtime
|
46
|
-
prerelease: false
|
47
|
-
version_requirements: *id002
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: i18n
|
50
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
51
|
-
none: false
|
52
|
-
requirements:
|
53
|
-
- - ">="
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
segments:
|
56
|
-
- 0
|
57
|
-
version: "0"
|
58
|
-
type: :runtime
|
59
|
-
prerelease: false
|
60
|
-
version_requirements: *id003
|
61
|
-
- !ruby/object:Gem::Dependency
|
62
|
-
name: moneta
|
63
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
64
|
-
none: false
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
segments:
|
69
|
-
- 0
|
70
|
-
version: "0"
|
71
|
-
type: :runtime
|
34
|
+
name: bueller
|
72
35
|
prerelease: false
|
73
|
-
|
74
|
-
- !ruby/object:Gem::Dependency
|
75
|
-
name: cucumber
|
76
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
77
|
-
none: false
|
78
|
-
requirements:
|
79
|
-
- - ">="
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
segments:
|
82
|
-
- 0
|
83
|
-
version: "0"
|
84
|
-
type: :development
|
85
|
-
prerelease: false
|
86
|
-
version_requirements: *id005
|
87
|
-
- !ruby/object:Gem::Dependency
|
88
|
-
name: jeweler
|
89
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
90
37
|
none: false
|
91
38
|
requirements:
|
92
39
|
- - ~>
|
93
40
|
- !ruby/object:Gem::Version
|
94
41
|
segments:
|
95
|
-
- 1
|
96
|
-
- 4
|
97
42
|
- 0
|
98
|
-
version: 1.4.0
|
99
|
-
type: :development
|
100
|
-
prerelease: false
|
101
|
-
version_requirements: *id006
|
102
|
-
- !ruby/object:Gem::Dependency
|
103
|
-
name: rake
|
104
|
-
requirement: &id007 !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ">="
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
segments:
|
110
43
|
- 0
|
111
|
-
version: "0"
|
112
|
-
type: :development
|
113
|
-
prerelease: false
|
114
|
-
version_requirements: *id007
|
115
|
-
- !ruby/object:Gem::Dependency
|
116
|
-
name: rspec
|
117
|
-
requirement: &id008 !ruby/object:Gem::Requirement
|
118
|
-
none: false
|
119
|
-
requirements:
|
120
|
-
- - ~>
|
121
|
-
- !ruby/object:Gem::Version
|
122
|
-
segments:
|
123
44
|
- 2
|
124
|
-
|
125
|
-
version: "2.0"
|
45
|
+
version: 0.0.2
|
126
46
|
type: :development
|
127
|
-
|
128
|
-
version_requirements: *id008
|
129
|
-
- !ruby/object:Gem::Dependency
|
130
|
-
name: sandbox
|
131
|
-
requirement: &id009 !ruby/object:Gem::Requirement
|
132
|
-
none: false
|
133
|
-
requirements:
|
134
|
-
- - ">="
|
135
|
-
- !ruby/object:Gem::Version
|
136
|
-
segments:
|
137
|
-
- 0
|
138
|
-
version: "0"
|
139
|
-
type: :development
|
140
|
-
prerelease: false
|
141
|
-
version_requirements: *id009
|
142
|
-
- !ruby/object:Gem::Dependency
|
143
|
-
name: cucumber
|
144
|
-
requirement: &id010 !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
|
-
requirements:
|
147
|
-
- - ">="
|
148
|
-
- !ruby/object:Gem::Version
|
149
|
-
segments:
|
150
|
-
- 0
|
151
|
-
version: "0"
|
152
|
-
type: :development
|
153
|
-
prerelease: false
|
154
|
-
version_requirements: *id010
|
155
|
-
- !ruby/object:Gem::Dependency
|
156
|
-
name: jeweler
|
157
|
-
requirement: &id011 !ruby/object:Gem::Requirement
|
158
|
-
none: false
|
159
|
-
requirements:
|
160
|
-
- - ~>
|
161
|
-
- !ruby/object:Gem::Version
|
162
|
-
segments:
|
163
|
-
- 1
|
164
|
-
- 4
|
165
|
-
- 0
|
166
|
-
version: 1.4.0
|
167
|
-
type: :development
|
168
|
-
prerelease: false
|
169
|
-
version_requirements: *id011
|
47
|
+
version_requirements: *id002
|
170
48
|
- !ruby/object:Gem::Dependency
|
171
49
|
name: rake
|
172
|
-
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
173
52
|
none: false
|
174
53
|
requirements:
|
175
54
|
- - ">="
|
@@ -178,11 +57,11 @@ dependencies:
|
|
178
57
|
- 0
|
179
58
|
version: "0"
|
180
59
|
type: :development
|
181
|
-
|
182
|
-
version_requirements: *id012
|
60
|
+
version_requirements: *id003
|
183
61
|
- !ruby/object:Gem::Dependency
|
184
62
|
name: rspec
|
185
|
-
|
63
|
+
prerelease: false
|
64
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
186
65
|
none: false
|
187
66
|
requirements:
|
188
67
|
- - ~>
|
@@ -192,11 +71,11 @@ dependencies:
|
|
192
71
|
- 0
|
193
72
|
version: "2.0"
|
194
73
|
type: :development
|
195
|
-
|
196
|
-
version_requirements: *id013
|
74
|
+
version_requirements: *id004
|
197
75
|
- !ruby/object:Gem::Dependency
|
198
76
|
name: sandbox
|
199
|
-
|
77
|
+
prerelease: false
|
78
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
200
79
|
none: false
|
201
80
|
requirements:
|
202
81
|
- - ">="
|
@@ -205,11 +84,11 @@ dependencies:
|
|
205
84
|
- 0
|
206
85
|
version: "0"
|
207
86
|
type: :development
|
208
|
-
|
209
|
-
version_requirements: *id014
|
87
|
+
version_requirements: *id005
|
210
88
|
- !ruby/object:Gem::Dependency
|
211
89
|
name: carbon
|
212
|
-
|
90
|
+
prerelease: false
|
91
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
213
92
|
none: false
|
214
93
|
requirements:
|
215
94
|
- - ~>
|
@@ -220,11 +99,11 @@ dependencies:
|
|
220
99
|
- 3
|
221
100
|
version: 1.0.3
|
222
101
|
type: :runtime
|
223
|
-
|
224
|
-
version_requirements: *id015
|
102
|
+
version_requirements: *id006
|
225
103
|
- !ruby/object:Gem::Dependency
|
226
104
|
name: i18n
|
227
|
-
|
105
|
+
prerelease: false
|
106
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
228
107
|
none: false
|
229
108
|
requirements:
|
230
109
|
- - ">="
|
@@ -233,11 +112,11 @@ dependencies:
|
|
233
112
|
- 0
|
234
113
|
version: "0"
|
235
114
|
type: :runtime
|
236
|
-
|
237
|
-
version_requirements: *id016
|
115
|
+
version_requirements: *id007
|
238
116
|
- !ruby/object:Gem::Dependency
|
239
117
|
name: moneta
|
240
|
-
|
118
|
+
prerelease: false
|
119
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
241
120
|
none: false
|
242
121
|
requirements:
|
243
122
|
- - ">="
|
@@ -246,8 +125,7 @@ dependencies:
|
|
246
125
|
- 0
|
247
126
|
version: "0"
|
248
127
|
type: :runtime
|
249
|
-
|
250
|
-
version_requirements: *id017
|
128
|
+
version_requirements: *id008
|
251
129
|
description: A gem for monitoring the carbon footprint of your ruby app
|
252
130
|
email: dkastner@gmail.com
|
253
131
|
executables: []
|
@@ -258,35 +136,34 @@ extra_rdoc_files:
|
|
258
136
|
- LICENSE
|
259
137
|
- README.rdoc
|
260
138
|
files:
|
139
|
+
- lib/tronprint/aggregator.rb
|
140
|
+
- lib/tronprint/rails/generator.rb
|
141
|
+
- lib/tronprint/rails/tronprint_helper.rb
|
142
|
+
- lib/tronprint/application.rb
|
143
|
+
- lib/tronprint/cpu_monitor.rb
|
144
|
+
- lib/tronprint/rails.rb
|
145
|
+
- lib/tronprint.rb
|
261
146
|
- .document
|
262
147
|
- .rspec
|
263
148
|
- Gemfile
|
264
|
-
- LICENSE
|
265
|
-
- README.rdoc
|
266
149
|
- Rakefile
|
267
|
-
-
|
150
|
+
- tronprint.gemspec
|
268
151
|
- autotest/discover.rb
|
269
|
-
-
|
270
|
-
-
|
271
|
-
- features/tronprint.feature
|
272
|
-
- lib/tronprint.rb
|
273
|
-
- lib/tronprint/aggregator.rb
|
274
|
-
- lib/tronprint/application.rb
|
275
|
-
- lib/tronprint/cpu_monitor.rb
|
276
|
-
- lib/tronprint/rails.rb
|
277
|
-
- lib/tronprint/rails/generator.rb
|
278
|
-
- lib/tronprint/rails/tronprint_helper.rb
|
279
|
-
- spec/spec.opts
|
280
|
-
- spec/spec_helper.rb
|
281
|
-
- spec/tronprint/aggregator_spec.rb
|
152
|
+
- LICENSE
|
153
|
+
- README.rdoc
|
282
154
|
- spec/tronprint/application_spec.rb
|
155
|
+
- spec/tronprint/rails/tronprint_helper_spec.rb
|
283
156
|
- spec/tronprint/computer_spec.rb
|
157
|
+
- spec/tronprint/aggregator_spec.rb
|
284
158
|
- spec/tronprint/cpu_monitor_spec.rb
|
285
|
-
- spec/tronprint/rails/tronprint_helper_spec.rb
|
286
159
|
- spec/tronprint_spec.rb
|
287
|
-
-
|
160
|
+
- spec/spec.opts
|
161
|
+
- spec/spec_helper.rb
|
162
|
+
- features/support/env.rb
|
163
|
+
- features/tronprint.feature
|
164
|
+
- features/step_definitions/tronprint_steps.rb
|
288
165
|
has_rdoc: true
|
289
|
-
homepage: http://github.com/
|
166
|
+
homepage: http://github.com/brighterplanet/tronprint
|
290
167
|
licenses: []
|
291
168
|
|
292
169
|
post_install_message:
|
@@ -318,10 +195,14 @@ signing_key:
|
|
318
195
|
specification_version: 3
|
319
196
|
summary: Ruby process carbon footprinter
|
320
197
|
test_files:
|
321
|
-
- spec/spec_helper.rb
|
322
|
-
- spec/tronprint/aggregator_spec.rb
|
323
198
|
- spec/tronprint/application_spec.rb
|
199
|
+
- spec/tronprint/rails/tronprint_helper_spec.rb
|
324
200
|
- spec/tronprint/computer_spec.rb
|
201
|
+
- spec/tronprint/aggregator_spec.rb
|
325
202
|
- spec/tronprint/cpu_monitor_spec.rb
|
326
|
-
- spec/tronprint/rails/tronprint_helper_spec.rb
|
327
203
|
- spec/tronprint_spec.rb
|
204
|
+
- spec/spec.opts
|
205
|
+
- spec/spec_helper.rb
|
206
|
+
- features/support/env.rb
|
207
|
+
- features/tronprint.feature
|
208
|
+
- features/step_definitions/tronprint_steps.rb
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.0.2
|