afstatsd 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/afstatsd/statsd_aggregator.rb +41 -4
- 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
|
-
|
33
|
-
|
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
|
+
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-
|
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
|