yam-ruby-metrics 0.8.8 → 0.8.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,9 +4,11 @@ require 'ruby-metrics/time_units'
4
4
 
5
5
  require 'ruby-metrics/instruments/counter'
6
6
  require 'ruby-metrics/instruments/meter'
7
+ require 'ruby-metrics/instruments/post_process_meter'
7
8
  require 'ruby-metrics/instruments/gauge'
8
9
  require 'ruby-metrics/instruments/histogram'
9
10
  require 'ruby-metrics/instruments/timer'
11
+ require 'ruby-metrics/instruments/post_process_timer'
10
12
 
11
13
  require 'ruby-metrics/integration'
12
14
 
@@ -28,8 +30,8 @@ module Metrics
28
30
  @instruments[name] ||= Instruments::Counter.new
29
31
  end
30
32
 
31
- def meter(name)
32
- @instruments[name] ||= Instruments::Meter.new
33
+ def meter(name, options = {})
34
+ @instruments[name] ||= options[:post_process] ? Instruments::PostProcessMeter.new(options) : Instruments::Meter.new(options)
33
35
  end
34
36
 
35
37
  def gauge(name, &block)
@@ -37,7 +39,7 @@ module Metrics
37
39
  end
38
40
 
39
41
  def timer(name, options = {})
40
- @instruments[name] ||= Instruments::Timer.new(options)
42
+ @instruments[name] ||= options[:post_process] ? Instruments::PostProcessTimer.new(options) : Instruments::Timer.new(options)
41
43
  end
42
44
 
43
45
  def uniform_histogram(name)
@@ -21,16 +21,18 @@ module Metrics
21
21
  @initialized = false
22
22
  @start_time = Time.now.to_f
23
23
 
24
- @timer_thread = Thread.new do
25
- begin
26
- loop do
27
- self.tick
28
- sleep(INTERVAL)
29
- end
30
- rescue Exception => e
31
- logger.error "Error in timer thread: #{e.class.name}: #{e}\n #{e.backtrace.join("\n ")}"
32
- end # begin
33
- end # thread new
24
+ if !options[:no_thread]
25
+ @timer_thread = Thread.new do
26
+ begin
27
+ loop do
28
+ self.tick
29
+ sleep(INTERVAL)
30
+ end
31
+ rescue Exception => e
32
+ logger.error "Error in timer thread: #{e.class.name}: #{e}\n #{e.backtrace.join("\n ")}"
33
+ end # begin
34
+ end # thread new
35
+ end
34
36
 
35
37
  end
36
38
 
@@ -0,0 +1,29 @@
1
+ require 'ruby-metrics/time_units'
2
+
3
+ module Metrics
4
+ module Instruments
5
+ class PostProcessMeter < Meter
6
+ def initialize
7
+ super(:no_thread => true)
8
+ end
9
+
10
+ def mark(timestamp, count = 1)
11
+ ticks = interval_difference(timestamp)
12
+ if ticks > 0
13
+ ticks.times { self.tick }
14
+ @interval_start = @interval_start + INTERVAL * ticks
15
+ end
16
+ @count += count
17
+ end
18
+
19
+ def interval_difference(timestamp)
20
+ if @interval_start
21
+ ((timestamp - @interval_start) % INTERVAL).to_i
22
+ else
23
+ @interval_start = timestamp
24
+ 0
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,30 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'time_units')
2
+
3
+ module Metrics
4
+ module Instruments
5
+ class PostProcessTimer < Timer
6
+ def initialize(options = {})
7
+ @meter = PostProcessMeter.new
8
+ @histogram = ExponentialHistogram.new
9
+
10
+ @duration_unit = options[:duration_unit] || :seconds
11
+ @rate_unit = options[:rate_unit] || :seconds
12
+
13
+ clear
14
+ end
15
+
16
+ def update(timestamp, duration, unit)
17
+ mult = convert_to_ns(1, unit)
18
+ self.update_timer(timestamp, duration * mult)
19
+ end
20
+
21
+ def update_timer(timestamp, duration)
22
+ if duration >= 0
23
+ @histogram.update(duration)
24
+ @meter.mark timestamp
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+
@@ -102,7 +102,7 @@ module Metrics
102
102
  percentiles = self.quantiles([0.5, 0.75, 0.95, 0.98, 0.99, 0.999])
103
103
  {
104
104
  :type => 'timer',
105
- :rates => {
105
+ :rate => {
106
106
  :count => count,
107
107
  :m1 => one_minute_rate,
108
108
  :m5 => five_minute_rate,
@@ -1,3 +1,3 @@
1
1
  module Metrics
2
- VERSION = "0.8.8"
2
+ VERSION = "0.8.9"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yam-ruby-metrics
3
3
  version: !ruby/object:Gem::Version
4
- hash: 47
4
+ hash: 45
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 8
9
- - 8
10
- version: 0.8.8
9
+ - 9
10
+ version: 0.8.9
11
11
  platform: ruby
12
12
  authors:
13
13
  - John Ewart
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-11-16 00:00:00 -08:00
18
+ date: 2011-11-18 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -110,6 +110,8 @@ files:
110
110
  - lib/ruby-metrics/instruments/gauge.rb
111
111
  - lib/ruby-metrics/instruments/histogram.rb
112
112
  - lib/ruby-metrics/instruments/meter.rb
113
+ - lib/ruby-metrics/instruments/post_process_meter.rb
114
+ - lib/ruby-metrics/instruments/post_process_timer.rb
113
115
  - lib/ruby-metrics/instruments/timer.rb
114
116
  - lib/ruby-metrics/integration.rb
115
117
  - lib/ruby-metrics/integration/rack_endpoint.rb