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