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.
Files changed (155) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +120 -52
  3. data/README.md +57 -24
  4. data/Rakefile +0 -4
  5. data/ext/itsi_acme/Cargo.toml +86 -0
  6. data/ext/itsi_acme/examples/high_level.rs +63 -0
  7. data/ext/itsi_acme/examples/high_level_warp.rs +52 -0
  8. data/ext/itsi_acme/examples/low_level.rs +87 -0
  9. data/ext/itsi_acme/examples/low_level_axum.rs +66 -0
  10. data/ext/itsi_acme/src/acceptor.rs +81 -0
  11. data/ext/itsi_acme/src/acme.rs +354 -0
  12. data/ext/itsi_acme/src/axum.rs +86 -0
  13. data/ext/itsi_acme/src/cache.rs +39 -0
  14. data/ext/itsi_acme/src/caches/boxed.rs +80 -0
  15. data/ext/itsi_acme/src/caches/composite.rs +69 -0
  16. data/ext/itsi_acme/src/caches/dir.rs +106 -0
  17. data/ext/itsi_acme/src/caches/mod.rs +11 -0
  18. data/ext/itsi_acme/src/caches/no.rs +78 -0
  19. data/ext/itsi_acme/src/caches/test.rs +136 -0
  20. data/ext/itsi_acme/src/config.rs +172 -0
  21. data/ext/itsi_acme/src/https_helper.rs +69 -0
  22. data/ext/itsi_acme/src/incoming.rs +142 -0
  23. data/ext/itsi_acme/src/jose.rs +161 -0
  24. data/ext/itsi_acme/src/lib.rs +142 -0
  25. data/ext/itsi_acme/src/resolver.rs +59 -0
  26. data/ext/itsi_acme/src/state.rs +424 -0
  27. data/ext/itsi_error/Cargo.toml +1 -0
  28. data/ext/itsi_error/src/lib.rs +106 -7
  29. data/ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/common.rs +355 -0
  30. data/ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/dynamic.rs +276 -0
  31. data/ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/macros.rs +49 -0
  32. data/ext/itsi_error/target/debug/build/rb-sys-49f554618693db24/out/bindings-0.9.110-mri-arm64-darwin23-3.4.2.rs +8865 -0
  33. data/ext/itsi_error/target/debug/incremental/itsi_error-1mmt5sux7jb0i/s-h510z7m8v9-0bxu7yd.lock +0 -0
  34. data/ext/itsi_error/target/debug/incremental/itsi_error-2vn3jey74oiw0/s-h5113n0e7e-1v5qzs6.lock +0 -0
  35. data/ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510ykifhe-0tbnep2.lock +0 -0
  36. data/ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510yyocpj-0tz7ug7.lock +0 -0
  37. data/ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510z0xc8g-14ol18k.lock +0 -0
  38. data/ext/itsi_error/target/debug/incremental/itsi_error-3g5qf4y7d54uj/s-h5113n0e7d-1trk8on.lock +0 -0
  39. data/ext/itsi_error/target/debug/incremental/itsi_error-3lpfftm45d3e2/s-h510z7m8r3-1pxp20o.lock +0 -0
  40. data/ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510ykifek-1uxasnk.lock +0 -0
  41. data/ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510yyocki-11u37qm.lock +0 -0
  42. data/ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510z0xc93-0pmy0zm.lock +0 -0
  43. data/ext/itsi_rb_helpers/Cargo.toml +1 -0
  44. data/ext/itsi_rb_helpers/src/heap_value.rs +18 -0
  45. data/ext/itsi_rb_helpers/src/lib.rs +63 -12
  46. data/ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/common.rs +355 -0
  47. data/ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/dynamic.rs +276 -0
  48. data/ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/macros.rs +49 -0
  49. 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
  50. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-040pxg6yhb3g3/s-h5113n7a1b-03bwlt4.lock +0 -0
  51. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-131g1u4dzkt1a/s-h51113xnh3-1eik1ip.lock +0 -0
  52. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-131g1u4dzkt1a/s-h5111704jj-0g4rj8x.lock +0 -0
  53. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-1q2d3drtxrzs5/s-h5113n79yl-0bxcqc5.lock +0 -0
  54. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-374a9h7ovycj0/s-h51113xoox-10de2hp.lock +0 -0
  55. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-374a9h7ovycj0/s-h5111704w7-0vdq7gq.lock +0 -0
  56. data/ext/itsi_scheduler/Cargo.toml +1 -1
  57. data/ext/itsi_scheduler/src/itsi_scheduler.rs +9 -3
  58. data/ext/itsi_scheduler/src/lib.rs +1 -0
  59. data/ext/itsi_server/Cargo.lock +2956 -0
  60. data/ext/itsi_server/Cargo.toml +73 -29
  61. data/ext/itsi_server/src/default_responses/mod.rs +11 -0
  62. data/ext/itsi_server/src/env.rs +43 -0
  63. data/ext/itsi_server/src/lib.rs +114 -75
  64. data/ext/itsi_server/src/prelude.rs +2 -0
  65. data/ext/itsi_server/src/{body_proxy → ruby_types/itsi_body_proxy}/big_bytes.rs +10 -5
  66. data/ext/itsi_server/src/{body_proxy/itsi_body_proxy.rs → ruby_types/itsi_body_proxy/mod.rs} +29 -8
  67. data/ext/itsi_server/src/ruby_types/itsi_grpc_call.rs +344 -0
  68. data/ext/itsi_server/src/ruby_types/itsi_grpc_response_stream/mod.rs +264 -0
  69. data/ext/itsi_server/src/ruby_types/itsi_http_request.rs +362 -0
  70. data/ext/itsi_server/src/{response/itsi_response.rs → ruby_types/itsi_http_response.rs} +84 -40
  71. data/ext/itsi_server/src/ruby_types/itsi_server/file_watcher.rs +233 -0
  72. data/ext/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +565 -0
  73. data/ext/itsi_server/src/ruby_types/itsi_server.rs +86 -0
  74. data/ext/itsi_server/src/ruby_types/mod.rs +48 -0
  75. data/ext/itsi_server/src/server/{bind.rs → binds/bind.rs} +59 -24
  76. data/ext/itsi_server/src/server/binds/listener.rs +444 -0
  77. data/ext/itsi_server/src/server/binds/mod.rs +4 -0
  78. data/ext/itsi_server/src/server/{tls → binds/tls}/locked_dir_cache.rs +57 -19
  79. data/ext/itsi_server/src/server/{tls.rs → binds/tls.rs} +120 -31
  80. data/ext/itsi_server/src/server/byte_frame.rs +32 -0
  81. data/ext/itsi_server/src/server/http_message_types.rs +97 -0
  82. data/ext/itsi_server/src/server/io_stream.rs +2 -1
  83. data/ext/itsi_server/src/server/lifecycle_event.rs +3 -0
  84. data/ext/itsi_server/src/server/middleware_stack/middleware.rs +170 -0
  85. data/ext/itsi_server/src/server/middleware_stack/middlewares/allow_list.rs +63 -0
  86. data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_api_key.rs +94 -0
  87. data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_basic.rs +94 -0
  88. data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs +343 -0
  89. data/ext/itsi_server/src/server/middleware_stack/middlewares/cache_control.rs +151 -0
  90. data/ext/itsi_server/src/server/middleware_stack/middlewares/compression.rs +316 -0
  91. data/ext/itsi_server/src/server/middleware_stack/middlewares/cors.rs +301 -0
  92. data/ext/itsi_server/src/server/middleware_stack/middlewares/csp.rs +193 -0
  93. data/ext/itsi_server/src/server/middleware_stack/middlewares/deny_list.rs +64 -0
  94. data/ext/itsi_server/src/server/middleware_stack/middlewares/error_response/default_responses.rs +192 -0
  95. data/ext/itsi_server/src/server/middleware_stack/middlewares/error_response.rs +171 -0
  96. data/ext/itsi_server/src/server/middleware_stack/middlewares/etag.rs +198 -0
  97. data/ext/itsi_server/src/server/middleware_stack/middlewares/header_interpretation.rs +82 -0
  98. data/ext/itsi_server/src/server/middleware_stack/middlewares/intrusion_protection.rs +209 -0
  99. data/ext/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs +82 -0
  100. data/ext/itsi_server/src/server/middleware_stack/middlewares/max_body.rs +47 -0
  101. data/ext/itsi_server/src/server/middleware_stack/middlewares/mod.rs +116 -0
  102. data/ext/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +411 -0
  103. data/ext/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs +142 -0
  104. data/ext/itsi_server/src/server/middleware_stack/middlewares/redirect.rs +55 -0
  105. data/ext/itsi_server/src/server/middleware_stack/middlewares/request_headers.rs +54 -0
  106. data/ext/itsi_server/src/server/middleware_stack/middlewares/response_headers.rs +51 -0
  107. data/ext/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +126 -0
  108. data/ext/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +187 -0
  109. data/ext/itsi_server/src/server/middleware_stack/middlewares/static_response.rs +55 -0
  110. data/ext/itsi_server/src/server/middleware_stack/middlewares/string_rewrite.rs +173 -0
  111. data/ext/itsi_server/src/server/middleware_stack/middlewares/token_source.rs +31 -0
  112. data/ext/itsi_server/src/server/middleware_stack/mod.rs +381 -0
  113. data/ext/itsi_server/src/server/mod.rs +7 -5
  114. data/ext/itsi_server/src/server/process_worker.rs +65 -14
  115. data/ext/itsi_server/src/server/redirect_type.rs +26 -0
  116. data/ext/itsi_server/src/server/request_job.rs +11 -0
  117. data/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs +150 -50
  118. data/ext/itsi_server/src/server/serve_strategy/mod.rs +9 -6
  119. data/ext/itsi_server/src/server/serve_strategy/single_mode.rs +399 -165
  120. data/ext/itsi_server/src/server/signal.rs +33 -26
  121. data/ext/itsi_server/src/server/size_limited_incoming.rs +107 -0
  122. data/ext/itsi_server/src/server/thread_worker.rs +218 -107
  123. data/ext/itsi_server/src/services/cache_store.rs +74 -0
  124. data/ext/itsi_server/src/services/itsi_http_service.rs +257 -0
  125. data/ext/itsi_server/src/services/mime_types.rs +1416 -0
  126. data/ext/itsi_server/src/services/mod.rs +6 -0
  127. data/ext/itsi_server/src/services/password_hasher.rs +83 -0
  128. data/ext/itsi_server/src/services/rate_limiter.rs +580 -0
  129. data/ext/itsi_server/src/services/static_file_server.rs +1340 -0
  130. data/ext/itsi_tracing/Cargo.toml +1 -0
  131. data/ext/itsi_tracing/src/lib.rs +362 -33
  132. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-0994n8rpvvt9m/s-h510hfz1f6-1kbycmq.lock +0 -0
  133. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-0bob7bf4yq34i/s-h5113125h5-0lh4rag.lock +0 -0
  134. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-2fcodulrxbbxo/s-h510h2infk-0hp5kjw.lock +0 -0
  135. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-2iak63r1woi1l/s-h510h2in4q-0kxfzw1.lock +0 -0
  136. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-2kk4qj9gn5dg2/s-h5113124kv-0enwon2.lock +0 -0
  137. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-2mwo0yas7dtw4/s-h510hfz1ha-1udgpei.lock +0 -0
  138. data/itsi-scheduler-100.png +0 -0
  139. data/lib/itsi/scheduler/version.rb +1 -1
  140. data/lib/itsi/scheduler.rb +11 -6
  141. metadata +117 -24
  142. data/CHANGELOG.md +0 -5
  143. data/CODE_OF_CONDUCT.md +0 -132
  144. data/LICENSE.txt +0 -21
  145. data/ext/itsi_error/src/from.rs +0 -71
  146. data/ext/itsi_server/extconf.rb +0 -6
  147. data/ext/itsi_server/src/body_proxy/mod.rs +0 -2
  148. data/ext/itsi_server/src/request/itsi_request.rs +0 -277
  149. data/ext/itsi_server/src/request/mod.rs +0 -1
  150. data/ext/itsi_server/src/response/mod.rs +0 -1
  151. data/ext/itsi_server/src/server/itsi_ca/itsi_ca.crt +0 -13
  152. data/ext/itsi_server/src/server/itsi_ca/itsi_ca.key +0 -5
  153. data/ext/itsi_server/src/server/itsi_server.rs +0 -244
  154. data/ext/itsi_server/src/server/listener.rs +0 -327
  155. /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: 75599726844e215e80b59ae8a95549e23024e4e070d768ca3f085a8fbb2591a9
