itsi-scheduler 0.1.5 → 0.2.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 +4 -4
- data/Cargo.lock +120 -52
- data/README.md +57 -24
- data/Rakefile +0 -4
- data/ext/itsi_acme/Cargo.toml +86 -0
- data/ext/itsi_acme/examples/high_level.rs +63 -0
- data/ext/itsi_acme/examples/high_level_warp.rs +52 -0
- data/ext/itsi_acme/examples/low_level.rs +87 -0
- data/ext/itsi_acme/examples/low_level_axum.rs +66 -0
- data/ext/itsi_acme/src/acceptor.rs +81 -0
- data/ext/itsi_acme/src/acme.rs +354 -0
- data/ext/itsi_acme/src/axum.rs +86 -0
- data/ext/itsi_acme/src/cache.rs +39 -0
- data/ext/itsi_acme/src/caches/boxed.rs +80 -0
- data/ext/itsi_acme/src/caches/composite.rs +69 -0
- data/ext/itsi_acme/src/caches/dir.rs +106 -0
- data/ext/itsi_acme/src/caches/mod.rs +11 -0
- data/ext/itsi_acme/src/caches/no.rs +78 -0
- data/ext/itsi_acme/src/caches/test.rs +136 -0
- data/ext/itsi_acme/src/config.rs +172 -0
- data/ext/itsi_acme/src/https_helper.rs +69 -0
- data/ext/itsi_acme/src/incoming.rs +142 -0
- data/ext/itsi_acme/src/jose.rs +161 -0
- data/ext/itsi_acme/src/lib.rs +142 -0
- data/ext/itsi_acme/src/resolver.rs +59 -0
- data/ext/itsi_acme/src/state.rs +424 -0
- data/ext/itsi_error/Cargo.toml +1 -0
- data/ext/itsi_error/src/lib.rs +106 -7
- data/ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/common.rs +355 -0
- data/ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/dynamic.rs +276 -0
- data/ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/macros.rs +49 -0
- data/ext/itsi_error/target/debug/build/rb-sys-49f554618693db24/out/bindings-0.9.110-mri-arm64-darwin23-3.4.2.rs +8865 -0
- data/ext/itsi_error/target/debug/incremental/itsi_error-1mmt5sux7jb0i/s-h510z7m8v9-0bxu7yd.lock +0 -0
- data/ext/itsi_error/target/debug/incremental/itsi_error-2vn3jey74oiw0/s-h5113n0e7e-1v5qzs6.lock +0 -0
- data/ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510ykifhe-0tbnep2.lock +0 -0
- data/ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510yyocpj-0tz7ug7.lock +0 -0
- data/ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510z0xc8g-14ol18k.lock +0 -0
- data/ext/itsi_error/target/debug/incremental/itsi_error-3g5qf4y7d54uj/s-h5113n0e7d-1trk8on.lock +0 -0
- data/ext/itsi_error/target/debug/incremental/itsi_error-3lpfftm45d3e2/s-h510z7m8r3-1pxp20o.lock +0 -0
- data/ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510ykifek-1uxasnk.lock +0 -0
- data/ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510yyocki-11u37qm.lock +0 -0
- data/ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510z0xc93-0pmy0zm.lock +0 -0
- data/ext/itsi_rb_helpers/Cargo.toml +1 -0
- data/ext/itsi_rb_helpers/src/heap_value.rs +18 -0
- data/ext/itsi_rb_helpers/src/lib.rs +63 -12
- data/ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/common.rs +355 -0
- data/ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/dynamic.rs +276 -0
- data/ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/macros.rs +49 -0
- data/ext/itsi_rb_helpers/target/debug/build/rb-sys-eb9ed4ff3a60f995/out/bindings-0.9.110-mri-arm64-darwin23-3.4.2.rs +8865 -0
- data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-040pxg6yhb3g3/s-h5113n7a1b-03bwlt4.lock +0 -0
- data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-131g1u4dzkt1a/s-h51113xnh3-1eik1ip.lock +0 -0
- data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-131g1u4dzkt1a/s-h5111704jj-0g4rj8x.lock +0 -0
- data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-1q2d3drtxrzs5/s-h5113n79yl-0bxcqc5.lock +0 -0
- data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-374a9h7ovycj0/s-h51113xoox-10de2hp.lock +0 -0
- data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-374a9h7ovycj0/s-h5111704w7-0vdq7gq.lock +0 -0
- data/ext/itsi_scheduler/Cargo.toml +1 -1
- data/ext/itsi_scheduler/src/itsi_scheduler.rs +9 -3
- data/ext/itsi_scheduler/src/lib.rs +1 -0
- data/ext/itsi_server/Cargo.lock +2956 -0
- data/ext/itsi_server/Cargo.toml +73 -29
- data/ext/itsi_server/src/default_responses/mod.rs +11 -0
- data/ext/itsi_server/src/env.rs +43 -0
- data/ext/itsi_server/src/lib.rs +114 -75
- data/ext/itsi_server/src/prelude.rs +2 -0
- data/ext/itsi_server/src/{body_proxy → ruby_types/itsi_body_proxy}/big_bytes.rs +10 -5
- data/ext/itsi_server/src/{body_proxy/itsi_body_proxy.rs → ruby_types/itsi_body_proxy/mod.rs} +29 -8
- data/ext/itsi_server/src/ruby_types/itsi_grpc_call.rs +344 -0
- data/ext/itsi_server/src/ruby_types/itsi_grpc_response_stream/mod.rs +264 -0
- data/ext/itsi_server/src/ruby_types/itsi_http_request.rs +362 -0
- data/ext/itsi_server/src/{response/itsi_response.rs → ruby_types/itsi_http_response.rs} +84 -40
- data/ext/itsi_server/src/ruby_types/itsi_server/file_watcher.rs +233 -0
- data/ext/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +565 -0
- data/ext/itsi_server/src/ruby_types/itsi_server.rs +86 -0
- data/ext/itsi_server/src/ruby_types/mod.rs +48 -0
- data/ext/itsi_server/src/server/{bind.rs → binds/bind.rs} +59 -24
- data/ext/itsi_server/src/server/binds/listener.rs +444 -0
- data/ext/itsi_server/src/server/binds/mod.rs +4 -0
- data/ext/itsi_server/src/server/{tls → binds/tls}/locked_dir_cache.rs +57 -19
- data/ext/itsi_server/src/server/{tls.rs → binds/tls.rs} +120 -31
- data/ext/itsi_server/src/server/byte_frame.rs +32 -0
- data/ext/itsi_server/src/server/http_message_types.rs +97 -0
- data/ext/itsi_server/src/server/io_stream.rs +2 -1
- data/ext/itsi_server/src/server/lifecycle_event.rs +3 -0
- data/ext/itsi_server/src/server/middleware_stack/middleware.rs +170 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/allow_list.rs +63 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_api_key.rs +94 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_basic.rs +94 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs +343 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/cache_control.rs +151 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/compression.rs +316 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/cors.rs +301 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/csp.rs +193 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/deny_list.rs +64 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/error_response/default_responses.rs +192 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/error_response.rs +171 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/etag.rs +198 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/header_interpretation.rs +82 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/intrusion_protection.rs +209 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs +82 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/max_body.rs +47 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/mod.rs +116 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +411 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs +142 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/redirect.rs +55 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/request_headers.rs +54 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/response_headers.rs +51 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +126 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +187 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/static_response.rs +55 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/string_rewrite.rs +173 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/token_source.rs +31 -0
- data/ext/itsi_server/src/server/middleware_stack/mod.rs +381 -0
- data/ext/itsi_server/src/server/mod.rs +7 -5
- data/ext/itsi_server/src/server/process_worker.rs +65 -14
- data/ext/itsi_server/src/server/redirect_type.rs +26 -0
- data/ext/itsi_server/src/server/request_job.rs +11 -0
- data/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs +150 -50
- data/ext/itsi_server/src/server/serve_strategy/mod.rs +9 -6
- data/ext/itsi_server/src/server/serve_strategy/single_mode.rs +399 -165
- data/ext/itsi_server/src/server/signal.rs +33 -26
- data/ext/itsi_server/src/server/size_limited_incoming.rs +107 -0
- data/ext/itsi_server/src/server/thread_worker.rs +218 -107
- data/ext/itsi_server/src/services/cache_store.rs +74 -0
- data/ext/itsi_server/src/services/itsi_http_service.rs +257 -0
- data/ext/itsi_server/src/services/mime_types.rs +1416 -0
- data/ext/itsi_server/src/services/mod.rs +6 -0
- data/ext/itsi_server/src/services/password_hasher.rs +83 -0
- data/ext/itsi_server/src/services/rate_limiter.rs +580 -0
- data/ext/itsi_server/src/services/static_file_server.rs +1340 -0
- data/ext/itsi_tracing/Cargo.toml +1 -0
- data/ext/itsi_tracing/src/lib.rs +362 -33
- data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-0994n8rpvvt9m/s-h510hfz1f6-1kbycmq.lock +0 -0
- data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-0bob7bf4yq34i/s-h5113125h5-0lh4rag.lock +0 -0
- data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-2fcodulrxbbxo/s-h510h2infk-0hp5kjw.lock +0 -0
- data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-2iak63r1woi1l/s-h510h2in4q-0kxfzw1.lock +0 -0
- data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-2kk4qj9gn5dg2/s-h5113124kv-0enwon2.lock +0 -0
- data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-2mwo0yas7dtw4/s-h510hfz1ha-1udgpei.lock +0 -0
- data/itsi-scheduler-100.png +0 -0
- data/lib/itsi/scheduler/version.rb +1 -1
- data/lib/itsi/scheduler.rb +11 -6
- metadata +117 -24
- data/CHANGELOG.md +0 -5
- data/CODE_OF_CONDUCT.md +0 -132
- data/LICENSE.txt +0 -21
- data/ext/itsi_error/src/from.rs +0 -71
- data/ext/itsi_server/extconf.rb +0 -6
- data/ext/itsi_server/src/body_proxy/mod.rs +0 -2
- data/ext/itsi_server/src/request/itsi_request.rs +0 -277
- data/ext/itsi_server/src/request/mod.rs +0 -1
- data/ext/itsi_server/src/response/mod.rs +0 -1
- data/ext/itsi_server/src/server/itsi_ca/itsi_ca.crt +0 -13
- data/ext/itsi_server/src/server/itsi_ca/itsi_ca.key +0 -5
- data/ext/itsi_server/src/server/itsi_server.rs +0 -244
- data/ext/itsi_server/src/server/listener.rs +0 -327
- /data/ext/itsi_server/src/server/{bind_protocol.rs → binds/bind_protocol.rs} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa9ff40e944772c9c72d0f23e65d5f1e87b814e214f0020b75147cde05490366
|
4
|
+
data.tar.gz: e9cc7b428a5058d891410ae7ade7565ade5df3745152efce347656117984eae5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3cddb59ba844b65295aa1bdfba1ffa1e93472ae317ed031a2cf71e5bdf961dfc90cff9be6607c6d90f6b72b2b81bd2a623cb85617ac04397beb2ef90e7be2b88
|
7
|
+
data.tar.gz: 2b05e8c8056a12b59788139fa8e1e6acd23f32db79db317776aa0afd960825d9063c674b06aea34f56a901c4fade83c39da534a8bb9919933f00254ba02495c3
|
data/Cargo.lock
CHANGED
@@ -11,6 +11,12 @@ dependencies = [
|
|
11
11
|
"memchr",
|
12
12
|
]
|
13
13
|
|
14
|
+
[[package]]
|
15
|
+
name = "anyhow"
|
16
|
+
version = "1.0.97"
|
17
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
18
|
+
checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f"
|
19
|
+
|
14
20
|
[[package]]
|
15
21
|
name = "atty"
|
16
22
|
version = "0.2.14"
|
@@ -51,14 +57,14 @@ dependencies = [
|
|
51
57
|
"regex",
|
52
58
|
"rustc-hash",
|
53
59
|
"shlex",
|
54
|
-
"syn 2.0.
|
60
|
+
"syn 2.0.100",
|
55
61
|
]
|
56
62
|
|
57
63
|
[[package]]
|
58
64
|
name = "bitflags"
|
59
|
-
version = "2.
|
65
|
+
version = "2.9.0"
|
60
66
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
61
|
-
checksum = "
|
67
|
+
checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
|
62
68
|
|
63
69
|
[[package]]
|
64
70
|
name = "bytes"
|
@@ -68,9 +74,9 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
|
|
68
74
|
|
69
75
|
[[package]]
|
70
76
|
name = "cc"
|
71
|
-
version = "1.2.
|
77
|
+
version = "1.2.19"
|
72
78
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
73
|
-
checksum = "
|
79
|
+
checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362"
|
74
80
|
dependencies = [
|
75
81
|
"shlex",
|
76
82
|
]
|
@@ -107,11 +113,26 @@ dependencies = [
|
|
107
113
|
"libloading",
|
108
114
|
]
|
109
115
|
|
116
|
+
[[package]]
|
117
|
+
name = "crossbeam-channel"
|
118
|
+
version = "0.5.15"
|
119
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
120
|
+
checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
|
121
|
+
dependencies = [
|
122
|
+
"crossbeam-utils",
|
123
|
+
]
|
124
|
+
|
125
|
+
[[package]]
|
126
|
+
name = "crossbeam-utils"
|
127
|
+
version = "0.8.21"
|
128
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
129
|
+
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
|
130
|
+
|
110
131
|
[[package]]
|
111
132
|
name = "deranged"
|
112
|
-
version = "0.
|
133
|
+
version = "0.4.0"
|
113
134
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
114
|
-
checksum = "
|
135
|
+
checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e"
|
115
136
|
dependencies = [
|
116
137
|
"powerfmt",
|
117
138
|
]
|
@@ -133,15 +154,15 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3"
|
|
133
154
|
dependencies = [
|
134
155
|
"proc-macro2",
|
135
156
|
"quote",
|
136
|
-
"syn 2.0.
|
157
|
+
"syn 2.0.100",
|
137
158
|
"unicode-xid",
|
138
159
|
]
|
139
160
|
|
140
161
|
[[package]]
|
141
162
|
name = "either"
|
142
|
-
version = "1.
|
163
|
+
version = "1.15.0"
|
143
164
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
144
|
-
checksum = "
|
165
|
+
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
|
145
166
|
|
146
167
|
[[package]]
|
147
168
|
name = "getrandom"
|
@@ -192,7 +213,7 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
|
|
192
213
|
|
193
214
|
[[package]]
|
194
215
|
name = "itsi-scheduler"
|
195
|
-
version = "0.
|
216
|
+
version = "0.2.2"
|
196
217
|
dependencies = [
|
197
218
|
"bytes",
|
198
219
|
"derive_more",
|
@@ -212,11 +233,12 @@ dependencies = [
|
|
212
233
|
name = "itsi_error"
|
213
234
|
version = "0.1.0"
|
214
235
|
dependencies = [
|
236
|
+
"anyhow",
|
215
237
|
"httparse",
|
216
238
|
"magnus",
|
217
239
|
"nix",
|
218
240
|
"rcgen",
|
219
|
-
"thiserror",
|
241
|
+
"thiserror 2.0.12",
|
220
242
|
]
|
221
243
|
|
222
244
|
[[package]]
|
@@ -236,6 +258,7 @@ dependencies = [
|
|
236
258
|
"magnus",
|
237
259
|
"nix",
|
238
260
|
"rb-sys",
|
261
|
+
"serde",
|
239
262
|
]
|
240
263
|
|
241
264
|
[[package]]
|
@@ -244,6 +267,7 @@ version = "0.1.0"
|
|
244
267
|
dependencies = [
|
245
268
|
"atty",
|
246
269
|
"tracing",
|
270
|
+
"tracing-appender",
|
247
271
|
"tracing-attributes",
|
248
272
|
"tracing-subscriber",
|
249
273
|
]
|
@@ -262,9 +286,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
|
|
262
286
|
|
263
287
|
[[package]]
|
264
288
|
name = "libc"
|
265
|
-
version = "0.2.
|
289
|
+
version = "0.2.171"
|
266
290
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
267
|
-
checksum = "
|
291
|
+
checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6"
|
268
292
|
|
269
293
|
[[package]]
|
270
294
|
name = "libloading"
|
@@ -288,9 +312,9 @@ dependencies = [
|
|
288
312
|
|
289
313
|
[[package]]
|
290
314
|
name = "log"
|
291
|
-
version = "0.4.
|
315
|
+
version = "0.4.27"
|
292
316
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
293
|
-
checksum = "
|
317
|
+
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
|
294
318
|
|
295
319
|
[[package]]
|
296
320
|
name = "magnus"
|
@@ -313,7 +337,7 @@ checksum = "5968c820e2960565f647819f5928a42d6e874551cab9d88d75e3e0660d7f71e3"
|
|
313
337
|
dependencies = [
|
314
338
|
"proc-macro2",
|
315
339
|
"quote",
|
316
|
-
"syn 2.0.
|
340
|
+
"syn 2.0.100",
|
317
341
|
]
|
318
342
|
|
319
343
|
[[package]]
|
@@ -389,9 +413,9 @@ checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
|
|
389
413
|
|
390
414
|
[[package]]
|
391
415
|
name = "once_cell"
|
392
|
-
version = "1.
|
416
|
+
version = "1.21.3"
|
393
417
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
394
|
-
checksum = "
|
418
|
+
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
|
395
419
|
|
396
420
|
[[package]]
|
397
421
|
name = "overload"
|
@@ -446,18 +470,18 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
|
|
446
470
|
|
447
471
|
[[package]]
|
448
472
|
name = "proc-macro2"
|
449
|
-
version = "1.0.
|
473
|
+
version = "1.0.94"
|
450
474
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
451
|
-
checksum = "
|
475
|
+
checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
|
452
476
|
dependencies = [
|
453
477
|
"unicode-ident",
|
454
478
|
]
|
455
479
|
|
456
480
|
[[package]]
|
457
481
|
name = "quote"
|
458
|
-
version = "1.0.
|
482
|
+
version = "1.0.40"
|
459
483
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
460
|
-
checksum = "
|
484
|
+
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
|
461
485
|
dependencies = [
|
462
486
|
"proc-macro2",
|
463
487
|
]
|
@@ -483,7 +507,7 @@ dependencies = [
|
|
483
507
|
"quote",
|
484
508
|
"regex",
|
485
509
|
"shell-words",
|
486
|
-
"syn 2.0.
|
510
|
+
"syn 2.0.100",
|
487
511
|
]
|
488
512
|
|
489
513
|
[[package]]
|
@@ -507,9 +531,9 @@ dependencies = [
|
|
507
531
|
|
508
532
|
[[package]]
|
509
533
|
name = "redox_syscall"
|
510
|
-
version = "0.5.
|
534
|
+
version = "0.5.11"
|
511
535
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
512
|
-
checksum = "
|
536
|
+
checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3"
|
513
537
|
dependencies = [
|
514
538
|
"bitflags",
|
515
539
|
]
|
@@ -560,9 +584,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
|
560
584
|
|
561
585
|
[[package]]
|
562
586
|
name = "ring"
|
563
|
-
version = "0.17.
|
587
|
+
version = "0.17.14"
|
564
588
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
565
|
-
checksum = "
|
589
|
+
checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
|
566
590
|
dependencies = [
|
567
591
|
"cc",
|
568
592
|
"cfg-if",
|
@@ -598,28 +622,28 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
|
598
622
|
|
599
623
|
[[package]]
|
600
624
|
name = "seq-macro"
|
601
|
-
version = "0.3.
|
625
|
+
version = "0.3.6"
|
602
626
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
603
|
-
checksum = "
|
627
|
+
checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc"
|
604
628
|
|
605
629
|
[[package]]
|
606
630
|
name = "serde"
|
607
|
-
version = "1.0.
|
631
|
+
version = "1.0.219"
|
608
632
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
609
|
-
checksum = "
|
633
|
+
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
|
610
634
|
dependencies = [
|
611
635
|
"serde_derive",
|
612
636
|
]
|
613
637
|
|
614
638
|
[[package]]
|
615
639
|
name = "serde_derive"
|
616
|
-
version = "1.0.
|
640
|
+
version = "1.0.219"
|
617
641
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
618
|
-
checksum = "
|
642
|
+
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
|
619
643
|
dependencies = [
|
620
644
|
"proc-macro2",
|
621
645
|
"quote",
|
622
|
-
"syn 2.0.
|
646
|
+
"syn 2.0.100",
|
623
647
|
]
|
624
648
|
|
625
649
|
[[package]]
|
@@ -657,9 +681,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
|
|
657
681
|
|
658
682
|
[[package]]
|
659
683
|
name = "smallvec"
|
660
|
-
version = "1.
|
684
|
+
version = "1.15.0"
|
661
685
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
662
|
-
checksum = "
|
686
|
+
checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9"
|
663
687
|
|
664
688
|
[[package]]
|
665
689
|
name = "syn"
|
@@ -674,9 +698,9 @@ dependencies = [
|
|
674
698
|
|
675
699
|
[[package]]
|
676
700
|
name = "syn"
|
677
|
-
version = "2.0.
|
701
|
+
version = "2.0.100"
|
678
702
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
679
|
-
checksum = "
|
703
|
+
checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
|
680
704
|
dependencies = [
|
681
705
|
"proc-macro2",
|
682
706
|
"quote",
|
@@ -685,22 +709,42 @@ dependencies = [
|
|
685
709
|
|
686
710
|
[[package]]
|
687
711
|
name = "thiserror"
|
688
|
-
version = "
|
712
|
+
version = "1.0.69"
|
713
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
714
|
+
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
|
715
|
+
dependencies = [
|
716
|
+
"thiserror-impl 1.0.69",
|
717
|
+
]
|
718
|
+
|
719
|
+
[[package]]
|
720
|
+
name = "thiserror"
|
721
|
+
version = "2.0.12"
|
722
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
723
|
+
checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
|
724
|
+
dependencies = [
|
725
|
+
"thiserror-impl 2.0.12",
|
726
|
+
]
|
727
|
+
|
728
|
+
[[package]]
|
729
|
+
name = "thiserror-impl"
|
730
|
+
version = "1.0.69"
|
689
731
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
690
|
-
checksum = "
|
732
|
+
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
|
691
733
|
dependencies = [
|
692
|
-
"
|
734
|
+
"proc-macro2",
|
735
|
+
"quote",
|
736
|
+
"syn 2.0.100",
|
693
737
|
]
|
694
738
|
|
695
739
|
[[package]]
|
696
740
|
name = "thiserror-impl"
|
697
|
-
version = "2.0.
|
741
|
+
version = "2.0.12"
|
698
742
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
699
|
-
checksum = "
|
743
|
+
checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
|
700
744
|
dependencies = [
|
701
745
|
"proc-macro2",
|
702
746
|
"quote",
|
703
|
-
"syn 2.0.
|
747
|
+
"syn 2.0.100",
|
704
748
|
]
|
705
749
|
|
706
750
|
[[package]]
|
@@ -715,22 +759,34 @@ dependencies = [
|
|
715
759
|
|
716
760
|
[[package]]
|
717
761
|
name = "time"
|
718
|
-
version = "0.3.
|
762
|
+
version = "0.3.41"
|
719
763
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
720
|
-
checksum = "
|
764
|
+
checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40"
|
721
765
|
dependencies = [
|
722
766
|
"deranged",
|
767
|
+
"itoa",
|
723
768
|
"num-conv",
|
724
769
|
"powerfmt",
|
725
770
|
"serde",
|
726
771
|
"time-core",
|
772
|
+
"time-macros",
|
727
773
|
]
|
728
774
|
|
729
775
|
[[package]]
|
730
776
|
name = "time-core"
|
731
|
-
version = "0.1.
|
777
|
+
version = "0.1.4"
|
778
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
779
|
+
checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c"
|
780
|
+
|
781
|
+
[[package]]
|
782
|
+
name = "time-macros"
|
783
|
+
version = "0.2.22"
|
732
784
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
733
|
-
checksum = "
|
785
|
+
checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49"
|
786
|
+
dependencies = [
|
787
|
+
"num-conv",
|
788
|
+
"time-core",
|
789
|
+
]
|
734
790
|
|
735
791
|
[[package]]
|
736
792
|
name = "tracing"
|
@@ -743,6 +799,18 @@ dependencies = [
|
|
743
799
|
"tracing-core",
|
744
800
|
]
|
745
801
|
|
802
|
+
[[package]]
|
803
|
+
name = "tracing-appender"
|
804
|
+
version = "0.2.3"
|
805
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
806
|
+
checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf"
|
807
|
+
dependencies = [
|
808
|
+
"crossbeam-channel",
|
809
|
+
"thiserror 1.0.69",
|
810
|
+
"time",
|
811
|
+
"tracing-subscriber",
|
812
|
+
]
|
813
|
+
|
746
814
|
[[package]]
|
747
815
|
name = "tracing-attributes"
|
748
816
|
version = "0.1.28"
|
@@ -751,7 +819,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
|
|
751
819
|
dependencies = [
|
752
820
|
"proc-macro2",
|
753
821
|
"quote",
|
754
|
-
"syn 2.0.
|
822
|
+
"syn 2.0.100",
|
755
823
|
]
|
756
824
|
|
757
825
|
[[package]]
|
@@ -808,9 +876,9 @@ dependencies = [
|
|
808
876
|
|
809
877
|
[[package]]
|
810
878
|
name = "unicode-ident"
|
811
|
-
version = "1.0.
|
879
|
+
version = "1.0.18"
|
812
880
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
813
|
-
checksum = "
|
881
|
+
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
|
814
882
|
|
815
883
|
[[package]]
|
816
884
|
name = "unicode-xid"
|
data/README.md
CHANGED
@@ -1,43 +1,76 @@
|
|
1
|
-
|
1
|
+
---
|
2
|
+
title: Itsi Scheduler
|
3
|
+
type: docs
|
4
|
+
weight: 4
|
5
|
+
sidebar:
|
6
|
+
exclude: true
|
7
|
+
---
|
8
|
+
<img src="itsi-scheduler-100.png" width="80px" style="display: block; margin-left: auto; margin-right: auto;">
|
2
9
|
|
3
|
-
|
10
|
+
`Itsi Scheduler` is an implementation of a Ruby [Fiber Scheduler](https://docs.ruby-lang.org/en/3.2/Fiber/Scheduler.html).
|
4
11
|
|
5
|
-
|
12
|
+
When combined with Itsi Server, you can write endpoints that look just like regular synchronous Ruby code. Behind the scenes, the scheduler will transparently pause and resume fibers to prevent threads from blocking, greatly increasing throughput for I/O-heavy workloads
|
6
13
|
|
7
|
-
|
14
|
+
If you're purely after a lightweight, yet efficient Ruby scheduler,
|
15
|
+
you can use Itsi Scheduler as a standalone scheduler for any Ruby application.
|
8
16
|
|
9
|
-
|
17
|
+
Just use `Fiber.set_scheduler` to set an instance `Itsi::Scheduler` as a scheduler to opt in to this IO weaving behavior
|
18
|
+
*automatically* for all blocking IO.
|
10
19
|
|
11
|
-
|
20
|
+
### Primer on Fiber Schedulers
|
12
21
|
|
13
|
-
|
14
|
-
|
15
|
-
|
22
|
+
Fiber schedulers are a way to automatically manage the execution of non-blocking fibers in Ruby. A scheduler is responsible for the automatic pausing and resumption of Fibers based
|
23
|
+
on whether or not they are awaiting IO operations.
|
24
|
+
Ruby's Fiber scheduler implementation automatically invokes the current Fiber scheduler (if it exists) for each blocking operation, allowing it to seamlessly drive the execution of huge numbers of simultaneous non-blocking fibers
|
25
|
+
while ensuring the main thread is never blocked on IO.
|
16
26
|
|
17
|
-
|
27
|
+
This behind the scenes magic allows Ruby to provide async IO (just like we find in languages with `async/await` like `Rust`, `C#`, `JavaScript`) *but* with the added beauty
|
28
|
+
that synchronous and asynchronous code is identical! (I.e. Ruby's functions are [colorless](https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/))
|
18
29
|
|
19
|
-
|
20
|
-
|
21
|
-
```
|
30
|
+
## Getting Started
|
31
|
+
To install and use Itsi Scheduler follow the instructions below:
|
22
32
|
|
23
|
-
## Usage
|
24
33
|
|
25
|
-
|
34
|
+
### 1 - Install Itsi Scheduler
|
26
35
|
|
27
|
-
|
36
|
+
**Prerequisites**
|
28
37
|
|
29
|
-
|
38
|
+
You'll need at least `build-essential` and `libclang-dev` installed to build Itsi on Linux.
|
39
|
+
E.g.
|
40
|
+
```bash
|
41
|
+
apt-get install build-essential libclang-dev
|
42
|
+
```
|
30
43
|
|
31
|
-
|
44
|
+
Then use `gem` to install the Itsi package. This will in turn install both the
|
45
|
+
`itsi-server` gem, and the `itsi-scheduler` gem.
|
32
46
|
|
33
|
-
## Contributing
|
34
47
|
|
35
|
-
|
48
|
+
```bash
|
49
|
+
gem install itsi-scheduler
|
50
|
+
```
|
51
|
+
|
36
52
|
|
37
|
-
|
53
|
+
### 2 - Use Itsi Scheduler
|
38
54
|
|
39
|
-
|
55
|
+
Great! You now have Itsi Scheduler installed.
|
56
|
+
Now you can run code like this:
|
40
57
|
|
41
|
-
|
58
|
+
```ruby
|
59
|
+
require 'itsi/scheduler'
|
60
|
+
require 'socket'
|
61
|
+
results = Thread.new do
|
62
|
+
Fiber.set_scheduler Itsi::Scheduler.new
|
63
|
+
results = []
|
64
|
+
Fiber.schedule do
|
65
|
+
results << Addrinfo.getaddrinfo("www.ruby-lang.org", 80, nil, :STREAM)
|
66
|
+
end
|
67
|
+
Fiber.schedule do
|
68
|
+
results << Addrinfo.getaddrinfo("www.google.com", 80, nil, :STREAM)
|
69
|
+
end
|
70
|
+
results
|
71
|
+
end.value
|
72
|
+
|
73
|
+
puts results.map(&:inspect)
|
74
|
+
```
|
42
75
|
|
43
|
-
|
76
|
+
to run many blocking operations simultaneously all while occupying only a single Ruby thread!
|
data/Rakefile
CHANGED
@@ -0,0 +1,86 @@
|
|
1
|
+
[package]
|
2
|
+
name = "itsi_acme"
|
3
|
+
version = "0.1.0"
|
4
|
+
authors = [
|
5
|
+
"wouterkem <wc@pico.net.nz>",
|
6
|
+
"dignifiedquire <me@dignifiedquire.com>",
|
7
|
+
"Florian Uekermann <florian@uekermann.me>",
|
8
|
+
]
|
9
|
+
edition = "2018"
|
10
|
+
description = "Automatic TLS certificate management using rustls, specifically for itsi"
|
11
|
+
license = "Apache-2.0 OR MIT"
|
12
|
+
repository = "https://github.com/n0-computer/tokio-rustls-acme"
|
13
|
+
documentation = "https://docs.rs/tokio-rustls-acme"
|
14
|
+
keywords = ["acme", "rustls", "tls", "letsencrypt"]
|
15
|
+
categories = ["asynchronous", "cryptography", "network-programming"]
|
16
|
+
|
17
|
+
[dependencies]
|
18
|
+
futures = "0.3.21"
|
19
|
+
rcgen = "0.13"
|
20
|
+
serde_json = "1.0.81"
|
21
|
+
serde = { version = "1.0.137", features = ["derive"] }
|
22
|
+
ring = { version = "0.17.0", features = ["std"] }
|
23
|
+
base64 = "0.22"
|
24
|
+
log = "0.4.17"
|
25
|
+
webpki-roots = "0.26"
|
26
|
+
pem = "3.0"
|
27
|
+
thiserror = "2.0"
|
28
|
+
x509-parser = "0.16"
|
29
|
+
chrono = { version = "0.4.24", default-features = false, features = ["clock"] }
|
30
|
+
async-trait = "0.1.53"
|
31
|
+
rustls = { version = "0.23", default-features = false, features = ["ring"] }
|
32
|
+
time = "0.3.36" # force the transitive dependency to a more recent minimal version. The build fails with 0.3.20
|
33
|
+
|
34
|
+
tokio = { version = "1.20.1", default-features = false }
|
35
|
+
tokio-rustls = { version = "0.26", default-features = false, features = [
|
36
|
+
"tls12",
|
37
|
+
] }
|
38
|
+
reqwest = { version = "0.12", default-features = false, features = [
|
39
|
+
"rustls-tls",
|
40
|
+
] }
|
41
|
+
|
42
|
+
# Axum
|
43
|
+
axum-server = { version = "0.7", features = ["tokio-rustls"], optional = true }
|
44
|
+
|
45
|
+
[dependencies.proc-macro2]
|
46
|
+
# This is a transitive dependency, we specify it to make sure we have
|
47
|
+
# a recent-enough version so that -Z minimal-versions crate resolution
|
48
|
+
# works.
|
49
|
+
version = "1.0.78"
|
50
|
+
|
51
|
+
[dependencies.num-bigint]
|
52
|
+
# This is a transitive dependency, we specify it to make sure we have
|
53
|
+
# a recent-enough version so that -Z minimal-versions crate resolution
|
54
|
+
# works.
|
55
|
+
version = "0.4.4"
|
56
|
+
|
57
|
+
[dev-dependencies]
|
58
|
+
simple_logger = "5.0"
|
59
|
+
structopt = "0.3.26"
|
60
|
+
clap = { version = "4", features = ["derive"] }
|
61
|
+
axum = "0.7"
|
62
|
+
tokio = { version = "1.19.2", features = ["full"] }
|
63
|
+
tokio-stream = { version = "0.1.9", features = ["net"] }
|
64
|
+
tokio-util = { version = "0.7.3", features = ["compat"] }
|
65
|
+
warp = "0.3"
|
66
|
+
|
67
|
+
[package.metadata.docs.rs]
|
68
|
+
all-features = true
|
69
|
+
rustdoc-args = ["--cfg", "doc_auto_cfg"]
|
70
|
+
|
71
|
+
[features]
|
72
|
+
default = []
|
73
|
+
axum = ["dep:axum-server"]
|
74
|
+
|
75
|
+
[[example]]
|
76
|
+
name = "low_level_axum"
|
77
|
+
required-features = ["axum"]
|
78
|
+
|
79
|
+
[[example]]
|
80
|
+
name = "high_level_warp"
|
81
|
+
|
82
|
+
[[example]]
|
83
|
+
name = "high_level"
|
84
|
+
|
85
|
+
[[example]]
|
86
|
+
name = "low_level"
|