metriks 0.9.9.1 → 0.9.9.2

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