4
- data.tar.gz: c84726c45c08562ad4b8ebd4a6c9eb4ebd1f50521afca027c1e6a69d8b2e4eb5
3
+ metadata.gz: aa9ff40e944772c9c72d0f23e65d5f1e87b814e214f0020b75147cde05490366
4
+ data.tar.gz: e9cc7b428a5058d891410ae7ade7565ade5df3745152efce347656117984eae5
5
5
  SHA512:
6
- metadata.gz: 0a944a2d952111520bf473853ec7b363ed16a53ddf4b0ae252c0fab36d70b4dedb561d55feab827d34c21b0d468cb6b0e978dba22584bc873092cc3d9515a7af
7
- data.tar.gz: 5e27924c41ebc8f6b84f8d1e507ff04d3d86d8326c2da21ca2cbe4b1fc703b7bd0026813cf8353775e126d562e25cae93ed8c03f714b07eb48c4d3e15b91fc94
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.98",
60
+ "syn 2.0.100",
55
61
  ]
56
62
 
57
63
  [[package]]
58
64
  name = "bitflags"
59
- version = "2.8.0"
65
+ version = "2.9.0"
60
66
  source = "registry+https://github.com/rust-lang/crates.io-index"
61
- checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36"
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.16"
77
+ version = "1.2.19"
72
78
  source = "registry+https://github.com/rust-lang/crates.io-index"
