metriks 0.9.9.1 → 0.9.9.2

Sign up to get free protection for your applications and to get access to all the features.
data/lib/metriks/meter.rb CHANGED
@@ -4,25 +4,22 @@ require 'metriks/ewma'
4
4
 
5
5
  module Metriks
6
6
  class Meter
7
+ TICK_INTERVAL = 5.0
8
+
7
9
  def initialize(averager_klass = Metriks::EWMA)
8
10
  @count = Atomic.new(0)
9
- @start_time = Time.now
11
+ @start_time = Time.now.to_f
12
+ @last_tick = Atomic.new(@start_time)
10
13
 
11
14
  @m1_rate = averager_klass.new_m1
12
15
  @m5_rate = averager_klass.new_m5
13
16
  @m15_rate = averager_klass.new_m15
14
-
15
- @thread = Thread.new do
16
- loop do
17
- sleep averager_klass::INTERVAL
18
- tick
19
- end
20
- end
21
17
  end
22
18
 
23
19
  def clear
24
20
  @count.value = 0
25
- @start_time = Time.now
21
+ @start_time = Time.now.to_f
22
+ @last_tick.value = @start_time
26
23
  @m1_rate.clear
27
24
  @m5_rate.clear
28
25
  @m15_rate.clear
@@ -34,7 +31,20 @@ module Metriks
34
31
  @m15_rate.tick
35
32
  end
36
33
 
34
+ def tick_if_nessesary
35
+ old_tick = @last_tick.value
36
+ new_tick = Time.new.to_f
37
+ age = new_tick - old_tick
38
+ if age > TICK_INTERVAL && @last_tick.compare_and_swap(old_tick, new_tick)
39
+ required_ticks = age / TICK_INTERVAL
40
+ required_ticks.to_i.times do
41
+ tick
42
+ end
43
+ end
44
+ end
45
+
37
46
  def mark(val = 1)
47
+ tick_if_nessesary
38
48
  @count.update { |v| v + val }
39
49
  @m1_rate.update(val)
40
50
  @m5_rate.update(val)
@@ -46,14 +56,17 @@ module Metriks
46
56
  end
47
57
 
48
58
  def one_minute_rate
59
+ tick_if_nessesary
49
60
  @m1_rate.rate
50
61
  end
51
62
 
52
63
  def five_minute_rate
64
+ tick_if_nessesary
53
65
  @m5_rate.rate
54
66
  end
55
67
 
56
68
  def fifteen_minute_rate
69
+ tick_if_nessesary
57
70
  @m15_rate.rate
58
71
  end
59
72
 
@@ -61,13 +74,12 @@ module Metriks
61
74
  if count == 0
62
75
  return 0.0
63
76
  else
64
- elapsed = Time.now - @start_time
77
+ elapsed = Time.now.to_f - @start_time
65
78
  count / elapsed
66
79
  end
67
80
  end
68
81
 
69
82
  def stop
70
- @thread.kill
71
83
  end
72
84
  end
73
85
  end
data/lib/metriks.rb CHANGED
@@ -1,6 +1,6 @@
1
1
 
2
2
  module Metriks
3
- VERSION = '0.9.9.1'
3
+ VERSION = '0.9.9.2'
4
4
 
5
5
  def self.get(name)
6
6
  Metriks::Registry.default.get(name)
data/metriks.gemspec CHANGED
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
13
13
  ## If your rubyforge_project name is different, then edit it and comment out
14
14
  ## the sub! line in the Rakefile
15
15
  s.name = 'metriks'
16
- s.version = '0.9.9.1'
17
- s.date = '2012-07-02'
16
+ s.version = '0.9.9.2'
17
+ s.date = '2012-10-23'
18
18
 
19
19
  ## Make sure your summary is short. The description may be as long
20
20
  ## as you like.
metadata CHANGED
@@ -6,8 +6,8 @@ version: !ruby/object:Gem::Version
6
6
  - 0
7
7
  - 9
8
8
  - 9
9
- - 1
10
- version: 0.9.9.1
9
+ - 2
10
+ version: 0.9.9.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Eric Lindvall
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-07-02 00:00:00 -07:00
18
+ date: 2012-10-23 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency