ruby-metrics 0.8.6 → 0.9.0

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. data/.bundle/config +1 -2
  2. data/.gitignore +2 -0
  3. data/.rvmrc +1 -1
  4. data/.travis.yml +5 -0
  5. data/CHANGELOG.md +48 -0
  6. data/Gemfile +8 -2
  7. data/README.md +2 -1
  8. data/Rakefile +20 -7
  9. data/examples/gmontest.rb +17 -0
  10. data/examples/opentsdb_reporter.rb +77 -0
  11. data/lib/ruby-metrics.rb +3 -4
  12. data/lib/ruby-metrics/agent.rb +72 -16
  13. data/lib/ruby-metrics/instruments/counter.rb +19 -12
  14. data/lib/ruby-metrics/instruments/gauge.rb +13 -9
  15. data/lib/ruby-metrics/instruments/histogram.rb +46 -45
  16. data/lib/ruby-metrics/instruments/meter.rb +29 -26
  17. data/lib/ruby-metrics/instruments/timer.rb +38 -37
  18. data/lib/ruby-metrics/integration.rb +3 -4
  19. data/lib/ruby-metrics/logging.rb +0 -2
  20. data/lib/ruby-metrics/reporter.rb +28 -0
  21. data/lib/ruby-metrics/statistics/exponential_sample.rb +4 -5
  22. data/lib/ruby-metrics/statistics/uniform_sample.rb +1 -2
  23. data/lib/ruby-metrics/time_units.rb +13 -11
  24. data/lib/ruby-metrics/version.rb +1 -1
  25. data/ruby-metrics-ganglia.gemspec +21 -0
  26. data/ruby-metrics-librato.gemspec +20 -0
  27. data/ruby-metrics-opentsdb.gemspec +21 -0
  28. data/ruby-metrics.gemspec +18 -15
  29. data/spec/agent_spec.rb +13 -4
  30. data/spec/instruments/meter_spec.rb +40 -3
  31. data/spec/instruments/timer_spec.rb +1 -1
  32. data/spec/spec_helper.rb +1 -1
  33. metadata +106 -105
  34. data/Gemfile.lock +0 -34
  35. data/lib/ruby-metrics/instruments.rb +0 -89
  36. data/lib/ruby-metrics/instruments/base.rb +0 -23
  37. data/lib/ruby-metrics/statistics/sample.rb +0 -21
  38. data/spec/instruments/base_spec.rb +0 -16
  39. data/spec/instruments_spec.rb +0 -76
  40. data/spec/integration/webrick_spec.rb +0 -18
  41. data/spec/statistics/sample_spec.rb +0 -22
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "ruby-metrics/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "ruby-metrics-opentsdb"
7
+ s.version = Metrics::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["John Ewart"]
10
+ s.email = ["john@johnewart.net"]
11
+ s.homepage = "https://github.com/johnewart/ruby-metrics-opentsdb"
12
+ s.summary = %q{OpenTSDB reporter for ruby-metrics}
13
+ s.description = %q{A reporter that uses OpenTSDB to stash metric data}
14
+ s.license = 'MIT'
15
+
16
+ s.files = ['lib/ruby-metrics/reporters/opentsdb.rb']
17
+ s.require_paths = ["lib"]
18
+
19
+ s.add_dependency "opentsdb", '0.1.0'
20
+ s.add_dependency 'ruby-metrics', Metrics::VERSION
21
+ end
@@ -1,27 +1,30 @@
1
1
  # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "ruby-metrics/version"
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'ruby-metrics/version'
4
+
5
+ plugin_files = Dir['ruby-metrics-*.gemspec'].map { |gemspec|
6
+ eval(File.read(gemspec)).files
7
+ }.flatten.uniq
4
8
 
5
9
  Gem::Specification.new do |s|
6
- s.name = "ruby-metrics"
10
+ s.name = 'ruby-metrics'
7
11
  s.version = Metrics::VERSION
8
12
  s.platform = Gem::Platform::RUBY
9
- s.authors = ["John Ewart"]
10
- s.email = ["john@johnewart.net"]
11
- s.homepage = "https://github.com/johnewart/ruby-metrics"
13
+ s.authors = ['John Ewart']
14
+ s.email = ['john@johnewart.net']
15
+ s.homepage = 'https://github.com/johnewart/ruby-metrics'
12
16
  s.summary = %q{Metrics for Ruby}