73
- checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c"
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.3.11"
133
+ version = "0.4.0"
113
134
  source = "registry+https://github.com/rust-lang/crates.io-index"
114
- checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
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.98",
157
+ "syn 2.0.100",
137
158
  "unicode-xid",
138
159
  ]
139
160
 
140
161
  [[package]]
141
162
  name = "either"
142
- version = "1.14.0"
163
+ version = "1.15.0"
143
164
  source = "registry+https://github.com/rust-lang/crates.io-index"
144
- checksum = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d"
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.1.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.170"
289
+ version = "0.2.171"
266
290
  source = "registry+https://github.com/rust-lang/crates.io-index"
267
- checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828"
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.26"
315
+ version = "0.4.27"
292
316
  source = "registry+https://github.com/rust-lang/crates.io-index"
293
- checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e"
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.98",
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.20.3"
416
+ version = "1.21.3"
393
417
  source = "registry+https://github.com/rust-lang/crates.io-index"
394
- checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
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.93"
473
+ version = "1.0.94"
450
474
  source = "registry+https://github.com/rust-lang/crates.io-index"
451
- checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99"
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.38"
482
+ version = "1.0.40"
459
483
  source = "registry+https://github.com/rust-lang/crates.io-index"
460
- checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc"
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.98",
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.10"
534
+ version = "0.5.11"
511
535
  source = "registry+https://github.com/rust-lang/crates.io-index"
