raindrops 0.11.0 → 0.12.0
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/.wrongdoc.yml +2 -0
- data/GIT-VERSION-GEN +1 -1
- data/README +4 -4
- data/ext/raindrops/extconf.rb +12 -1
- data/ext/raindrops/linux_inet_diag.c +14 -10
- data/test/test_watcher.rb +6 -1
- metadata +6 -6
data/.wrongdoc.yml
CHANGED
data/GIT-VERSION-GEN
CHANGED
data/README
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
|
3
3
|
Raindrops is a real-time stats toolkit to show statistics for Rack HTTP
|
4
4
|
servers. It is designed for preforking servers such as Rainbows! and
|
5
|
-
Unicorn, but should support any Rack HTTP server under Ruby
|
6
|
-
Rubinius on platforms supporting POSIX shared memory. It may
|
7
|
-
used as a generic scoreboard for sharing atomic counters across
|
8
|
-
processes.
|
5
|
+
Unicorn, but should support any Rack HTTP server under Ruby 2.0, 1.9,
|
6
|
+
1.8 and Rubinius on platforms supporting POSIX shared memory. It may
|
7
|
+
also be used as a generic scoreboard for sharing atomic counters across
|
8
|
+
multiple processes.
|
9
9
|
|
10
10
|
== Features
|
11
11
|
|
data/ext/raindrops/extconf.rb
CHANGED
@@ -20,6 +20,7 @@ int main(int argc, char * const argv[]) {
|
|
20
20
|
unsigned long i = 0;
|
21
21
|
__sync_lock_test_and_set(&i, 0);
|
22
22
|
__sync_lock_test_and_set(&i, 1);
|
23
|
+
__sync_bool_compare_and_swap(&i, 0, 1);
|
23
24
|
__sync_add_and_fetch(&i, argc);
|
24
25
|
__sync_sub_and_fetch(&i, argc);
|
25
26
|
return 0;
|
@@ -30,7 +31,17 @@ SRC
|
|
30
31
|
$defs.push(format("-DHAVE_GCC_ATOMIC_BUILTINS"))
|
31
32
|
true
|
32
33
|
else
|
33
|
-
|
34
|
+
# some compilers still target 386 by default, but we need at least 486
|
35
|
+
# to run atomic builtins.
|
36
|
+
prev_cflags = $CFLAGS
|
37
|
+
$CFLAGS += " -march=i486 "
|
38
|
+
if try_link(src)
|
39
|
+
$defs.push(format("-DHAVE_GCC_ATOMIC_BUILTINS"))
|
40
|
+
true
|
41
|
+
else
|
42
|
+
prev_cflags = $CFLAGS
|
43
|
+
false
|
44
|
+
end
|
34
45
|
end
|
35
46
|
end or have_header('atomic_ops.h') or abort <<-SRC
|
36
47
|
|
@@ -586,8 +586,6 @@ static VALUE tcp_stats(struct nogvl_args *args, VALUE addr)
|
|
586
586
|
*/
|
587
587
|
static VALUE tcp_listener_stats(int argc, VALUE *argv, VALUE self)
|
588
588
|
{
|
589
|
-
VALUE *ary;
|
590
|
-
long i;
|
591
589
|
VALUE rv = rb_hash_new();
|
592
590
|
struct nogvl_args args;
|
593
591
|
VALUE addrs, sock;
|
@@ -610,20 +608,26 @@ static VALUE tcp_listener_stats(int argc, VALUE *argv, VALUE self)
|
|
610
608
|
case T_STRING:
|
611
609
|
rb_hash_aset(rv, addrs, tcp_stats(&args, addrs));
|
612
610
|
return rv;
|
613
|
-
case T_ARRAY:
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
611
|
+
case T_ARRAY: {
|
612
|
+
long i;
|
613
|
+
long len = RARRAY_LEN(addrs);
|
614
|
+
VALUE cur;
|
615
|
+
|
616
|
+
if (len == 1) {
|
617
|
+
cur = rb_ary_entry(addrs, 0);
|
618
|
+
|
619
|
+
rb_hash_aset(rv, cur, tcp_stats(&args, cur));
|
618
620
|
return rv;
|
619
621
|
}
|
620
|
-
for (;
|
622
|
+
for (i = 0; i < len; i++) {
|
621
623
|
union any_addr check;
|
624
|
+
VALUE cur = rb_ary_entry(addrs, i);
|
622
625
|
|
623
|
-
parse_addr(&check,
|
624
|
-
rb_hash_aset(rv,
|
626
|
+
parse_addr(&check, cur);
|
627
|
+
rb_hash_aset(rv, cur, Qtrue);
|
625
628
|
}
|
626
629
|
/* fall through */
|
630
|
+
}
|
627
631
|
case T_NIL:
|
628
632
|
args.table = st_init_strtable();
|
629
633
|
gen_bytecode_all(&args.iov[2]);
|
data/test/test_watcher.rb
CHANGED
@@ -154,7 +154,12 @@ class TestWatcher < Test::Unit::TestCase
|
|
154
154
|
assert_equal before, headers["X-Last-Peak-At"], headers.inspect
|
155
155
|
|
156
156
|
@ios << @srv.accept
|
157
|
-
|
157
|
+
begin
|
158
|
+
@srv.accept_nonblock
|
159
|
+
assert false, "we should not get here"
|
160
|
+
rescue => e
|
161
|
+
assert_kind_of Errno::EAGAIN, e
|
162
|
+
end
|
158
163
|
sleep 0.1
|
159
164
|
env = @req.class.env_for "/queued/#@addr.txt"
|
160
165
|
status, headers, body = @app.call(env.dup)
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: !binary |-
|
3
3
|
cmFpbmRyb3Bz
|
4
4
|
version: !ruby/object:Gem::Version
|
5
|
-
version: 0.
|
5
|
+
version: 0.12.0
|
6
6
|
prerelease:
|
7
7
|
platform: ruby
|
8
8
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2013-
|
14
|
+
date: 2013-09-02 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: !binary |-
|
@@ -133,13 +133,13 @@ description: ! 'Raindrops is a real-time stats toolkit to show statistics for Ra
|
|
133
133
|
|
134
134
|
servers. It is designed for preforking servers such as Rainbows! and
|
135
135
|
|
136
|
-
Unicorn, but should support any Rack HTTP server under Ruby
|
136
|
+
Unicorn, but should support any Rack HTTP server under Ruby 2.0, 1.9,
|
137
137
|
|
138
|
-
Rubinius on platforms supporting POSIX shared memory. It may
|
138
|
+
1.8 and Rubinius on platforms supporting POSIX shared memory. It may
|
139
139
|
|
140
|
-
used as a generic scoreboard for sharing atomic counters across
|
140
|
+
also be used as a generic scoreboard for sharing atomic counters across
|
141
141
|
|
142
|
-
processes.'
|
142
|
+
multiple processes.'
|
143
143
|
email: !binary |-
|
144
144
|
cmFpbmRyb3BzQGxpYnJlbGlzdC5vcmc=
|
145
145
|
executables: []
|