ruby-metrics 0.8.6 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
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: []