512
- checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1"
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.11"
587
+ version = "0.17.14"
564
588
  source = "registry+https://github.com/rust-lang/crates.io-index"
565
- checksum = "da5349ae27d3887ca812fb375b45a4fbb36d8d12d2df394968cd86e35683fe73"
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.5"
625
+ version = "0.3.6"
602
626
  source = "registry+https://github.com/rust-lang/crates.io-index"
603
- checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4"
627
+ checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc"
604
628
 
605
629
  [[package]]
606
630
  name = "serde"
607
- version = "1.0.218"
631
+ version = "1.0.219"
608
632
  source = "registry+https://github.com/rust-lang/crates.io-index"
609
- checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60"
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.218"
640
+ version = "1.0.219"
617
641
  source = "registry+https://github.com/rust-lang/crates.io-index"
618
- checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b"
642
+ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
619
643
  dependencies = [
620
644
  "proc-macro2",
621
645
  "quote",
622
- "syn 2.0.98",
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.14.0"
684
+ version = "1.15.0"
661
685
  source = "registry+https://github.com/rust-lang/crates.io-index"
662
- checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
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.98"
701
+ version = "2.0.100"
678
702
  source = "registry+https://github.com/rust-lang/crates.io-index"
679
- checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1"
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 = "2.0.11"
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 = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc"
732
+ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
691
733
  dependencies = [
692
- "thiserror-impl",
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.11"
741
+ version = "2.0.12"
698
742
  source = "registry+https://github.com/rust-lang/crates.io-index"
699
- checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2"
743
+ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
700
744
  dependencies = [
701
745
  "proc-macro2",
702
746
  "quote",
703
- "syn 2.0.98",
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.37"
762
+ version = "0.3.41"
719
763
  source = "registry+https://github.com/rust-lang/crates.io-index"
720
- checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21"
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.2"
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 = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
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.98",
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.17"
879
+ version = "1.0.18"
812
880
  source = "registry+https://github.com/rust-lang/crates.io-index"
813
- checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe"
881
+ checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
814
882
 
815
883
  [[package]]
816
884
  name = "unicode-xid"
data/README.md CHANGED
@@ -1,43 +1,76 @@
1
- # ItsiScheduler
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
- TODO: Delete this and the text below, and describe your gem
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
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/itsi_scheduler`. To experiment with that code, run `bin/console` for an interactive prompt.
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
- ## Installation
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
- TODO: Replace `UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG` with your gem name right after releasing it to RubyGems.org. Please do not do it earlier due to security reasons. Alternatively, replace this section with instructions to install your gem from git if you don't plan to release to RubyGems.org.
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
- Install the gem and add to the application's Gemfile by executing:
20
+ ### Primer on Fiber Schedulers
12
21
 
13
- ```bash
14
- bundle add UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
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
- If bundler is not being used to manage dependencies, install the gem by executing:
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
- ```bash
20
- gem install UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
21
- ```
30
+ ## Getting Started
31
+ To install and use Itsi Scheduler follow the instructions below:
22
32
 
23
- ## Usage
24
33
 
25
- TODO: Write usage instructions here
34
+ ### 1 - Install Itsi Scheduler
26
35
 
27
- ## Development
36
+ **Prerequisites**
28
37
 
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
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
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
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
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/itsi_scheduler. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/itsi_scheduler/blob/master/CODE_OF_CONDUCT.md).
48
+ ```bash
49
+ gem install itsi-scheduler
50
+ ```
51
+
36
52
 
37
- ## License
53
+ ### 2 - Use Itsi Scheduler
38
54
 
39
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
55
+ Great! You now have Itsi Scheduler installed.
56
+ Now you can run code like this:
40
57
 
41
- ## Code of Conduct
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
- Everyone interacting in the ItsiScheduler project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/itsi_scheduler/blob/master/CODE_OF_CONDUCT.md).
76
+ to run many blocking operations simultaneously all while occupying only a single Ruby thread!
data/Rakefile CHANGED
@@ -11,10 +11,6 @@ Minitest::TestTask.create(:test) do |t|
11
11
  t.test_prelude = 'require "helpers/test_helper.rb"'
12
12
  end
13
13
 
14
- require "rubocop/rake_task"
15
-
16
- RuboCop::RakeTask.new
17
-
18
14
  require "rb_sys/extensiontask"
19
15
 
20
16
  task build: :compile
@@ -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"