raindrops 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/GIT-VERSION-GEN +1 -1
- data/GNUmakefile +28 -3
- data/README +14 -1
- data/examples/config.ru +5 -0
- data/ext/raindrops/linux_inet_diag.c +1 -1
- data/lib/raindrops.rb +2 -2
- data/lib/raindrops/linux.rb +7 -8
- data/lib/raindrops/middleware.rb +8 -4
- data/raindrops.gemspec +2 -2
- data/test/test_linux.rb +2 -2
- data/test/test_raindrops.rb +1 -1
- metadata +6 -5
data/GIT-VERSION-GEN
CHANGED
data/GNUmakefile
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
all::
|
3
3
|
RUBY = ruby
|
4
4
|
RAKE = rake
|
5
|
+
RSYNC = rsync
|
5
6
|
GIT_URL = git://git.bogomips.org/raindrops.git
|
6
7
|
|
7
8
|
GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
|
@@ -49,7 +50,10 @@ NEWS: GIT-VERSION-FILE
|
|
49
50
|
$(RAKE) -s news_rdoc > $@+
|
50
51
|
mv $@+ $@
|
51
52
|
|
52
|
-
|
53
|
+
latest: NEWS
|
54
|
+
@awk 'BEGIN{RS="=== ";ORS=""}NR==2{sub(/\n$$/,"");print RS""$$0 }' $<
|
55
|
+
|
56
|
+
SINCE = 0.1.0
|
53
57
|
ChangeLog: LOG_VERSION = \
|
54
58
|
$(shell git rev-parse -q "$(GIT_VERSION)" >/dev/null 2>&1 && \
|
55
59
|
echo $(GIT_VERSION) || git describe)
|
@@ -67,10 +71,10 @@ cgit_atom := http://git.bogomips.org/cgit/raindrops.git/atom/?h=master
|
|
67
71
|
atom = <link rel="alternate" title="Atom feed" href="$(1)" \
|
68
72
|
type="application/atom+xml"/>
|
69
73
|
|
70
|
-
# using rdoc 2.
|
74
|
+
# using rdoc 2.5.x
|
71
75
|
doc: .document NEWS ChangeLog
|
72
76
|
for i in $(man1_bins); do > $$i; done
|
73
|
-
rdoc -
|
77
|
+
rdoc -a -t "$(shell sed -ne '1s/^= //p' README)"
|
74
78
|
install -m644 COPYING doc/COPYING
|
75
79
|
install -m644 $(shell grep '^[A-Z]' .document) doc/
|
76
80
|
cd doc && for i in $(base_bins); do \
|
@@ -169,4 +173,25 @@ test-unit: $(test_units)
|
|
169
173
|
$(test_units): build
|
170
174
|
$(RUBY) -I lib:ext/raindrops $@
|
171
175
|
|
176
|
+
# this requires GNU coreutils variants
|
177
|
+
publish_doc:
|
178
|
+
-git set-file-times
|
179
|
+
$(RM) -r doc ChangeLog NEWS
|
180
|
+
$(MAKE) doc LOG_VERSION=$(shell git tag -l | tail -1)
|
181
|
+
$(MAKE) -s latest > doc/LATEST
|
182
|
+
find doc/images doc/js -type f | \
|
183
|
+
TZ=UTC xargs touch -d '1970-01-01 00:00:00' doc/rdoc.css
|
184
|
+
$(MAKE) doc_gz
|
185
|
+
chmod 644 $$(find doc -type f)
|
186
|
+
$(RSYNC) -av doc/ raindrops.bogomips.org:/srv/raindrops/
|
187
|
+
git ls-files | xargs touch
|
188
|
+
|
189
|
+
# Create gzip variants of the same timestamp as the original so nginx
|
190
|
+
# "gzip_static on" can serve the gzipped versions directly.
|
191
|
+
doc_gz: docs = $(shell find doc -type f ! -regex '^.*\.\(gif\|jpg\|png\|gz\)$$')
|
192
|
+
doc_gz:
|
193
|
+
touch doc/NEWS.atom.xml -d "$$(awk 'NR==1{print $$4,$$5,$$6}' NEWS)"
|
194
|
+
for i in $(docs); do \
|
195
|
+
gzip --rsyncable -9 < $$i > $$i.gz; touch -r $$i $$i.gz; done
|
196
|
+
|
172
197
|
.PHONY: .FORCE-GIT-VERSION-FILE doc manifest man test $(test_units)
|
data/README
CHANGED
@@ -87,7 +87,11 @@ combination of TCP or Unix domain socket names:
|
|
87
87
|
|
88
88
|
use Raindrops::Middleware, :listeners => %w(0.0.0.0:80 /tmp/.sock)
|
89
89
|
|
90
|
-
See the tests/ and examples/ directory for more examples
|
90
|
+
See the tests/ and examples/ directory for more examples.
|
91
|
+
|
92
|
+
If you're running Unicorn 0.98.0 or later, you don't have to pass in
|
93
|
+
the :listeners array, Raindrops will automatically detect the listeners
|
94
|
+
used by Unicorn master process.
|
91
95
|
|
92
96
|
== Development
|
93
97
|
|
@@ -115,3 +119,12 @@ don't email the git mailing list or maintainer with raindrops patches.
|
|
115
119
|
|
116
120
|
All feedback (bug reports, user/development discussion, patches, pull
|
117
121
|
requests) go to the mailing list: mailto:raindrops@librelist.com
|
122
|
+
|
123
|
+
The mailing list is mirrored to Gmane, all information about the
|
124
|
+
group is here:
|
125
|
+
|
126
|
+
http://gmane.org/info.php?group=gmane.comp.lang.ruby.raindrops.general
|
127
|
+
|
128
|
+
Mailing list archives in mbox format may be downloaded here:
|
129
|
+
|
130
|
+
http://raindrops.bogomips.org/archives/
|
data/examples/config.ru
ADDED
data/lib/raindrops.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# -*- encoding: binary -*-
|
2
2
|
class Raindrops
|
3
3
|
|
4
|
-
# Raindrops is currently at version 0.
|
5
|
-
VERSION = '0.
|
4
|
+
# Raindrops is currently at version 0.2.0
|
5
|
+
VERSION = '0.2.0'
|
6
6
|
|
7
7
|
# Used to represent the number of +active+ and +queued+ sockets for
|
8
8
|
# a single listen socket across all threads and processes on a
|
data/lib/raindrops/linux.rb
CHANGED
@@ -5,7 +5,8 @@ module Linux
|
|
5
5
|
# The standard proc path for active UNIX domain sockets, feel free to call
|
6
6
|
# String#replace on this if your /proc is mounted in a non-standard location
|
7
7
|
# for whatever reason
|
8
|
-
|
8
|
+
PROC_NET_UNIX_ARGS = %w(/proc/net/unix)
|
9
|
+
defined?(::Encoding) and PROC_NET_UNIX_ARGS.push({ :encoding => "binary" })
|
9
10
|
|
10
11
|
# Get ListenStats from an array of +paths+
|
11
12
|
#
|
@@ -36,13 +37,11 @@ module Linux
|
|
36
37
|
paths = / 00000000 \d+ (\d+)\s+\d+ (#{paths.join('|')})$/n
|
37
38
|
|
38
39
|
# no point in pread since we can't stat for size on this file
|
39
|
-
File.
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
when 3 then rv[path].active += 1
|
45
|
-
end
|
40
|
+
File.read(*PROC_NET_UNIX_ARGS).scan(paths) do |s|
|
41
|
+
path = s.last
|
42
|
+
case s.first.to_i
|
43
|
+
when 2 then rv[path].queued += 1
|
44
|
+
when 3 then rv[path].active += 1
|
46
45
|
end
|
47
46
|
end
|
48
47
|
|
data/lib/raindrops/middleware.rb
CHANGED
@@ -13,7 +13,12 @@ class Middleware < ::Struct.new(:app, :stats, :path, :tcp, :unix)
|
|
13
13
|
|
14
14
|
def initialize(app, opts = {})
|
15
15
|
super(app, opts[:stats] || Stats.new, opts[:path] || "/_raindrops")
|
16
|
-
|
16
|
+
tmp = opts[:listeners]
|
17
|
+
if tmp.nil? && defined?(Unicorn) && Unicorn.respond_to?(:listener_names)
|
18
|
+
tmp = Unicorn.listener_names
|
19
|
+
end
|
20
|
+
|
21
|
+
if tmp
|
17
22
|
self.tcp = tmp.grep(/\A[^:]+:\d+\z/)
|
18
23
|
self.unix = tmp.grep(%r{\A/})
|
19
24
|
self.tcp = nil if tcp.empty?
|
@@ -21,7 +26,7 @@ class Middleware < ::Struct.new(:app, :stats, :path, :tcp, :unix)
|
|
21
26
|
end
|
22
27
|
end
|
23
28
|
|
24
|
-
# standard Rack
|
29
|
+
# standard Rack endpoint
|
25
30
|
def call(env)
|
26
31
|
env[PATH_INFO] == path ? stats_response : dup._call(env)
|
27
32
|
end
|
@@ -45,8 +50,7 @@ class Middleware < ::Struct.new(:app, :stats, :path, :tcp, :unix)
|
|
45
50
|
# the Rack server should call this after #each (usually ensure-d)
|
46
51
|
def close
|
47
52
|
stats.decr_writing
|
48
|
-
|
49
|
-
app.close if app.respond_to?(:close)
|
53
|
+
app.close if app.respond_to?(:close)
|
50
54
|
end
|
51
55
|
|
52
56
|
def stats_response
|
data/raindrops.gemspec
CHANGED
@@ -27,10 +27,10 @@ Gem::Specification.new do |s|
|
|
27
27
|
|
28
28
|
s.files = manifest
|
29
29
|
s.homepage = %q{http://raindrops.bogomips.org/}
|
30
|
-
s.summary = %q{real-time stats for Rack servers}
|
30
|
+
s.summary = %q{real-time stats for preforking Rack servers}
|
31
31
|
s.rdoc_options = [ "-Na", "-t", "raindrops - #{s.summary}" ]
|
32
32
|
s.require_paths = %w(lib)
|
33
|
-
s.rubyforge_project = %q{
|
33
|
+
s.rubyforge_project = %q{rainbows}
|
34
34
|
|
35
35
|
s.test_files = test_files
|
36
36
|
|
data/test/test_linux.rb
CHANGED
@@ -138,7 +138,7 @@ class TestLinux < Test::Unit::TestCase
|
|
138
138
|
fork do
|
139
139
|
rda.close
|
140
140
|
wrb.close
|
141
|
-
socks = nr_sock.times.map { s.accept }
|
141
|
+
socks = (1..nr_sock).times.map { s.accept }
|
142
142
|
wra.syswrite('.')
|
143
143
|
wra.close
|
144
144
|
rdb.sysread(1) # wait for parent to nuke us
|
@@ -149,7 +149,7 @@ class TestLinux < Test::Unit::TestCase
|
|
149
149
|
fork do
|
150
150
|
rda.close
|
151
151
|
wrb.close
|
152
|
-
socks = nr_sock.times.map { TCPSocket.new(TEST_ADDR, port) }
|
152
|
+
socks = (1..nr_sock).times.map { TCPSocket.new(TEST_ADDR, port) }
|
153
153
|
wra.syswrite('.')
|
154
154
|
wra.close
|
155
155
|
rdb.sysread(1) # wait for parent to nuke us
|
data/test/test_raindrops.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: raindrops
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- raindrops hackers
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-05-05 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -48,6 +48,7 @@ files:
|
|
48
48
|
- README
|
49
49
|
- Rakefile
|
50
50
|
- TODO
|
51
|
+
- examples/config.ru
|
51
52
|
- examples/linux-tcp-listener-stats.rb
|
52
53
|
- ext/raindrops/extconf.rb
|
53
54
|
- ext/raindrops/linux_inet_diag.c
|
@@ -72,7 +73,7 @@ post_install_message:
|
|
72
73
|
rdoc_options:
|
73
74
|
- -Na
|
74
75
|
- -t
|
75
|
-
- raindrops - real-time stats for Rack servers
|
76
|
+
- raindrops - real-time stats for preforking Rack servers
|
76
77
|
require_paths:
|
77
78
|
- lib
|
78
79
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -89,11 +90,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
89
90
|
version:
|
90
91
|
requirements: []
|
91
92
|
|
92
|
-
rubyforge_project:
|
93
|
+
rubyforge_project: rainbows
|
93
94
|
rubygems_version: 1.3.5
|
94
95
|
signing_key:
|
95
96
|
specification_version: 3
|
96
|
-
summary: real-time stats for Rack servers
|
97
|
+
summary: real-time stats for preforking Rack servers
|
97
98
|
test_files:
|
98
99
|
- test/test_linux.rb
|
99
100
|
- test/test_linux_middleware.rb
|