afstatsd 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/afstatsd/statsd_aggregator.rb +41 -4
  2. metadata +2 -2
@@ -19,6 +19,8 @@
19
19
  @right_buffers = {} # each buffer group is a hash
20
20
  @rbufs = @left_buffers # buffer group currently being read from
21
21
  @wbufs = @right_buffers # buffer group currently being written to
22
+
23
+ # register for at_exit call back, so we can flush our buffers
22
24
  at_exit do
23
25
  if @running
24
26
  flush_buffers
@@ -26,11 +28,42 @@
26
28
  flush_buffers
27
29
  end
28
30
  end
31
+
32
+ # in Rails, under PhusionPassener, we may be spun up in a new process,
33
+ # so we have to restart our background thread.
34
+ if defined?(PhusionPassenger)
35
+ PhusionPassenger.on_event(:starting_worker_process) do |forked|
36
+ if forked
37
+ Statsd.logger.debug {"PHUSION Forked! pid:#{Process.pid}"} if Statsd.logger
38
+ self.start(nil, true) if @running
39
+ end
40
+ end
41
+ end
42
+
43
+ if RUBY_PLATFORM =~ /linux/i
44
+ Signal.trap("QUIT") {flush_on_signal("QUIT")}
45
+ Signal.trap("HUP") {flush_on_signal("HUP")}
46
+ Signal.trap("STOP") {flush_on_signal("STOP")}
47
+ Signal.trap("TERM") {flush_on_signal("TERM")}
48
+ Signal.trap("EXIT") {flush_on_signal("EXIT")}
49
+ Signal.trap("KILL") {flush_on_signal("KILL")}
50
+ Signal.trap("ABRT") {flush_on_signal("ABRT")}
51
+ end
52
+
53
+ def flush_on_signal(sig)
54
+ Statsd.logger.debug {"Got signal #{sig} pid:#{Process.pid}"} if Statsd.logger
55
+ if @running
56
+ flush_buffers
57
+ swap_buffers
58
+ flush_buffers
59
+ end
60
+ end
29
61
  end
30
62
 
31
- def start(transport)
32
- @transport = transport
33
- return if @running # already started
63
+ def start(transport, force_restart=false)
64
+ Statsd.logger.debug {"START pid:#{Process.pid}"} if Statsd.logger
65
+ @transport = transport if force_restart==false
66
+ return if @running if force_restart==false # already started
34
67
  # Spin up a thread to periodically send the aggregated stats.
35
68
  # Divide the interval in half to allow other threads to finish
36
69
  # their writes after we swap, and before we start reading.
@@ -69,6 +102,7 @@
69
102
  def add(metric)
70
103
  # We should have a write buffer assigned to our thread.
71
104
  # Create one if not.
105
+ #Statsd.logger.debug {"ADD pid:#{Process.pid}"} if Statsd.logger
72
106
  unless write_buffer = @wbufs[Thread.current]
73
107
  #puts "Thread #{Thread.current}: creating write_buffer"
74
108
  write_buffer = {}
@@ -94,6 +128,7 @@
94
128
  # so any writes in progress after the swap will have time to complete.
95
129
 
96
130
  def swap_buffers
131
+ #Statsd.logger.debug {"SWAP pid:#{Process.pid}"} if Statsd.logger
97
132
  if @rbufs == @left_buffers
98
133
  @rbufs = @right_buffers
99
134
  @wbufs = @left_buffers
@@ -104,6 +139,7 @@
104
139
  end
105
140
 
106
141
  def flush_buffers
142
+ # Statsd.logger.debug {"FLUSH pid:#{Process.pid}"} if Statsd.logger
107
143
  # Each thread has it's own read buffer. If it's empty, the
108
144
  # thread might be dead. We'll delete it's read buffer.
109
145
  @rbufs.delete_if { |k, rb| rb.empty? }
@@ -125,8 +161,9 @@
125
161
  end
126
162
  #puts "nothing to send" if send_buffer.empty?
127
163
  send_buffer.each_value do |metric|
164
+ #Statsd.logger.debug {" transporting metric #{metric.to_s}"} if Statsd.logger
128
165
  @transport.call(metric)
129
166
  end
130
167
  end
131
168
 
132
- end # class StatsdAggregator
169
+ end # class StatsdAggregator
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: afstatsd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-03 00:00:00.000000000 Z
12
+ date: 2013-07-22 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A StatsD library with AppFirst Extensions
15
15
  email: clark@appfirst.com