afstatsd 0.0.4 → 0.0.5
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/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
|