13
17
  s.description = %q{A Ruby implementation of metrics inspired by @coda's JVM metrics for those of us in Ruby land}
18
+ s.license = 'MIT'
14
19
 
15
- s.rubyforge_project = "ruby-metrics"
16
-
17
- s.add_dependency "json"
20
+ s.add_dependency 'json', '~> 1.5', '>= 1.5.5'
18
21
 
19
- s.add_development_dependency "rspec"
20
- s.add_development_dependency "simplecov", [">= 0.3.8"] #, :require => false
21
- s.add_development_dependency "rack-test"
22
+ s.add_development_dependency 'rspec', '~> 2.14', '>= 2.14.0'
23
+ s.add_development_dependency 'simplecov', '~> 0.3', '>= 0.3.8'
24
+ s.add_development_dependency 'rack-test', '~> 0.5', '>= 0.5.7'
22
25
 
23
- s.files = `git ls-files`.split("\n")
26
+ s.files = `git ls-files`.split("\n") - plugin_files
24
27
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
25
28
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
26
- s.require_paths = ["lib"]
27
- end
29
+ s.require_paths = ['lib']
30
+ end
@@ -9,9 +9,9 @@ describe Metrics::Agent do
9
9
  end
10
10
 
11
11
  it "should add a counter instrument correctly" do
12
- @counter = Metrics::Instruments::Counter.new
12
+ @counter = Metrics::Instruments::Counter.new(:units => "jobs")
13
13
  Metrics::Instruments::Counter.stub!(:new).and_return @counter
14
- @agent.counter(:test_counter).should == @counter
14
+ @agent.counter(:test_counter, "jobs").should == @counter
15
15
  end
16
16
 
17
17
  it "should allow for creating a gauge with a block via #gauge" do
@@ -39,10 +39,19 @@ describe Metrics::Agent do
39
39
  end
40
40
 
41
41
  it "should add a meter instrument correctly" do
42
- @meter = Metrics::Instruments::Meter.new
42
+ @meter = Metrics::Instruments::Meter.new(:units => "hits/sec")
43
43
  Metrics::Instruments::Meter.stub!(:new).and_return @meter
44
44
 
45
- @agent.meter(:test_meter).should == @meter
45
+ @agent.meter(:test_meter, "hits/sec").should == @meter
46
46
  end
47
+
48
+ it "should add a timer instrument correctly" do
49
+ @timer = Metrics::Instruments::Timer.new(:units => "reqs/sec")
50
+ Metrics::Instruments::Timer.stub!(:new).and_return @timer
51
+
52
+ timer = @agent.timer(:test_timer, "reqs/sec").should == @timer
53
+ @timer.units.should == "reqs/sec"
47
54
 
55
+ end
56
+
48
57
  end
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'timecop'
2
3
 
3
4
  describe Metrics::Instruments::Meter do
4
5
  before(:each) do
@@ -26,24 +27,60 @@ describe Metrics::Instruments::Meter do
26
27
 
27
28
  context "A timer with an initial mark of 3 at a 1 second rate unit on a 5 second interval" do
28
29
 
29
- before(:each) do
30
+ before(:each) do
31
+ @start_time = Time.local(2014, 1, 1, 12, 0, 0)
32
+ Timecop.freeze(@start_time)
30
33
  @meter = Metrics::Instruments::Meter.new
31
34
  @meter.mark(3)
32
35
  @meter.tick()
33
36
  end
34
37
 
38
+ after(:each) do
39
+ Timecop.return
40
+ end
41
+
35
42
  def tick_for(seconds)
36
43
  count = ((seconds) / 5).to_i
37
44
  (1..count).each do
38
45
  @meter.tick()
39
46
  end
40
47
  end
41
-
48
+
49
+ context 'When computing mean rate' do
50
+ it 'should have a mean rate of 3/sec one second in' do
51
+ @meter.mark(3)
52
+ Timecop.freeze(Time.now + 1) do
53
+ @meter.mean_rate.should == 3
54
+ end
55
+ end
56
+
57
+ it 'should have a mean rate of 0.003/msec one second in' do
58
+ @meter.mark(3)
59
+ Timecop.freeze(Time.now + 1) do
60
+ @meter.mean_rate(:milliseconds).should == 0.003
61
+ end
62
+ end
63
+
64
+ it 'should have a rate of 180/minute one second in' do
65
+ @meter.mark(3)
66
+ Timecop.freeze(Time.now + 1) do
67
+ @meter.mean_rate(:minutes).should == 180
68
+ end
69
+ end
70
+
71
+ it 'should have a rate of 10800/hour one second in' do
72
+ @meter.mark(3)
73
+ Timecop.freeze(Time.now + 1) do
74
+ @meter.mean_rate(:hours).should == 10800
75
+ end
76
+ end
77
+ end
78
+
42
79
  context "For a 1 minute window" do
43
80
  it "should have a rate of 0.6 events/sec after the first tick" do
44
81
  @meter.one_minute_rate.should == 0.6
45
82
  end
46
-
83
+
47
84
  it "should have a rate of 0.22072766470286553 events/sec after 1 minute" do
48
85
  tick_for(60)
49
86
  @meter.one_minute_rate.should == 0.22072766470286553
@@ -81,7 +81,7 @@ describe Metrics::Instruments::Timer do
81
81
  end
82
82
 
83
83
  it "should accurately calculate the standard deviation of the durations" do
84
- @timer.std_dev.should == 11.401754901476078
84
+ @timer.std_dev.should == 11.40175425099138
85
85
  end
86
86
 
87
87
  it "should accurately calculate percentiles" do
@@ -7,7 +7,7 @@ SimpleCov.start do
7
7
  merge_timeout 3600
8
8
  end
9
9
 
10
- $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
10
+ $:.unshift(File.expand_path('../../lib', __FILE__))
11
11
  require 'ruby-metrics'
12
12
 
13
13
  Metrics.logger = Logger.new(STDERR)
metadata CHANGED
@@ -1,107 +1,134 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ruby-metrics
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 8
8
- - 6
9
- version: 0.8.6
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - John Ewart
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2011-06-02 00:00:00 -07:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2014-05-08 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: json
22
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
23
17
  none: false
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- version: "0"
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.5'
22
+ - - ! '>='
23
+ - !ruby/object:Gem::Version
24
+ version: 1.5.5
30
25
  type: :runtime
31
26
  prerelease: false
32
- version_requirements: *id001
33
- - !ruby/object:Gem::Dependency
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '1.5'
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: 1.5.5
36
+ - !ruby/object:Gem::Dependency
34
37
  name: rspec
35
- requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirement: !ruby/object:Gem::Requirement
36
39
  none: false
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- segments:
41
- - 0
42
- version: "0"
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: '2.14'
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: 2.14.0
43
47
  type: :development
44
48
  prerelease: false
45
- version_requirements: *id002
46
- - !ruby/object:Gem::Dependency
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2.14'
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: 2.14.0
58
+ - !ruby/object:Gem::Dependency
47
59
  name: simplecov
48
- requirement: &id003 !ruby/object:Gem::Requirement
60
+ requirement: !ruby/object:Gem::Requirement
49
61
  none: false
50
- requirements:
51
- - - ">="
52
- - !ruby/object:Gem::Version
53
- segments:
54
- - 0
55
- - 3
56
- - 8
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: '0.3'
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
57
68
  version: 0.3.8
58
69
  type: :development
59
70
  prerelease: false
60
- version_requirements: *id003
61
- - !ruby/object:Gem::Dependency
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: '0.3'
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: 0.3.8
80
+ - !ruby/object:Gem::Dependency
62
81
  name: rack-test
63
- requirement: &id004 !ruby/object:Gem::Requirement
82
+ requirement: !ruby/object:Gem::Requirement
64
83
  none: false
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- segments:
69
- - 0
70
- version: "0"
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: '0.5'
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: 0.5.7
71
91
  type: :development
72
92
  prerelease: false
73
- version_requirements: *id004
74
- description: A Ruby implementation of metrics inspired by @coda's JVM metrics for those of us in Ruby land
75
- email:
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ~>
97
+ - !ruby/object:Gem::Version
98
+ version: '0.5'
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: 0.5.7
102
+ description: A Ruby implementation of metrics inspired by @coda's JVM metrics for
103
+ those of us in Ruby land
104
+ email:
76
105
  - john@johnewart.net
77
106
  executables: []
78
-
79
107
  extensions: []
80
-
81
108
  extra_rdoc_files: []
82
-
83
- files:
109
+ files:
84
110
  - .bundle/config
85
111
  - .gitignore
86
112
  - .rvmrc
113
+ - .travis.yml
114
+ - CHANGELOG.md
87
115
  - Gemfile
88
- - Gemfile.lock
89
116
  - LICENSE
90
117
  - README.md
91
118
  - Rakefile
92
119
  - autotest/discover.rb
93
120
  - examples/counter.rb
94
121
  - examples/gauge.rb
122
+ - examples/gmontest.rb
95
123
  - examples/histogram.rb
96
124
  - examples/integration/rack_endpoint.ru
97
125
  - examples/integration/rack_middleware.ru
98
126
  - examples/integration/webrick.rb
99
127
  - examples/meter.rb
128
+ - examples/opentsdb_reporter.rb
100
129
  - examples/timer.rb
101
130
  - lib/ruby-metrics.rb
102
131
  - lib/ruby-metrics/agent.rb
103
- - lib/ruby-metrics/instruments.rb
104
- - lib/ruby-metrics/instruments/base.rb
105
132
  - lib/ruby-metrics/instruments/counter.rb
106
133
  - lib/ruby-metrics/instruments/gauge.rb
107
134
  - lib/ruby-metrics/instruments/histogram.rb
@@ -112,76 +139,50 @@ files:
112
139
  - lib/ruby-metrics/integration/rack_middleware.rb
113
140
  - lib/ruby-metrics/integration/webrick.rb
114
141
  - lib/ruby-metrics/logging.rb
142
+ - lib/ruby-metrics/reporter.rb
115
143
  - lib/ruby-metrics/statistics/exponential_sample.rb
116
- - lib/ruby-metrics/statistics/sample.rb
117
144
  - lib/ruby-metrics/statistics/uniform_sample.rb
118
145
  - lib/ruby-metrics/time_units.rb
119
146
  - lib/ruby-metrics/version.rb
147
+ - ruby-metrics-ganglia.gemspec
148
+ - ruby-metrics-librato.gemspec
149
+ - ruby-metrics-opentsdb.gemspec
120
150
  - ruby-metrics.gemspec
121
151
  - spec/agent_spec.rb
122
- - spec/instruments/base_spec.rb
123
152
  - spec/instruments/counter_spec.rb
124
153
  - spec/instruments/gauge_spec.rb
125
154
  - spec/instruments/histogram_spec.rb
126
155
  - spec/instruments/meter_spec.rb
127
156
  - spec/instruments/timer_spec.rb
128
- - spec/instruments_spec.rb
129
157
  - spec/integration/rack_endpoint_spec.rb
130
158
  - spec/integration/rack_middleware_spec.rb
131
- - spec/integration/webrick_spec.rb
132
159
  - spec/spec_helper.rb
133
160
  - spec/statistics/exponential_sample_spec.rb
134
- - spec/statistics/sample_spec.rb
135
161
  - spec/statistics/uniform_sample_spec.rb
136
162
  - spec/time_units_spec.rb
137
- has_rdoc: true
138
163
  homepage: https://github.com/johnewart/ruby-metrics
139
- licenses: []
140
-
164
+ licenses:
165
+ - MIT
141
166
  post_install_message:
142
167
  rdoc_options: []
143
-
144
- require_paths:
168
+ require_paths:
145
169
  - lib
146
- required_ruby_version: !ruby/object:Gem::Requirement
170
+ required_ruby_version: !ruby/object:Gem::Requirement
147
171
  none: false
148
- requirements:
149
- - - ">="
150
- - !ruby/object:Gem::Version
151
- hash: -4510992277753869263
152
- segments:
153
- - 0
154
- version: "0"
155
- required_rubygems_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
177
  none: false
157
- requirements:
158
- - - ">="
159
- - !ruby/object:Gem::Version
160
- hash: -4510992277753869263
161
- segments:
162
- - 0
163
- version: "0"
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
164
182
  requirements: []
165
-
166
- rubyforge_project: ruby-metrics
167
- rubygems_version: 1.3.7
183
+ rubyforge_project:
184
+ rubygems_version: 1.8.23.2
168
185
  signing_key:
169
186
  specification_version: 3
170
187
  summary: Metrics for Ruby
171
- test_files:
172
- - spec/agent_spec.rb
173
- - spec/instruments/base_spec.rb
174
- - spec/instruments/counter_spec.rb
175
- - spec/instruments/gauge_spec.rb
176
- - spec/instruments/histogram_spec.rb
177
- - spec/instruments/meter_spec.rb
178
- - spec/instruments/timer_spec.rb
179
- - spec/instruments_spec.rb
180
- - spec/integration/rack_endpoint_spec.rb
181
- - spec/integration/rack_middleware_spec.rb
182
- - spec/integration/webrick_spec.rb
183
- - spec/spec_helper.rb
184
- - spec/statistics/exponential_sample_spec.rb
185
- - spec/statistics/sample_spec.rb
186
- - spec/statistics/uniform_sample_spec.rb
187
- - spec/time_units_spec.rb
188
+ test_files: []