raindrops 0.16.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/.olddoc.yml +11 -7
- data/GIT-VERSION-GEN +1 -1
- data/GNUmakefile +1 -1
- data/LICENSE +3 -3
- data/README +14 -14
- 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 +106 -2
- data/ext/raindrops/linux_inet_diag.c +60 -85
- 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/pmq.rb +23 -17
- data/lib/raindrops/linux.rb +4 -5
- data/lib/raindrops/middleware.rb +2 -2
- data/lib/raindrops/middleware/proxy.rb +2 -2
- data/lib/raindrops/watcher.rb +13 -13
- data/pkg.mk +3 -2
- data/raindrops.gemspec +12 -16
- 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 +3 -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 -56
- 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,37 +56,29 @@ dependencies:
|
|
76
56
|
name: rack
|
77
57
|
requirement: !ruby/object:Gem::Requirement
|
78
58
|
requirements:
|
79
|
-
- - "
|
59
|
+
- - ">="
|
80
60
|
- !ruby/object:Gem::Version
|
81
61
|
version: '1.2'
|
62
|
+
- - "<"
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '3.0'
|
82
65
|
type: :development
|
83
66
|
prerelease: false
|
84
67
|
version_requirements: !ruby/object:Gem::Requirement
|
85
68
|
requirements:
|
86
|
-
- - "
|
69
|
+
- - ">="
|
87
70
|
- !ruby/object:Gem::Version
|
88
71
|
version: '1.2'
|
89
|
-
-
|
90
|
-
name: olddoc
|
91
|
-
requirement: !ruby/object:Gem::Requirement
|
92
|
-
requirements:
|
93
|
-
- - "~>"
|
72
|
+
- - "<"
|
94
73
|
- !ruby/object:Gem::Version
|
95
|
-
version: '
|
96
|
-
type: :development
|
97
|
-
prerelease: false
|
98
|
-
version_requirements: !ruby/object:Gem::Requirement
|
99
|
-
requirements:
|
100
|
-
- - "~>"
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: '1.0'
|
74
|
+
version: '3.0'
|
103
75
|
description: |-
|
104
76
|
raindrops is a real-time stats toolkit to show statistics for Rack HTTP
|
105
77
|
servers. It is designed for preforking servers such as unicorn, but
|
106
78
|
should support any Rack HTTP server on platforms supporting POSIX shared
|
107
79
|
memory. It may also be used as a generic scoreboard for sharing atomic
|
108
80
|
counters across multiple processes.
|
109
|
-
email: raindrops@
|
81
|
+
email: raindrops-public@yhbt.net
|
110
82
|
executables: []
|
111
83
|
extensions:
|
112
84
|
- ext/raindrops/extconf.rb
|
@@ -114,19 +86,9 @@ extra_rdoc_files:
|
|
114
86
|
- README
|
115
87
|
- LICENSE
|
116
88
|
- NEWS
|
117
|
-
- lib/raindrops.rb
|
118
|
-
- lib/raindrops/aggregate.rb
|
119
|
-
- lib/raindrops/aggregate/last_data_recv.rb
|
120
|
-
- lib/raindrops/aggregate/pmq.rb
|
121
|
-
- lib/raindrops/last_data_recv.rb
|
122
|
-
- lib/raindrops/linux.rb
|
123
|
-
- lib/raindrops/middleware.rb
|
124
|
-
- lib/raindrops/middleware/proxy.rb
|
125
|
-
- lib/raindrops/struct.rb
|
126
|
-
- lib/raindrops/watcher.rb
|
127
89
|
- ext/raindrops/raindrops.c
|
128
90
|
- ext/raindrops/linux_inet_diag.c
|
129
|
-
- ext/raindrops/
|
91
|
+
- ext/raindrops/tcp_info.c
|
130
92
|
files:
|
131
93
|
- ".document"
|
132
94
|
- ".gitattributes"
|
@@ -148,13 +110,14 @@ files:
|
|
148
110
|
- examples/middleware.ru
|
149
111
|
- examples/watcher.ru
|
150
112
|
- examples/watcher_demo.ru
|
113
|
+
- examples/yahns.conf.rb
|
151
114
|
- examples/zbatery.conf.rb
|
152
115
|
- ext/raindrops/extconf.rb
|
153
116
|
- ext/raindrops/linux_inet_diag.c
|
154
|
-
- ext/raindrops/linux_tcp_info.c
|
155
117
|
- ext/raindrops/my_fileno.h
|
156
118
|
- ext/raindrops/raindrops.c
|
157
119
|
- ext/raindrops/raindrops_atomic.h
|
120
|
+
- ext/raindrops/tcp_info.c
|
158
121
|
- lib/raindrops.rb
|
159
122
|
- lib/raindrops/aggregate.rb
|
160
123
|
- lib/raindrops/aggregate/last_data_recv.rb
|
@@ -178,15 +141,15 @@ files:
|
|
178
141
|
- test/test_linux_all_tcp_listen_stats_leak.rb
|
179
142
|
- test/test_linux_ipv6.rb
|
180
143
|
- test/test_linux_middleware.rb
|
181
|
-
- test/test_linux_tcp_info.rb
|
182
144
|
- test/test_middleware.rb
|
183
145
|
- test/test_middleware_unicorn.rb
|
184
146
|
- test/test_middleware_unicorn_ipv6.rb
|
185
147
|
- test/test_raindrops.rb
|
186
148
|
- test/test_raindrops_gc.rb
|
187
149
|
- test/test_struct.rb
|
150
|
+
- test/test_tcp_info.rb
|
188
151
|
- test/test_watcher.rb
|
189
|
-
homepage:
|
152
|
+
homepage: https://yhbt.net/raindrops/
|
190
153
|
licenses:
|
191
154
|
- LGPL-2.1+
|
192
155
|
metadata: {}
|
@@ -198,15 +161,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
198
161
|
requirements:
|
199
162
|
- - ">="
|
200
163
|
- !ruby/object:Gem::Version
|
201
|
-
version:
|
164
|
+
version: 1.9.3
|
202
165
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
203
166
|
requirements:
|
204
167
|
- - ">="
|
205
168
|
- !ruby/object:Gem::Version
|
206
169
|
version: '0'
|
207
170
|
requirements: []
|
208
|
-
|
209
|
-
rubygems_version: 2.5.2
|
171
|
+
rubygems_version: 3.0.2
|
210
172
|
signing_key:
|
211
173
|
specification_version: 4
|
212
174
|
summary: real-time stats for preforking Rack servers
|
@@ -219,11 +181,11 @@ test_files:
|
|
219
181
|
- test/test_linux_all_tcp_listen_stats_leak.rb
|
220
182
|
- test/test_linux_ipv6.rb
|
221
183
|
- test/test_linux_middleware.rb
|
222
|
-
- test/test_linux_tcp_info.rb
|
223
184
|
- test/test_middleware.rb
|
224
185
|
- test/test_middleware_unicorn.rb
|
225
186
|
- test/test_middleware_unicorn_ipv6.rb
|
226
187
|
- test/test_raindrops.rb
|
227
188
|
- test/test_raindrops_gc.rb
|
228
189
|
- test/test_struct.rb
|
190
|
+
- test/test_tcp_info.rb
|
229
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) */
|