yam-ruby-metrics 0.8.8 → 0.8.9

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.
@@ -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