raindrops 0.15.0 → 0.19.2
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.
- checksums.yaml +5 -5
- data/.document +1 -1
- data/.gitattributes +4 -0
- data/.olddoc.yml +12 -6
- data/GIT-VERSION-GEN +1 -1
- data/GNUmakefile +1 -1
- data/LICENSE +3 -3
- data/README +23 -19
- data/TODO +1 -0
- data/examples/linux-listener-stats.rb +1 -2
- data/examples/watcher_demo.ru +1 -1
- data/examples/yahns.conf.rb +30 -0
- data/examples/zbatery.conf.rb +4 -1
- data/ext/raindrops/extconf.rb +107 -3
- data/ext/raindrops/linux_inet_diag.c +72 -88
- data/ext/raindrops/raindrops.c +28 -7
- data/ext/raindrops/tcp_info.c +245 -0
- data/lib/raindrops.rb +1 -1
- data/lib/raindrops/aggregate.rb +1 -1
- data/lib/raindrops/aggregate/last_data_recv.rb +1 -5
- data/lib/raindrops/aggregate/pmq.rb +23 -17
- data/lib/raindrops/linux.rb +5 -6
- data/lib/raindrops/middleware.rb +4 -6
- data/lib/raindrops/middleware/proxy.rb +2 -2
- data/lib/raindrops/watcher.rb +13 -13
- data/pkg.mk +4 -3
- data/raindrops.gemspec +12 -17
- data/test/ipv6_enabled.rb +4 -4
- data/test/test_aggregate_pmq.rb +1 -1
- data/test/test_inet_diag_socket.rb +1 -1
- data/test/test_last_data_recv_unicorn.rb +1 -1
- data/test/test_linux.rb +10 -2
- data/test/test_linux_all_tcp_listen_stats_leak.rb +2 -2
- data/test/test_raindrops.rb +1 -1
- data/test/{test_linux_tcp_info.rb → test_tcp_info.rb} +34 -14
- data/test/test_watcher.rb +15 -10
- metadata +18 -69
- data/ext/raindrops/linux_tcp_info.c +0 -173
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: raindrops
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.19.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- raindrops hackers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aggregate
|
@@ -38,26 +38,6 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: io-extra
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '1.2'
|
48
|
-
- - ">="
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
version: 1.2.3
|
51
|
-
type: :development
|
52
|
-
prerelease: false
|
53
|
-
version_requirements: !ruby/object:Gem::Requirement
|
54
|
-
requirements:
|
55
|
-
- - "~>"
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version: '1.2'
|
58
|
-
- - ">="
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: 1.2.3
|
61
41
|
- !ruby/object:Gem::Dependency
|
62
42
|
name: posix_mq
|
63
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -76,51 +56,29 @@ dependencies:
|
|
76
56
|
name: rack
|
77
57
|
requirement: !ruby/object:Gem::Requirement
|
78
58
|
requirements:
|
79
|
-
- - "
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version: '1.2'
|
82
|
-
type: :development
|
83
|
-
prerelease: false
|
84
|
-
version_requirements: !ruby/object:Gem::Requirement
|
85
|
-
requirements:
|
86
|
-
- - "~>"
|
59
|
+
- - ">="
|
87
60
|
- !ruby/object:Gem::Version
|
88
61
|
version: '1.2'
|
89
|
-
-
|
90
|
-
name: unicorn
|
91
|
-
requirement: !ruby/object:Gem::Requirement
|
92
|
-
requirements:
|
93
|
-
- - ">="
|
62
|
+
- - "<"
|
94
63
|
- !ruby/object:Gem::Version
|
95
|
-
version: '0
|
64
|
+
version: '3.0'
|
96
65
|
type: :development
|
97
66
|
prerelease: false
|
98
67
|
version_requirements: !ruby/object:Gem::Requirement
|
99
68
|
requirements:
|
100
69
|
- - ">="
|
101
70
|
- !ruby/object:Gem::Version
|
102
|
-
version: '
|
103
|
-
-
|
104
|
-
name: olddoc
|
105
|
-
requirement: !ruby/object:Gem::Requirement
|
106
|
-
requirements:
|
107
|
-
- - "~>"
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '1.0'
|
110
|
-
type: :development
|
111
|
-
prerelease: false
|
112
|
-
version_requirements: !ruby/object:Gem::Requirement
|
113
|
-
requirements:
|
114
|
-
- - "~>"
|
71
|
+
version: '1.2'
|
72
|
+
- - "<"
|
115
73
|
- !ruby/object:Gem::Version
|
116
|
-
version: '
|
74
|
+
version: '3.0'
|
117
75
|
description: |-
|
118
76
|
raindrops is a real-time stats toolkit to show statistics for Rack HTTP
|
119
77
|
servers. It is designed for preforking servers such as unicorn, but
|
120
78
|
should support any Rack HTTP server on platforms supporting POSIX shared
|
121
79
|
memory. It may also be used as a generic scoreboard for sharing atomic
|
122
80
|
counters across multiple processes.
|
123
|
-
email: raindrops@
|
81
|
+
email: raindrops-public@yhbt.net
|
124
82
|
executables: []
|
125
83
|
extensions:
|
126
84
|
- ext/raindrops/extconf.rb
|
@@ -128,21 +86,12 @@ extra_rdoc_files:
|
|
128
86
|
- README
|
129
87
|
- LICENSE
|
130
88
|
- NEWS
|
131
|
-
- lib/raindrops.rb
|
132
|
-
- lib/raindrops/aggregate.rb
|
133
|
-
- lib/raindrops/aggregate/last_data_recv.rb
|
134
|
-
- lib/raindrops/aggregate/pmq.rb
|
135
|
-
- lib/raindrops/last_data_recv.rb
|
136
|
-
- lib/raindrops/linux.rb
|
137
|
-
- lib/raindrops/middleware.rb
|
138
|
-
- lib/raindrops/middleware/proxy.rb
|
139
|
-
- lib/raindrops/struct.rb
|
140
|
-
- lib/raindrops/watcher.rb
|
141
89
|
- ext/raindrops/raindrops.c
|
142
90
|
- ext/raindrops/linux_inet_diag.c
|
143
|
-
- ext/raindrops/
|
91
|
+
- ext/raindrops/tcp_info.c
|
144
92
|
files:
|
145
93
|
- ".document"
|
94
|
+
- ".gitattributes"
|
146
95
|
- ".gitignore"
|
147
96
|
- ".manifest"
|
148
97
|
- ".olddoc.yml"
|
@@ -161,13 +110,14 @@ files:
|
|
161
110
|
- examples/middleware.ru
|
162
111
|
- examples/watcher.ru
|
163
112
|
- examples/watcher_demo.ru
|
113
|
+
- examples/yahns.conf.rb
|
164
114
|
- examples/zbatery.conf.rb
|
165
115
|
- ext/raindrops/extconf.rb
|
166
116
|
- ext/raindrops/linux_inet_diag.c
|
167
|
-
- ext/raindrops/linux_tcp_info.c
|
168
117
|
- ext/raindrops/my_fileno.h
|
169
118
|
- ext/raindrops/raindrops.c
|
170
119
|
- ext/raindrops/raindrops_atomic.h
|
120
|
+
- ext/raindrops/tcp_info.c
|
171
121
|
- lib/raindrops.rb
|
172
122
|
- lib/raindrops/aggregate.rb
|
173
123
|
- lib/raindrops/aggregate/last_data_recv.rb
|
@@ -191,15 +141,15 @@ files:
|
|
191
141
|
- test/test_linux_all_tcp_listen_stats_leak.rb
|
192
142
|
- test/test_linux_ipv6.rb
|
193
143
|
- test/test_linux_middleware.rb
|
194
|
-
- test/test_linux_tcp_info.rb
|
195
144
|
- test/test_middleware.rb
|
196
145
|
- test/test_middleware_unicorn.rb
|
197
146
|
- test/test_middleware_unicorn_ipv6.rb
|
198
147
|
- test/test_raindrops.rb
|
199
148
|
- test/test_raindrops_gc.rb
|
200
149
|
- test/test_struct.rb
|
150
|
+
- test/test_tcp_info.rb
|
201
151
|
- test/test_watcher.rb
|
202
|
-
homepage:
|
152
|
+
homepage: https://yhbt.net/raindrops/
|
203
153
|
licenses:
|
204
154
|
- LGPL-2.1+
|
205
155
|
metadata: {}
|
@@ -211,15 +161,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
211
161
|
requirements:
|
212
162
|
- - ">="
|
213
163
|
- !ruby/object:Gem::Version
|
214
|
-
version:
|
164
|
+
version: 1.9.3
|
215
165
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
216
166
|
requirements:
|
217
167
|
- - ">="
|
218
168
|
- !ruby/object:Gem::Version
|
219
169
|
version: '0'
|
220
170
|
requirements: []
|
221
|
-
|
222
|
-
rubygems_version: 2.5.0
|
171
|
+
rubygems_version: 3.0.2
|
223
172
|
signing_key:
|
224
173
|
specification_version: 4
|
225
174
|
summary: real-time stats for preforking Rack servers
|
@@ -232,11 +181,11 @@ test_files:
|
|
232
181
|
- test/test_linux_all_tcp_listen_stats_leak.rb
|
233
182
|
- test/test_linux_ipv6.rb
|
234
183
|
- test/test_linux_middleware.rb
|
235
|
-
- test/test_linux_tcp_info.rb
|
236
184
|
- test/test_middleware.rb
|
237
185
|
- test/test_middleware_unicorn.rb
|
238
186
|
- test/test_middleware_unicorn_ipv6.rb
|
239
187
|
- test/test_raindrops.rb
|
240
188
|
- test/test_raindrops_gc.rb
|
241
189
|
- test/test_struct.rb
|
190
|
+
- test/test_tcp_info.rb
|
242
191
|
- test/test_watcher.rb
|
@@ -1,173 +0,0 @@
|
|
1
|
-
#if defined(__linux__) && defined(HAVE_LINUX_TCP_H)
|
2
|
-
#include <ruby.h>
|
3
|
-
#include <sys/socket.h>
|
4
|
-
#include <netinet/in.h>
|
5
|
-
#include <linux/tcp.h>
|
6
|
-
#ifdef TCP_INFO
|
7
|
-
#include "my_fileno.h"
|
8
|
-
|
9
|
-
#define TCPI_ATTR_READER(x) \
|
10
|
-
static VALUE tcp_info_##x(VALUE self) \
|
11
|
-
{ \
|
12
|
-
struct tcp_info *info = DATA_PTR(self); \
|
13
|
-
return UINT2NUM((uint32_t)info->tcpi_##x); \
|
14
|
-
}
|
15
|
-
|
16
|
-
TCPI_ATTR_READER(state)
|
17
|
-
TCPI_ATTR_READER(ca_state)
|
18
|
-
TCPI_ATTR_READER(retransmits)
|
19
|
-
TCPI_ATTR_READER(probes)
|
20
|
-
TCPI_ATTR_READER(backoff)
|
21
|
-
TCPI_ATTR_READER(options)
|
22
|
-
TCPI_ATTR_READER(snd_wscale)
|
23
|
-
TCPI_ATTR_READER(rcv_wscale)
|
24
|
-
TCPI_ATTR_READER(rto)
|
25
|
-
TCPI_ATTR_READER(ato)
|
26
|
-
TCPI_ATTR_READER(snd_mss)
|
27
|
-
TCPI_ATTR_READER(rcv_mss)
|
28
|
-
TCPI_ATTR_READER(unacked)
|
29
|
-
TCPI_ATTR_READER(sacked)
|
30
|
-
TCPI_ATTR_READER(lost)
|
31
|
-
TCPI_ATTR_READER(retrans)
|
32
|
-
TCPI_ATTR_READER(fackets)
|
33
|
-
TCPI_ATTR_READER(last_data_sent)
|
34
|
-
TCPI_ATTR_READER(last_ack_sent)
|
35
|
-
TCPI_ATTR_READER(last_data_recv)
|
36
|
-
TCPI_ATTR_READER(last_ack_recv)
|
37
|
-
TCPI_ATTR_READER(pmtu)
|
38
|
-
TCPI_ATTR_READER(rcv_ssthresh)
|
39
|
-
TCPI_ATTR_READER(rtt)
|
40
|
-
TCPI_ATTR_READER(rttvar)
|
41
|
-
TCPI_ATTR_READER(snd_ssthresh)
|
42
|
-
TCPI_ATTR_READER(snd_cwnd)
|
43
|
-
TCPI_ATTR_READER(advmss)
|
44
|
-
TCPI_ATTR_READER(reordering)
|
45
|
-
TCPI_ATTR_READER(rcv_rtt)
|
46
|
-
TCPI_ATTR_READER(rcv_space)
|
47
|
-
TCPI_ATTR_READER(total_retrans)
|
48
|
-
|
49
|
-
static VALUE alloc(VALUE klass)
|
50
|
-
{
|
51
|
-
struct tcp_info *info = xmalloc(sizeof(struct tcp_info));
|
52
|
-
|
53
|
-
/* Data_Make_Struct has an extra memset 0 which is so wasteful */
|
54
|
-
return Data_Wrap_Struct(klass, NULL, -1, info);
|
55
|
-
}
|
56
|
-
|
57
|
-
/*
|
58
|
-
* call-seq:
|
59
|
-
*
|
60
|
-
* Raindrops::TCP_Info.new(tcp_socket) -> TCP_Info object
|
61
|
-
*
|
62
|
-
* Reads a TCP_Info object from any given +tcp_socket+. See the tcp(7)
|
63
|
-
* manpage and /usr/include/linux/tcp.h for more details.
|
64
|
-
*/
|
65
|
-
static VALUE init(VALUE self, VALUE io)
|
66
|
-
{
|
67
|
-
int fd = my_fileno(io);
|
68
|
-
struct tcp_info *info = DATA_PTR(self);
|
69
|
-
socklen_t len = (socklen_t)sizeof(struct tcp_info);
|
70
|
-
int rc = getsockopt(fd, IPPROTO_TCP, TCP_INFO, info, &len);
|
71
|
-
|
72
|
-
if (rc != 0)
|
73
|
-
rb_sys_fail("getsockopt");
|
74
|
-
|
75
|
-
return self;
|
76
|
-
}
|
77
|
-
|
78
|
-
void Init_raindrops_linux_tcp_info(void)
|
79
|
-
{
|
80
|
-
VALUE cRaindrops = rb_const_get(rb_cObject, rb_intern("Raindrops"));
|
81
|
-
VALUE cTCP_Info;
|
82
|
-
|
83
|
-
/*
|
84
|
-
* Document-class: Raindrops::TCP_Info
|
85
|
-
*
|
86
|
-
* This is used to wrap "struct tcp_info" as described in tcp(7)
|
87
|
-
* and /usr/include/linux/tcp.h. The following readers methods
|
88
|
-
* are defined corresponding to the "tcpi_" fields in the
|
89
|
-
* tcp_info struct.
|
90
|
-
*
|
91
|
-
* In particular, the +last_data_recv+ field is useful for measuring
|
92
|
-
* the amount of time a client spent in the listen queue before
|
93
|
-
* +accept()+, but only if +TCP_DEFER_ACCEPT+ is used with the
|
94
|
-
* listen socket (it is on by default in Unicorn).
|
95
|
-
*
|
96
|
-
* - state
|
97
|
-
* - ca_state
|
98
|
-
* - retransmits
|
99
|
-
* - probes
|
100
|
-
* - backoff
|
101
|
-
* - options
|
102
|
-
* - snd_wscale
|
103
|
-
* - rcv_wscale
|
104
|
-
* - rto
|
105
|
-
* - ato
|
106
|
-
* - snd_mss
|
107
|
-
* - rcv_mss
|
108
|
-
* - unacked
|
109
|
-
* - sacked
|
110
|
-
* - lost
|
111
|
-
* - retrans
|
112
|
-
* - fackets
|
113
|
-
* - last_data_sent
|
114
|
-
* - last_ack_sent
|
115
|
-
* - last_data_recv
|
116
|
-
* - last_ack_recv
|
117
|
-
* - pmtu
|
118
|
-
* - rcv_ssthresh
|
119
|
-
* - rtt
|
120
|
-
* - rttvar
|
121
|
-
* - snd_ssthresh
|
122
|
-
* - snd_cwnd
|
123
|
-
* - advmss
|
124
|
-
* - reordering
|
125
|
-
* - rcv_rtt
|
126
|
-
* - rcv_space
|
127
|
-
* - total_retrans
|
128
|
-
*
|
129
|
-
* http://kernel.org/doc/man-pages/online/pages/man7/tcp.7.html
|
130
|
-
*/
|
131
|
-
cTCP_Info = rb_define_class_under(cRaindrops, "TCP_Info", rb_cObject);
|
132
|
-
rb_define_alloc_func(cTCP_Info, alloc);
|
133
|
-
rb_define_private_method(cTCP_Info, "initialize", init, 1);
|
134
|
-
rb_define_method(cTCP_Info, "get!", init, 1);
|
135
|
-
|
136
|
-
#define TCPI_DEFINE_METHOD(x) \
|
137
|
-
rb_define_method(cTCP_Info, #x, tcp_info_##x, 0)
|
138
|
-
|
139
|
-
TCPI_DEFINE_METHOD(state);
|
140
|
-
TCPI_DEFINE_METHOD(ca_state);
|
141
|
-
TCPI_DEFINE_METHOD(retransmits);
|
142
|
-
TCPI_DEFINE_METHOD(probes);
|
143
|
-
TCPI_DEFINE_METHOD(backoff);
|
144
|
-
TCPI_DEFINE_METHOD(options);
|
145
|
-
TCPI_DEFINE_METHOD(snd_wscale);
|
146
|
-
TCPI_DEFINE_METHOD(rcv_wscale);
|
147
|
-
TCPI_DEFINE_METHOD(rto);
|
148
|
-
TCPI_DEFINE_METHOD(ato);
|
149
|
-
TCPI_DEFINE_METHOD(snd_mss);
|
150
|
-
TCPI_DEFINE_METHOD(rcv_mss);
|
151
|
-
TCPI_DEFINE_METHOD(unacked);
|
152
|
-
TCPI_DEFINE_METHOD(sacked);
|
153
|
-
TCPI_DEFINE_METHOD(lost);
|
154
|
-
TCPI_DEFINE_METHOD(retrans);
|
155
|
-
TCPI_DEFINE_METHOD(fackets);
|
156
|
-
TCPI_DEFINE_METHOD(last_data_sent);
|
157
|
-
TCPI_DEFINE_METHOD(last_ack_sent);
|
158
|
-
TCPI_DEFINE_METHOD(last_data_recv);
|
159
|
-
TCPI_DEFINE_METHOD(last_ack_recv);
|
160
|
-
TCPI_DEFINE_METHOD(pmtu);
|
161
|
-
TCPI_DEFINE_METHOD(rcv_ssthresh);
|
162
|
-
TCPI_DEFINE_METHOD(rtt);
|
163
|
-
TCPI_DEFINE_METHOD(rttvar);
|
164
|
-
TCPI_DEFINE_METHOD(snd_ssthresh);
|
165
|
-
TCPI_DEFINE_METHOD(snd_cwnd);
|
166
|
-
TCPI_DEFINE_METHOD(advmss);
|
167
|
-
TCPI_DEFINE_METHOD(reordering);
|
168
|
-
TCPI_DEFINE_METHOD(rcv_rtt);
|
169
|
-
TCPI_DEFINE_METHOD(rcv_space);
|
170
|
-
TCPI_DEFINE_METHOD(total_retrans);
|
171
|
-
}
|
172
|
-
#endif /* TCP_INFO */
|
173
|
-
#endif /* defined(__linux__) && defined(HAVE_LINUX_TCP_H) */
|