raindrops 0.13.0 → 0.20.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.
- checksums.yaml +7 -0
- data/.document +1 -2
- data/.gitattributes +4 -0
- data/.gitignore +1 -1
- data/.manifest +7 -5
- data/.olddoc.yml +16 -0
- data/GIT-VERSION-FILE +1 -1
- data/GIT-VERSION-GEN +1 -1
- data/GNUmakefile +1 -2
- data/LATEST +6 -11
- data/LICENSE +3 -3
- data/NEWS +158 -0
- data/README +33 -40
- data/TODO +2 -0
- data/archive/.gitignore +3 -0
- data/archive/slrnpull.conf +4 -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 -2
- data/ext/raindrops/linux_inet_diag.c +94 -101
- data/ext/raindrops/raindrops.c +75 -21
- data/ext/raindrops/tcp_info.c +245 -0
- data/lib/raindrops/aggregate/last_data_recv.rb +1 -5
- data/lib/raindrops/aggregate/pmq.rb +23 -17
- data/lib/raindrops/aggregate.rb +1 -1
- data/lib/raindrops/linux.rb +5 -6
- data/lib/raindrops/middleware/proxy.rb +2 -2
- data/lib/raindrops/middleware.rb +4 -6
- data/lib/raindrops/watcher.rb +13 -13
- data/lib/raindrops.rb +25 -1
- data/pkg.mk +26 -50
- data/raindrops.gemspec +14 -21
- 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_linux_ipv6.rb +8 -0
- data/test/test_raindrops.rb +43 -1
- data/test/{test_linux_tcp_info.rb → test_tcp_info.rb} +34 -14
- data/test/test_watcher.rb +15 -10
- metadata +59 -171
- data/.wrongdoc.yml +0 -6
- data/ChangeLog +0 -1920
- data/Rakefile +0 -28
- data/ext/raindrops/linux_tcp_info.c +0 -173
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 6f78e29ec57e3f3710146a423cf60915d23a5f4366d70dcabbbef74fb69f71f3
|
4
|
+
data.tar.gz: 8a369d49c33a67af3b6acccaf64b04ed192cba9d163c8d48944cfac887511885
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b9e5de8e7a7a84038bbe19a954d3d559ebec3ed4c7f68db2e2ada6373b045f4fbcd784c5d5b91005cad1d87f1db93f9dc31c9f7fc59ae56a7f73b98d9a96bf2e
|
7
|
+
data.tar.gz: 9913e9205b2527b9f5bd1bae58b0c2c8962505e87280c06257f603fb722978d6656c99cfa0a297ccd0734a7d6110b0a6ecd5155fec9870ec40a31044a00def4d
|
data/.document
CHANGED
data/.gitattributes
ADDED
data/.gitignore
CHANGED
data/.manifest
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
.document
|
2
|
+
.gitattributes
|
2
3
|
.gitignore
|
3
4
|
.manifest
|
4
|
-
.
|
5
|
+
.olddoc.yml
|
5
6
|
COPYING
|
6
|
-
ChangeLog
|
7
7
|
GIT-VERSION-FILE
|
8
8
|
GIT-VERSION-GEN
|
9
9
|
GNUmakefile
|
@@ -11,19 +11,21 @@ LATEST
|
|
11
11
|
LICENSE
|
12
12
|
NEWS
|
13
13
|
README
|
14
|
-
Rakefile
|
15
14
|
TODO
|
15
|
+
archive/.gitignore
|
16
|
+
archive/slrnpull.conf
|
16
17
|
examples/linux-listener-stats.rb
|
17
18
|
examples/middleware.ru
|
18
19
|
examples/watcher.ru
|
19
20
|
examples/watcher_demo.ru
|
21
|
+
examples/yahns.conf.rb
|
20
22
|
examples/zbatery.conf.rb
|
21
23
|
ext/raindrops/extconf.rb
|
22
24
|
ext/raindrops/linux_inet_diag.c
|
23
|
-
ext/raindrops/linux_tcp_info.c
|
24
25
|
ext/raindrops/my_fileno.h
|
25
26
|
ext/raindrops/raindrops.c
|
26
27
|
ext/raindrops/raindrops_atomic.h
|
28
|
+
ext/raindrops/tcp_info.c
|
27
29
|
lib/raindrops.rb
|
28
30
|
lib/raindrops/aggregate.rb
|
29
31
|
lib/raindrops/aggregate/last_data_recv.rb
|
@@ -47,11 +49,11 @@ test/test_linux_all_tcp_listen_stats.rb
|
|
47
49
|
test/test_linux_all_tcp_listen_stats_leak.rb
|
48
50
|
test/test_linux_ipv6.rb
|
49
51
|
test/test_linux_middleware.rb
|
50
|
-
test/test_linux_tcp_info.rb
|
51
52
|
test/test_middleware.rb
|
52
53
|
test/test_middleware_unicorn.rb
|
53
54
|
test/test_middleware_unicorn_ipv6.rb
|
54
55
|
test/test_raindrops.rb
|
55
56
|
test/test_raindrops_gc.rb
|
56
57
|
test/test_struct.rb
|
58
|
+
test/test_tcp_info.rb
|
57
59
|
test/test_watcher.rb
|
data/.olddoc.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
---
|
2
|
+
cgit_url: https://yhbt.net/raindrops.git/
|
3
|
+
rdoc_url: https://yhbt.net/raindrops/
|
4
|
+
public_email: raindrops-public@yhbt.net
|
5
|
+
ml_url:
|
6
|
+
- https://yhbt.net/raindrops-public/
|
7
|
+
- http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/raindrops-public
|
8
|
+
imap_url:
|
9
|
+
- imaps://yhbt.net/inbox.comp.lang.ruby.raindrops.0
|
10
|
+
- imap://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.lang.ruby.raindrops.0
|
11
|
+
nntp_url:
|
12
|
+
- nntps://news.public-inbox.org/inbox.comp.lang.ruby.raindrops
|
13
|
+
- nntp://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.lang.ruby.raindrops
|
14
|
+
source_code:
|
15
|
+
- git clone https://yhbt.net/raindrops.git
|
16
|
+
- torsocks git clone http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/raindrops.git
|
data/GIT-VERSION-FILE
CHANGED
@@ -1 +1 @@
|
|
1
|
-
GIT_VERSION = 0.
|
1
|
+
GIT_VERSION = 0.20.0
|
data/GIT-VERSION-GEN
CHANGED
data/GNUmakefile
CHANGED
data/LATEST
CHANGED
@@ -1,15 +1,10 @@
|
|
1
|
-
=== raindrops 0.
|
1
|
+
=== raindrops 0.20.0 / 2021-12-06 23:41 UTC
|
2
2
|
|
3
|
-
|
4
|
-
Thanks to
|
3
|
+
Raindrops may now use file-backed mmap() rather than anonymous
|
4
|
+
memory. Thanks to KJ Tsanaktsidis for the patch:
|
5
5
|
|
6
|
-
|
7
|
-
Rakefile: remove raa_update task
|
8
|
-
last_data_recv: do not assume Unicorn includes all constants
|
9
|
-
raindrops.gemspec: add wrongdoc dev dependency
|
10
|
-
linux_inet_diag: fix Ruby 2.2 (dev) build
|
11
|
-
license: use LGPLv2.1 or later (was LGPL (2.1|3.0)-only)
|
6
|
+
https://yhbt.net/raindrops-public/20211125065618.3432-1-ktsanaktsidis@zendesk.com/T/
|
12
7
|
|
13
|
-
|
14
|
-
|
8
|
+
The documentation is also updated to note our mail archives are now
|
9
|
+
available via IMAP(S).
|
15
10
|
|
data/LICENSE
CHANGED
@@ -3,8 +3,8 @@ revision control for names and email addresses of all of them.
|
|
3
3
|
|
4
4
|
You can redistribute it and/or modify it under the terms of the GNU
|
5
5
|
Lesser General Public License (LGPL) as published by the Free Software
|
6
|
-
Foundation, version {2.1}[
|
7
|
-
later. Currently version {3}[
|
6
|
+
Foundation, version {2.1}[https://www.gnu.org/licenses/lgpl-2.1.txt] or
|
7
|
+
later. Currently version {3}[https://www.gnu.org/licenses/lgpl-3.0.txt],
|
8
8
|
is preferred (see link:COPYING).
|
9
9
|
|
10
10
|
raindrops is distributed in the hope that it will be useful, but WITHOUT
|
@@ -13,4 +13,4 @@ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
|
13
13
|
License for more details.
|
14
14
|
|
15
15
|
You should have received a copy of the GNU Lesser General Public License
|
16
|
-
along with the raindrops; if not, see <
|
16
|
+
along with the raindrops; if not, see <https://www.gnu.org/licenses/>
|
data/NEWS
CHANGED
@@ -1,3 +1,161 @@
|
|
1
|
+
=== raindrops 0.20.0 / 2021-12-06 23:41 UTC
|
2
|
+
|
3
|
+
Raindrops may now use file-backed mmap() rather than anonymous
|
4
|
+
memory. Thanks to KJ Tsanaktsidis for the patch:
|
5
|
+
|
6
|
+
https://yhbt.net/raindrops-public/20211125065618.3432-1-ktsanaktsidis@zendesk.com/T/
|
7
|
+
|
8
|
+
The documentation is also updated to note our mail archives are now
|
9
|
+
available via IMAP(S).
|
10
|
+
|
11
|
+
=== raindrops 0.19.2 / 2021-05-25 23:13 UTC
|
12
|
+
|
13
|
+
This release fixes compatibility with GC.compact on Ruby 3.x
|
14
|
+
when using ListenStats on Linux. The listener stats
|
15
|
+
functionality is rarely used and does not affect most users
|
16
|
+
who just have raindrops installed for shared atomic counters.
|
17
|
+
|
18
|
+
=== raindrops 0.19.1 / 2020-01-08 09:31 UTC
|
19
|
+
|
20
|
+
This release fixes some warnings on newer Rubies.
|
21
|
+
|
22
|
+
We're no longer on bogomips.org since it's due
|
23
|
+
for expiry and I can't pay extortionists for a .org, so
|
24
|
+
s/bogomips.org/yhbt.net/ for now, and be prepared to move again
|
25
|
+
when extortionists move onto extorting the .net TLD.
|
26
|
+
|
27
|
+
doc: switch homepage to dark216
|
28
|
+
ext/raindrops/extconf: fix cflags reset on ancient CC
|
29
|
+
fixes for newer rubies
|
30
|
+
replace bogomips.org with yhbt.net
|
31
|
+
|
32
|
+
=== raindrops 0.19.0 - Rack 2.x middleware compatibility / 2017-08-09 23:52 UTC
|
33
|
+
|
34
|
+
This release fixes Rack 2.x compatibility for the few users of
|
35
|
+
Raindrops::Middleware
|
36
|
+
<https://bogomips.org/raindrops/Raindrops/Middleware.html>.
|
37
|
+
Thanks to Dmytro Shteflyuk for this release.
|
38
|
+
|
39
|
+
No need to upgrade unless you use Raindrops::Middleware with
|
40
|
+
Rack 2.x.
|
41
|
+
|
42
|
+
There's also a few minor, inconsequential cleanups.
|
43
|
+
|
44
|
+
Dmytro Shteflyuk (1):
|
45
|
+
Properly override respond_to? in Raindrops::Middleware::Proxy
|
46
|
+
|
47
|
+
Eric Wong (2):
|
48
|
+
Ruby thread compatibility updates
|
49
|
+
tcp_info: remove unnecessary extconf.h include
|
50
|
+
|
51
|
+
=== raindrops 0.18.0 / 2017-03-23 02:44 UTC
|
52
|
+
|
53
|
+
The most notable feature of this release is the addition of
|
54
|
+
FreeBSD and OpenBSD TCP_INFO support. This includes the
|
55
|
+
Raindrops::TCP for portably mapping TCP state names to
|
56
|
+
platform-dependent numeric values:
|
57
|
+
|
58
|
+
https://bogomips.org/raindrops/Raindrops.html#TCP
|
59
|
+
|
60
|
+
Thanks to Jeremy Evans and Simon Eskildsen on the
|
61
|
+
unicorn-public@bogomips.org mailing list for inspiring
|
62
|
+
these changes to raindrops.
|
63
|
+
|
64
|
+
There's also a few internal cleanups, and documentation
|
65
|
+
improvements, including some fixes to the largely-forgotten
|
66
|
+
Raindrops::Aggreage::PMQ class:
|
67
|
+
|
68
|
+
https://bogomips.org/raindrops/Raindrops/Aggregate/PMQ.html
|
69
|
+
|
70
|
+
20 changes since 0.17.0:
|
71
|
+
|
72
|
+
test_inet_diag_socket: fix Fixnum deprecation warning
|
73
|
+
TODO: add item for IPv6 breakage
|
74
|
+
ext: fix documentation for C ext-defined classes
|
75
|
+
TCP_Info: custom documentation for #get!
|
76
|
+
TypedData C-API conversion
|
77
|
+
test_watcher: disable test correctly when aggregate is missing
|
78
|
+
tcp_info: support this struct under FreeBSD
|
79
|
+
define Raindrops::TCP hash for TCP states
|
80
|
+
linux_inet_diag: reduce stack usage and simplify
|
81
|
+
avoid reading errno repeatedly
|
82
|
+
aggregate/pmq: avoid false sharing of lock buffers
|
83
|
+
aggregate/pmq: remove io-extra requirement
|
84
|
+
aggregate/pmq: avoid File#stat allocation
|
85
|
+
Merge remote-tracking branch 'origin/freebsd'
|
86
|
+
Merge remote-tracking branch 'origin/aggregate-pmq'
|
87
|
+
doc: remove private email support address
|
88
|
+
doc: update location of TCP_INFO-related stuff
|
89
|
+
build: avoid olddoc for building the RubyGem
|
90
|
+
doc: document Raindrops::TCP hash
|
91
|
+
aggregate/pmq: update version numbers for Ruby and Linux
|
92
|
+
|
93
|
+
=== raindrops 0.17.0 - rack 2.x updates / 2016-07-31 15:19 UTC
|
94
|
+
|
95
|
+
This release features minor updates to support rack 2.x
|
96
|
+
while maintaining support for rack 1.2 and later.
|
97
|
+
As a result, Ruby 1.8.6 compatibility is gone, but
|
98
|
+
Ruby 1.8.7 probably still works, for now.
|
99
|
+
|
100
|
+
There's also a minor warning fix, doc updates, and
|
101
|
+
the homepage now supports HTTPS (HTTP remains supported)
|
102
|
+
|
103
|
+
5 changes since raindrops 0.16.0:
|
104
|
+
drop Rack::Utils.bytesize dependency
|
105
|
+
gemspec: bump Rack dependency
|
106
|
+
linux_inet_diag: GCC attribute format check
|
107
|
+
use HTTPS and move homepage to https://bogomips.org/raindrops/
|
108
|
+
examples: add yahns config, zbatery is abandoned
|
109
|
+
|
110
|
+
=== raindrops 0.16.0 - minor fixes and workarounds / 2016-02-29 12:36 UTC
|
111
|
+
|
112
|
+
There's mainly a fix/workaround for Ruby 2.3 now returning
|
113
|
+
locale-aware strings for File.readlink and our test suite
|
114
|
+
using strange paths allowed by *nix.
|
115
|
+
|
116
|
+
https://bugs.ruby-lang.org/issues/12034
|
117
|
+
|
118
|
+
tcp_listener_stats won't return "true" object placeholders
|
119
|
+
if stats are configured for a non-existent listener.
|
120
|
+
|
121
|
+
There are also minor optimizations for Ruby 2.2+ (at the expense
|
122
|
+
of 2.1 and earlier).
|
123
|
+
|
124
|
+
And the usual round of minor tweaks and doc updates.
|
125
|
+
|
126
|
+
10 changes since v0.15.0:
|
127
|
+
gemspec: avoid circular dependency on unicorn
|
128
|
+
remove optimizations which made sense for older rubies
|
129
|
+
linux: workaround Ruby 2.3 change
|
130
|
+
linux: remove Pathname stdlib dependency
|
131
|
+
add .gitattributes for Ruby method detection
|
132
|
+
middleware: minor bytecode size reduction
|
133
|
+
doc: update URLs and references
|
134
|
+
README: remove indentation from URLs in RDoc
|
135
|
+
linux: tcp_listener_stats drops "true" placeholders
|
136
|
+
build: use '--local' domain for dev gem install
|
137
|
+
|
138
|
+
=== raindrops 0.15.0 - non-glibc compat fix on Linux / 2015-07-22 00:30 UTC
|
139
|
+
|
140
|
+
Thanks to Doug Forster for sending us the report.
|
141
|
+
No other fixes
|
142
|
+
|
143
|
+
* check for the existence of linux/tcp.h
|
144
|
+
|
145
|
+
=== raindrops 0.14.0 - misc doc updates / 2015-06-25 21:50 UTC
|
146
|
+
|
147
|
+
Eric Wong (7):
|
148
|
+
linux_inet_diag: annotate memory freeing on diag errors
|
149
|
+
README: trim intro and update license
|
150
|
+
modernize packaging and documentation
|
151
|
+
move mailing list to raindrops-public@bogomips.org
|
152
|
+
linux_inet_diag: clarify *fprintf usage without GVL
|
153
|
+
TODO: add item for unix_diag and udp_diag
|
154
|
+
linux_inet_diag: fix Wshorten-64-to-32 warnings
|
155
|
+
|
156
|
+
Hleb Valoshka (1):
|
157
|
+
Add setup and teardown for ipv6 tests
|
158
|
+
|
1
159
|
=== raindrops 0.13.0 several minor fixes and improvements / 2014-02-18 20:59 UTC
|
2
160
|
|
3
161
|
Most notably, this release is necessary for Ruby 2.2 (dev).
|
data/README
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
= raindrops - real-time stats for preforking Rack servers
|
2
2
|
|
3
|
-
|
4
|
-
servers. It is designed for preforking servers such as
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
multiple processes.
|
3
|
+
raindrops is a real-time stats toolkit to show statistics for Rack HTTP
|
4
|
+
servers. It is designed for preforking servers such as unicorn, but
|
5
|
+
should support any Rack HTTP server on platforms supporting POSIX shared
|
6
|
+
memory. It may also be used as a generic scoreboard for sharing atomic
|
7
|
+
counters across multiple processes.
|
9
8
|
|
10
9
|
== Features
|
11
10
|
|
@@ -38,12 +37,15 @@ and "tcp_diag" kernel modules are loaded as they do not autoload correctly
|
|
38
37
|
|
39
38
|
== Install
|
40
39
|
|
41
|
-
We recommend GCC 4+ (or compatible) to support the
|
42
|
-
{
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
40
|
+
We recommend GCC 4+ (or compatible) to support the __sync builtins
|
41
|
+
(__sync_{add,sub}_and_fetch()):
|
42
|
+
|
43
|
+
https://gcc.gnu.org/onlinedocs/gcc/_005f_005fsync-Builtins.html
|
44
|
+
|
45
|
+
For non-GCC 4+ users, we also support compilation with the libatomic_ops
|
46
|
+
package starting with Raindrops 0.4.0:
|
47
|
+
|
48
|
+
https://github.com/ivmai/libatomic_ops
|
47
49
|
|
48
50
|
If you're using a packaged Ruby distribution, make sure you have a C
|
49
51
|
compiler and the matching Ruby development libraries and headers.
|
@@ -52,33 +54,24 @@ If you use RubyGems:
|
|
52
54
|
|
53
55
|
gem install raindrops
|
54
56
|
|
55
|
-
Otherwise grab the latest tarball from:
|
56
|
-
|
57
|
-
http://raindrops.bogomips.org/files/
|
58
|
-
|
59
|
-
Unpack it, and run "ruby setup.rb"
|
60
|
-
|
61
57
|
== Usage
|
62
58
|
|
63
59
|
See Raindrops::Middleware and Raindrops::LastDataRecv documentation for
|
64
60
|
use Rack servers. The entire library is fully-documented and we are
|
65
|
-
responsive on the
|
66
|
-
have any questions or comments.
|
61
|
+
responsive on the publicly archived mailbox
|
62
|
+
(mailto:raindrops-public@yhbt.net) if you have any questions or comments.
|
67
63
|
|
68
64
|
== Development
|
69
65
|
|
70
66
|
You can get the latest source via git from the following locations:
|
71
67
|
|
72
|
-
|
73
|
-
|
68
|
+
https://yhbt.net/raindrops.git
|
69
|
+
http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/raindrops.git
|
70
|
+
http://repo.or.cz/w/raindrops.git (gitweb mirror)
|
74
71
|
|
75
|
-
|
76
|
-
tarballs here:
|
72
|
+
Snapshots and tarballs are available.
|
77
73
|
|
78
|
-
|
79
|
-
* http://repo.or.cz/w/raindrops.git (gitweb)
|
80
|
-
|
81
|
-
Inline patches (from "git format-patch") to the mailing list are
|
74
|
+
Inline patches (from "git format-patch") to the mailbox are
|
82
75
|
preferred because they allow code review and comments in the reply to
|
83
76
|
the patch.
|
84
77
|
|
@@ -87,22 +80,22 @@ git itself. See the Documentation/SubmittingPatches document
|
|
87
80
|
distributed with git on on patch submission guidelines to follow. Just
|
88
81
|
don't email the git mailing list or maintainer with raindrops patches.
|
89
82
|
|
90
|
-
raindrops is
|
91
|
-
allow for a transition to future versions of the LGPL, contributors are
|
92
|
-
required to sign-off changes allowing allowing the project leader to
|
93
|
-
relicense raindrops under newer versions of the LGPL (which should be
|
94
|
-
similar in spirit to the existing LGPL).
|
83
|
+
raindrops is licensed under the LGPL-2.1+
|
95
84
|
|
96
85
|
== Contact
|
97
86
|
|
98
87
|
All feedback (bug reports, user/development discussion, patches, pull
|
99
|
-
requests) go to the
|
100
|
-
|
101
|
-
The mailing list is mirrored to Gmane, all information about the
|
102
|
-
group is here:
|
88
|
+
requests) go to the publicly archived mailbox:
|
89
|
+
mailto:raindrops-public@yhbt.net
|
103
90
|
|
104
|
-
|
91
|
+
Mail archives are available over HTTP(S), IMAP(S) and NNTP(S):
|
105
92
|
|
106
|
-
|
93
|
+
* https://yhbt.net/raindrops-public/
|
94
|
+
* http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/raindrops-public/
|
95
|
+
* imaps://yhbt.net/inbox.comp.lang.ruby.raindrops.0
|
96
|
+
* imap://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.lang.ruby.raindrops.0
|
97
|
+
* nntps://news.public-inbox.org/inbox.comp.lang.ruby.raindrops
|
98
|
+
* nntp://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.lang.ruby.raindrops
|
107
99
|
|
108
|
-
|
100
|
+
Since archives are public, scrub sensitive information and
|
101
|
+
use anonymity tools such as Tor or Mixmaster if you deem necessary.
|
data/TODO
CHANGED
data/archive/.gitignore
ADDED
@@ -15,7 +15,6 @@ end
|
|
15
15
|
usage = "Usage: #$0 [-d DELAY] [-t QUEUED_THRESHOLD] ADDR..."
|
16
16
|
ARGV.size > 0 or abort usage
|
17
17
|
delay = false
|
18
|
-
all = false
|
19
18
|
queued_thresh = -1
|
20
19
|
# "normal" exits when driven on the command-line
|
21
20
|
trap(:INT) { exit 130 }
|
@@ -25,7 +24,7 @@ OptionParser.new('', 24, ' ') do |opts|
|
|
25
24
|
opts.banner = usage
|
26
25
|
opts.on('-d', '--delay=DELAY', Float) { |n| delay = n }
|
27
26
|
opts.on('-t', '--queued-threshold=INT', Integer) { |n| queued_thresh = n }
|
28
|
-
opts.on('-a', '--all') {
|
27
|
+
opts.on('-a', '--all') { } # noop
|
29
28
|
opts.parse! ARGV
|
30
29
|
end
|
31
30
|
|
data/examples/watcher_demo.ru
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
# Inlined rack app using yahns server (git clone git://yhbt.net/yahns.git)
|
2
|
+
# Usage: yahns -c /path/to/this/file.conf.rb
|
3
|
+
# There is no separate config.ru file for this example,
|
4
|
+
# but rack_app may also be a string pointing to the path of a
|
5
|
+
# config.ru file
|
6
|
+
|
7
|
+
require 'rack'
|
8
|
+
rack_app = Rack::Builder.new do
|
9
|
+
use Rack::Head
|
10
|
+
addr = %w(0.0.0.0:9418 0.0.0.0:443 [::]:443 0.0.0.0:80 [::]:80
|
11
|
+
127.0.0.1:6081 127.0.0.1:280 0.0.0.0:119 [::]:119)
|
12
|
+
use Raindrops::Middleware, listeners: addr
|
13
|
+
run Raindrops::Watcher.new(listeners: addr)
|
14
|
+
end.to_app
|
15
|
+
# rack_app = '/path/to/config.ru' # a more standard config
|
16
|
+
|
17
|
+
app(:rack, rack_app) do
|
18
|
+
# I keep IPv4 and IPv6 on separate sockets to avoid ugly
|
19
|
+
# IPv4-mapped-IPv6 addresses:
|
20
|
+
listen 8080
|
21
|
+
listen '[::]:8080', ipv6only: true
|
22
|
+
client_max_body_size 0 # no POST or any uploads
|
23
|
+
client_timeout 5
|
24
|
+
output_buffering false # needed for /tail/ endpoint to avoid ENOSPC
|
25
|
+
queue { worker_threads 30 }
|
26
|
+
end
|
27
|
+
|
28
|
+
# logging is optional, but recommended for diagnosing problems
|
29
|
+
# stderr_path '/var/log/yahns/stderr-raindrops.log'
|
30
|
+
# stdout_path '/var/log/yahns/stdout-raindrops.log'
|
data/examples/zbatery.conf.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# Used for running Raindrops::Watcher, which requires a multi-threaded
|
2
2
|
# Rack server capable of streaming a response. Threads must be used,
|
3
|
-
# so
|
3
|
+
# so any multi-threaded Rack server may be used.
|
4
|
+
# zbatery was recommended in the past, but it is abandoned
|
5
|
+
# <http://zbatery.bogomip.org/>.
|
6
|
+
# yahns may work as an alternative (see yahns.conf.rb in this dir)
|
4
7
|
Rainbows! do
|
5
8
|
use :ThreadSpawn
|
6
9
|
end
|
data/ext/raindrops/extconf.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'mkmf'
|
2
|
+
require 'shellwords'
|
2
3
|
|
3
4
|
dir_config('atomic_ops')
|
4
5
|
have_func('mmap', 'sys/mman.h') or abort 'mmap() not found'
|
@@ -6,9 +7,112 @@ have_func('munmap', 'sys/mman.h') or abort 'munmap() not found'
|
|
6
7
|
|
7
8
|
$CPPFLAGS += " -D_GNU_SOURCE "
|
8
9
|
have_func('mremap', 'sys/mman.h')
|
10
|
+
headers = %w(sys/types.h netdb.h string.h sys/socket.h netinet/in.h)
|
11
|
+
if have_header('linux/tcp.h')
|
12
|
+
headers << 'linux/tcp.h'
|
13
|
+
else
|
14
|
+
%w(netinet/tcp.h netinet/tcp_fsm.h).each { |h|
|
15
|
+
have_header(h, headers) and headers << h
|
16
|
+
}
|
17
|
+
end
|
9
18
|
|
10
19
|
$CPPFLAGS += " -D_BSD_SOURCE "
|
20
|
+
|
21
|
+
if have_type("struct tcp_info", headers)
|
22
|
+
%w(
|
23
|
+
tcpi_state
|
24
|
+
tcpi_ca_state
|
25
|
+
tcpi_retransmits
|
26
|
+
tcpi_probes
|
27
|
+
tcpi_backoff
|
28
|
+
tcpi_options
|
29
|
+
tcpi_snd_wscale
|
30
|
+
tcpi_rcv_wscale
|
31
|
+
tcpi_rto
|
32
|
+
tcpi_ato
|
33
|
+
tcpi_snd_mss
|
34
|
+
tcpi_rcv_mss
|
35
|
+
tcpi_unacked
|
36
|
+
tcpi_sacked
|
37
|
+
tcpi_lost
|
38
|
+
tcpi_retrans
|
39
|
+
tcpi_fackets
|
40
|
+
tcpi_last_data_sent
|
41
|
+
tcpi_last_ack_sent
|
42
|
+
tcpi_last_data_recv
|
43
|
+
tcpi_last_ack_recv
|
44
|
+
tcpi_pmtu
|
45
|
+
tcpi_rcv_ssthresh
|
46
|
+
tcpi_rtt
|
47
|
+
tcpi_rttvar
|
48
|
+
tcpi_snd_ssthresh
|
49
|
+
tcpi_snd_cwnd
|
50
|
+
tcpi_advmss
|
51
|
+
tcpi_reordering
|
52
|
+
tcpi_rcv_rtt
|
53
|
+
tcpi_rcv_space
|
54
|
+
tcpi_total_retrans
|
55
|
+
tcpi_snd_wnd
|
56
|
+
tcpi_snd_bwnd
|
57
|
+
tcpi_snd_nxt
|
58
|
+
tcpi_rcv_nxt
|
59
|
+
tcpi_toe_tid
|
60
|
+
tcpi_snd_rexmitpack
|
61
|
+
tcpi_rcv_ooopack
|
62
|
+
tcpi_snd_zerowin
|
63
|
+
).each do |field|
|
64
|
+
cfunc = "tcp_info_#{field}"
|
65
|
+
if have_struct_member('struct tcp_info', field, headers)
|
66
|
+
func_body = <<EOF
|
67
|
+
static VALUE #{cfunc}(VALUE self)
|
68
|
+
{
|
69
|
+
struct tcp_info *info = DATA_PTR(self);
|
70
|
+
return UINT2NUM((uint32_t)info->#{field});
|
71
|
+
}
|
72
|
+
EOF
|
73
|
+
func_body.delete!("\n")
|
74
|
+
$defs << "-DCFUNC_#{cfunc}=#{Shellwords.shellescape(func_body)}"
|
75
|
+
else
|
76
|
+
func_body = "static inline void #{cfunc}(void) {}"
|
77
|
+
$defs << "-DCFUNC_#{cfunc}=#{Shellwords.shellescape(func_body)}"
|
78
|
+
cfunc = 'rb_f_notimplement'.freeze
|
79
|
+
end
|
80
|
+
rbmethod = %Q("#{field.sub(/\Atcpi_/, ''.freeze)}")
|
81
|
+
$defs << "-DDEFINE_METHOD_tcp_info_#{field}=" \
|
82
|
+
"#{Shellwords.shellescape(
|
83
|
+
%Q[rb_define_method(cTCP_Info,#{rbmethod},#{cfunc},0)])}"
|
84
|
+
end
|
85
|
+
tcp_state_map = {
|
86
|
+
ESTABLISHED: %w(TCP_ESTABLISHED TCPS_ESTABLISHED),
|
87
|
+
SYN_SENT: %w(TCP_SYN_SENT TCPS_SYN_SENT),
|
88
|
+
SYN_RECV: %w(TCP_SYN_RECV TCPS_SYN_RECEIVED),
|
89
|
+
FIN_WAIT1: %w(TCP_FIN_WAIT1 TCPS_FIN_WAIT_1),
|
90
|
+
FIN_WAIT2: %w(TCP_FIN_WAIT2 TCPS_FIN_WAIT_2),
|
91
|
+
TIME_WAIT: %w(TCP_TIME_WAIT TCPS_TIME_WAIT),
|
92
|
+
CLOSE: %w(TCP_CLOSE TCPS_CLOSED),
|
93
|
+
CLOSE_WAIT: %w(TCP_CLOSE_WAIT TCPS_CLOSE_WAIT),
|
94
|
+
LAST_ACK: %w(TCP_LAST_ACK TCPS_LAST_ACK),
|
95
|
+
LISTEN: %w(TCP_LISTEN TCPS_LISTEN),
|
96
|
+
CLOSING: %w(TCP_CLOSING TCPS_CLOSING),
|
97
|
+
}
|
98
|
+
nstate = 0
|
99
|
+
tcp_state_map.each do |state, try|
|
100
|
+
try.each do |os_name|
|
101
|
+
have_const(os_name, headers) or next
|
102
|
+
tcp_state_map[state] = os_name
|
103
|
+
nstate += 1
|
104
|
+
end
|
105
|
+
end
|
106
|
+
if nstate == tcp_state_map.size
|
107
|
+
$defs << '-DRAINDROPS_TCP_STATES_ALL_KNOWN=1'
|
108
|
+
tcp_state_map.each do |state, name|
|
109
|
+
$defs << "-DRAINDROPS_TCP_#{state}=#{name}"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
11
114
|
have_func("getpagesize", "unistd.h")
|
115
|
+
have_func('rb_thread_call_without_gvl')
|
12
116
|
have_func('rb_thread_blocking_region')
|
13
117
|
have_func('rb_thread_io_blocking_region')
|
14
118
|
|
@@ -39,17 +143,18 @@ SRC
|
|
39
143
|
$defs.push(format("-DHAVE_GCC_ATOMIC_BUILTINS"))
|
40
144
|
true
|
41
145
|
else
|
42
|
-
|
146
|
+
$CFLAGS = prev_cflags
|
43
147
|
false
|
44
148
|
end
|
45
149
|
end
|
46
150
|
end or have_header('atomic_ops.h') or abort <<-SRC
|
47
151
|
|
48
152
|
libatomic_ops is required if GCC 4+ is not used.
|
49
|
-
See
|
153
|
+
See https://github.com/ivmai/libatomic_ops
|
50
154
|
|
51
155
|
Users of Debian-based distros may run:
|
52
156
|
|
53
157
|
apt-get install libatomic-ops-dev
|
54
158
|
SRC
|
159
|
+
create_header # generate extconf.h to avoid excessively long command-line
|
55
160
|
create_makefile('raindrops_ext')
|