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.
- data/lib/ruby-metrics/agent.rb +5 -3
- data/lib/ruby-metrics/instruments/meter.rb +12 -10
- data/lib/ruby-metrics/instruments/post_process_meter.rb +29 -0
- data/lib/ruby-metrics/instruments/post_process_timer.rb +30 -0
- data/lib/ruby-metrics/instruments/timer.rb +1 -1
- data/lib/ruby-metrics/version.rb +1 -1
- metadata +6 -4
data/lib/ruby-metrics/agent.rb
CHANGED
@@ -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
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
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
|
+
|
data/lib/ruby-metrics/version.rb
CHANGED
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:
|
4
|
+
hash: 45
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 8
|
9
|
-
-
|
10
|
-
version: 0.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-
|
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
|