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