itsi 0.1.0 → 0.1.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 (164) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +524 -44
  3. data/Rakefile +22 -33
  4. data/crates/itsi_error/Cargo.toml +2 -0
  5. data/crates/itsi_error/src/from.rs +70 -0
  6. data/crates/itsi_error/src/lib.rs +10 -37
  7. data/crates/itsi_instrument_entry/Cargo.toml +15 -0
  8. data/crates/itsi_instrument_entry/src/lib.rs +31 -0
  9. data/crates/itsi_rb_helpers/Cargo.toml +2 -0
  10. data/crates/itsi_rb_helpers/src/heap_value.rs +121 -0
  11. data/crates/itsi_rb_helpers/src/lib.rs +90 -10
  12. data/crates/itsi_scheduler/Cargo.toml +9 -1
  13. data/crates/itsi_scheduler/extconf.rb +1 -1
  14. data/crates/itsi_scheduler/src/itsi_scheduler/io_helpers.rs +56 -0
  15. data/crates/itsi_scheduler/src/itsi_scheduler/io_waiter.rs +44 -0
  16. data/crates/itsi_scheduler/src/itsi_scheduler/timer.rs +44 -0
  17. data/crates/itsi_scheduler/src/itsi_scheduler.rs +308 -0
  18. data/crates/itsi_scheduler/src/lib.rs +31 -10
  19. data/crates/itsi_server/Cargo.toml +14 -2
  20. data/crates/itsi_server/extconf.rb +1 -1
  21. data/crates/itsi_server/src/body_proxy/big_bytes.rs +104 -0
  22. data/crates/itsi_server/src/body_proxy/itsi_body_proxy.rs +122 -0
  23. data/crates/itsi_server/src/body_proxy/mod.rs +2 -0
  24. data/crates/itsi_server/src/lib.rs +58 -7
  25. data/crates/itsi_server/src/request/itsi_request.rs +238 -104
  26. data/crates/itsi_server/src/response/itsi_response.rs +347 -0
  27. data/crates/itsi_server/src/response/mod.rs +1 -0
  28. data/crates/itsi_server/src/server/bind.rs +50 -20
  29. data/crates/itsi_server/src/server/bind_protocol.rs +37 -0
  30. data/crates/itsi_server/src/server/io_stream.rs +104 -0
  31. data/crates/itsi_server/src/server/itsi_ca/itsi_ca.crt +11 -30
  32. data/crates/itsi_server/src/server/itsi_ca/itsi_ca.key +3 -50
  33. data/crates/itsi_server/src/server/itsi_server.rs +181 -133
  34. data/crates/itsi_server/src/server/lifecycle_event.rs +8 -0
  35. data/crates/itsi_server/src/server/listener.rs +169 -128
  36. data/crates/itsi_server/src/server/mod.rs +7 -1
  37. data/crates/itsi_server/src/server/process_worker.rs +196 -0
  38. data/crates/itsi_server/src/server/serve_strategy/cluster_mode.rs +253 -0
  39. data/crates/itsi_server/src/server/serve_strategy/mod.rs +27 -0
  40. data/crates/itsi_server/src/server/serve_strategy/single_mode.rs +238 -0
  41. data/crates/itsi_server/src/server/signal.rs +57 -0
  42. data/crates/itsi_server/src/server/thread_worker.rs +368 -0
  43. data/crates/itsi_server/src/server/tls.rs +42 -28
  44. data/crates/itsi_tracing/Cargo.toml +4 -0
  45. data/crates/itsi_tracing/src/lib.rs +36 -6
  46. data/gems/scheduler/Cargo.lock +219 -23
  47. data/gems/scheduler/Rakefile +7 -1
  48. data/gems/scheduler/ext/itsi_error/Cargo.toml +2 -0
  49. data/gems/scheduler/ext/itsi_error/src/from.rs +70 -0
  50. data/gems/scheduler/ext/itsi_error/src/lib.rs +10 -37
  51. data/gems/scheduler/ext/itsi_instrument_entry/Cargo.toml +15 -0
  52. data/gems/scheduler/ext/itsi_instrument_entry/src/lib.rs +31 -0
  53. data/gems/scheduler/ext/itsi_rb_helpers/Cargo.toml +2 -0
  54. data/gems/scheduler/ext/itsi_rb_helpers/src/heap_value.rs +121 -0
  55. data/gems/scheduler/ext/itsi_rb_helpers/src/lib.rs +90 -10
  56. data/gems/scheduler/ext/itsi_scheduler/Cargo.toml +9 -1
  57. data/gems/scheduler/ext/itsi_scheduler/extconf.rb +1 -1
  58. data/gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler/io_helpers.rs +56 -0
  59. data/gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler/io_waiter.rs +44 -0
  60. data/gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler/timer.rs +44 -0
  61. data/gems/scheduler/ext/itsi_scheduler/src/itsi_scheduler.rs +308 -0
  62. data/gems/scheduler/ext/itsi_scheduler/src/lib.rs +31 -10
  63. data/gems/scheduler/ext/itsi_server/Cargo.toml +41 -0
  64. data/gems/scheduler/ext/itsi_server/extconf.rb +6 -0
  65. data/gems/scheduler/ext/itsi_server/src/body_proxy/big_bytes.rs +104 -0
  66. data/gems/scheduler/ext/itsi_server/src/body_proxy/itsi_body_proxy.rs +122 -0
  67. data/gems/scheduler/ext/itsi_server/src/body_proxy/mod.rs +2 -0
  68. data/gems/scheduler/ext/itsi_server/src/lib.rs +103 -0
  69. data/gems/scheduler/ext/itsi_server/src/request/itsi_request.rs +277 -0
  70. data/gems/scheduler/ext/itsi_server/src/request/mod.rs +1 -0
  71. data/gems/scheduler/ext/itsi_server/src/response/itsi_response.rs +347 -0
  72. data/gems/scheduler/ext/itsi_server/src/response/mod.rs +1 -0
  73. data/gems/scheduler/ext/itsi_server/src/server/bind.rs +168 -0
  74. data/gems/scheduler/ext/itsi_server/src/server/bind_protocol.rs +37 -0
  75. data/gems/scheduler/ext/itsi_server/src/server/io_stream.rs +104 -0
  76. data/gems/scheduler/ext/itsi_server/src/server/itsi_ca/itsi_ca.crt +13 -0
  77. data/gems/scheduler/ext/itsi_server/src/server/itsi_ca/itsi_ca.key +5 -0
  78. data/gems/scheduler/ext/itsi_server/src/server/itsi_server.rs +230 -0
  79. data/gems/scheduler/ext/itsi_server/src/server/lifecycle_event.rs +8 -0
  80. data/gems/scheduler/ext/itsi_server/src/server/listener.rs +259 -0
  81. data/gems/scheduler/ext/itsi_server/src/server/mod.rs +11 -0
  82. data/gems/scheduler/ext/itsi_server/src/server/process_worker.rs +196 -0
  83. data/gems/scheduler/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs +253 -0
  84. data/gems/scheduler/ext/itsi_server/src/server/serve_strategy/mod.rs +27 -0
  85. data/gems/scheduler/ext/itsi_server/src/server/serve_strategy/single_mode.rs +238 -0
  86. data/gems/scheduler/ext/itsi_server/src/server/signal.rs +57 -0
  87. data/gems/scheduler/ext/itsi_server/src/server/thread_worker.rs +368 -0
  88. data/gems/scheduler/ext/itsi_server/src/server/tls.rs +152 -0
  89. data/gems/scheduler/ext/itsi_tracing/Cargo.toml +4 -0
  90. data/gems/scheduler/ext/itsi_tracing/src/lib.rs +36 -6
  91. data/gems/scheduler/itsi-scheduler.gemspec +2 -2
  92. data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
  93. data/gems/scheduler/lib/itsi/scheduler.rb +137 -1
  94. data/gems/scheduler/test/helpers/test_helper.rb +24 -0
  95. data/gems/scheduler/test/test_active_record.rb +158 -0
  96. data/gems/scheduler/test/test_address_resolve.rb +23 -0
  97. data/gems/scheduler/test/test_block_unblock.rb +229 -0
  98. data/gems/scheduler/test/test_file_io.rb +193 -0
  99. data/gems/scheduler/test/test_itsi_scheduler.rb +24 -1
  100. data/gems/scheduler/test/test_kernel_sleep.rb +91 -0
  101. data/gems/scheduler/test/test_nested_fibers.rb +286 -0
  102. data/gems/scheduler/test/test_network_io.rb +274 -0
  103. data/gems/scheduler/test/test_process_wait.rb +26 -0
  104. data/gems/server/exe/itsi +88 -28
  105. data/gems/server/ext/itsi_error/Cargo.toml +2 -0
  106. data/gems/server/ext/itsi_error/src/from.rs +70 -0
  107. data/gems/server/ext/itsi_error/src/lib.rs +10 -37
  108. data/gems/server/ext/itsi_instrument_entry/Cargo.toml +15 -0
  109. data/gems/server/ext/itsi_instrument_entry/src/lib.rs +31 -0
  110. data/gems/server/ext/itsi_rb_helpers/Cargo.toml +2 -0
  111. data/gems/server/ext/itsi_rb_helpers/src/heap_value.rs +121 -0
  112. data/gems/server/ext/itsi_rb_helpers/src/lib.rs +90 -10
  113. data/gems/server/ext/itsi_scheduler/Cargo.toml +24 -0
  114. data/gems/server/ext/itsi_scheduler/extconf.rb +6 -0
  115. data/gems/server/ext/itsi_scheduler/src/itsi_scheduler/io_helpers.rs +56 -0
  116. data/gems/server/ext/itsi_scheduler/src/itsi_scheduler/io_waiter.rs +44 -0
  117. data/gems/server/ext/itsi_scheduler/src/itsi_scheduler/timer.rs +44 -0
  118. data/gems/server/ext/itsi_scheduler/src/itsi_scheduler.rs +308 -0
  119. data/gems/server/ext/itsi_scheduler/src/lib.rs +38 -0
  120. data/gems/server/ext/itsi_server/Cargo.toml +14 -2
  121. data/gems/server/ext/itsi_server/extconf.rb +1 -1
  122. data/gems/server/ext/itsi_server/src/body_proxy/big_bytes.rs +104 -0
  123. data/gems/server/ext/itsi_server/src/body_proxy/itsi_body_proxy.rs +122 -0
  124. data/gems/server/ext/itsi_server/src/body_proxy/mod.rs +2 -0
  125. data/gems/server/ext/itsi_server/src/lib.rs +58 -7
  126. data/gems/server/ext/itsi_server/src/request/itsi_request.rs +238 -104
  127. data/gems/server/ext/itsi_server/src/response/itsi_response.rs +347 -0
  128. data/gems/server/ext/itsi_server/src/response/mod.rs +1 -0
  129. data/gems/server/ext/itsi_server/src/server/bind.rs +50 -20
  130. data/gems/server/ext/itsi_server/src/server/bind_protocol.rs +37 -0
  131. data/gems/server/ext/itsi_server/src/server/io_stream.rs +104 -0
  132. data/gems/server/ext/itsi_server/src/server/itsi_ca/itsi_ca.crt +11 -30
  133. data/gems/server/ext/itsi_server/src/server/itsi_ca/itsi_ca.key +3 -50
  134. data/gems/server/ext/itsi_server/src/server/itsi_server.rs +181 -133
  135. data/gems/server/ext/itsi_server/src/server/lifecycle_event.rs +8 -0
  136. data/gems/server/ext/itsi_server/src/server/listener.rs +169 -128
  137. data/gems/server/ext/itsi_server/src/server/mod.rs +7 -1
  138. data/gems/server/ext/itsi_server/src/server/process_worker.rs +196 -0
  139. data/gems/server/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs +253 -0
  140. data/gems/server/ext/itsi_server/src/server/serve_strategy/mod.rs +27 -0
  141. data/gems/server/ext/itsi_server/src/server/serve_strategy/single_mode.rs +238 -0
  142. data/gems/server/ext/itsi_server/src/server/signal.rs +57 -0
  143. data/gems/server/ext/itsi_server/src/server/thread_worker.rs +368 -0
  144. data/gems/server/ext/itsi_server/src/server/tls.rs +42 -28
  145. data/gems/server/ext/itsi_tracing/Cargo.toml +4 -0
  146. data/gems/server/ext/itsi_tracing/src/lib.rs +36 -6
  147. data/gems/server/itsi-server.gemspec +4 -4
  148. data/gems/server/lib/itsi/request.rb +30 -14
  149. data/gems/server/lib/itsi/server/rack/handler/itsi.rb +25 -0
  150. data/gems/server/lib/itsi/server/scheduler_mode.rb +6 -0
  151. data/gems/server/lib/itsi/server/version.rb +1 -1
  152. data/gems/server/lib/itsi/server.rb +68 -2
  153. data/gems/server/lib/itsi/signals.rb +18 -0
  154. data/gems/server/lib/itsi/stream_io.rb +38 -0
  155. data/gems/server/test/test_helper.rb +2 -0
  156. data/gems/server/test/test_itsi_server.rb +1 -1
  157. data/lib/itsi/version.rb +1 -1
  158. data/tasks.txt +17 -0
  159. metadata +102 -12
  160. data/crates/itsi_server/src/server/transfer_protocol.rs +0 -23
  161. data/crates/itsi_server/src/stream_writer/mod.rs +0 -21
  162. data/gems/scheduler/test/test_helper.rb +0 -6
  163. data/gems/server/ext/itsi_server/src/server/transfer_protocol.rs +0 -23
  164. data/gems/server/ext/itsi_server/src/stream_writer/mod.rs +0 -21
@@ -11,6 +11,23 @@ dependencies = [
11
11
  "memchr",
12
12
  ]
13
13
 
14
+ [[package]]
15
+ name = "atty"
16
+ version = "0.2.14"
17
+ source = "registry+https://github.com/rust-lang/crates.io-index"
18
+ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
19
+ dependencies = [
20
+ "hermit-abi",
21
+ "libc",
22
+ "winapi",
23
+ ]
24
+
25
+ [[package]]
26
+ name = "autocfg"
27
+ version = "1.4.0"
28
+ source = "registry+https://github.com/rust-lang/crates.io-index"
29
+ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
30
+
14
31
  [[package]]
15
32
  name = "base64"
16
33
  version = "0.22.1"
@@ -34,7 +51,7 @@ dependencies = [
34
51
  "regex",
35
52
  "rustc-hash",
36
53
  "shlex",
37
- "syn",
54
+ "syn 2.0.98",
38
55
  ]
39
56
 
40
57
  [[package]]
@@ -45,9 +62,9 @@ checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36"
45
62
 
46
63
  [[package]]
47
64
  name = "bytes"
48
- version = "1.10.0"
65
+ version = "1.10.1"
49
66
  source = "registry+https://github.com/rust-lang/crates.io-index"
50
- checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9"
67
+ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
51
68
 
52
69
  [[package]]
53
70
  name = "cc"
@@ -73,6 +90,12 @@ version = "1.0.0"
73
90
  source = "registry+https://github.com/rust-lang/crates.io-index"
74
91
  checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
75
92
 
93
+ [[package]]
94
+ name = "cfg_aliases"
95
+ version = "0.2.1"
96
+ source = "registry+https://github.com/rust-lang/crates.io-index"
97
+ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
98
+
76
99
  [[package]]
77
100
  name = "clang-sys"
78
101
  version = "1.8.1"
@@ -93,6 +116,27 @@ dependencies = [
93
116
  "powerfmt",
94
117
  ]
95
118
 
119
+ [[package]]
120
+ name = "derive_more"
121
+ version = "2.0.1"
122
+ source = "registry+https://github.com/rust-lang/crates.io-index"
123
+ checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678"
124
+ dependencies = [
125
+ "derive_more-impl",
126
+ ]
127
+
128
+ [[package]]
129
+ name = "derive_more-impl"
130
+ version = "2.0.1"
131
+ source = "registry+https://github.com/rust-lang/crates.io-index"
132
+ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3"
133
+ dependencies = [
134
+ "proc-macro2",
135
+ "quote",
136
+ "syn 2.0.98",
137
+ "unicode-xid",
138
+ ]
139
+
96
140
  [[package]]
97
141
  name = "either"
98
142
  version = "1.14.0"
@@ -116,6 +160,21 @@ version = "0.3.2"
116
160
  source = "registry+https://github.com/rust-lang/crates.io-index"
117
161
  checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
118
162
 
163
+ [[package]]
164
+ name = "hermit-abi"
165
+ version = "0.1.19"
166
+ source = "registry+https://github.com/rust-lang/crates.io-index"
167
+ checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
168
+ dependencies = [
169
+ "libc",
170
+ ]
171
+
172
+ [[package]]
173
+ name = "httparse"
174
+ version = "1.10.1"
175
+ source = "registry+https://github.com/rust-lang/crates.io-index"
176
+ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
177
+
119
178
  [[package]]
120
179
  name = "itertools"
121
180
  version = "0.12.1"
@@ -125,30 +184,57 @@ dependencies = [
125
184
  "either",
126
185
  ]
127
186
 
187
+ [[package]]
188
+ name = "itoa"
189
+ version = "1.0.15"
190
+ source = "registry+https://github.com/rust-lang/crates.io-index"
191
+ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
192
+
128
193
  [[package]]
129
194
  name = "itsi-scheduler"
130
195
  version = "0.1.0"
131
196
  dependencies = [
197
+ "bytes",
198
+ "derive_more",
132
199
  "itsi_error",
200
+ "itsi_instrument_entry",
133
201
  "itsi_rb_helpers",
134
202
  "itsi_tracing",
135
- "magnus 0.6.4",
203
+ "magnus",
204
+ "mio",
205
+ "nix",
206
+ "parking_lot",
207
+ "rb-sys",
208
+ "tracing",
136
209
  ]
137
210
 
138
211
  [[package]]
139
212
  name = "itsi_error"
140
213
  version = "0.1.0"
141
214
  dependencies = [
142
- "magnus 0.7.1",
215
+ "httparse",
216
+ "magnus",
217
+ "nix",
143
218
  "rcgen",
144
219
  "thiserror",
145
220
  ]
146
221
 
222
+ [[package]]
223
+ name = "itsi_instrument_entry"
224
+ version = "0.1.0"
225
+ dependencies = [
226
+ "proc-macro2",
227
+ "quote",
228
+ "syn 1.0.109",
229
+ ]
230
+
147
231
  [[package]]
148
232
  name = "itsi_rb_helpers"
149
233
  version = "0.1.0"
150
234
  dependencies = [
151
- "magnus 0.7.1",
235
+ "cfg-if",
236
+ "magnus",
237
+ "nix",
152
238
  "rb-sys",
153
239
  ]
154
240
 
@@ -156,7 +242,9 @@ dependencies = [
156
242
  name = "itsi_tracing"
157
243
  version = "0.1.0"
158
244
  dependencies = [
245
+ "atty",
159
246
  "tracing",
247
+ "tracing-attributes",
160
248
  "tracing-subscriber",
161
249
  ]
162
250
 
@@ -189,22 +277,20 @@ dependencies = [
189
277
  ]
190
278
 
191
279
  [[package]]
192
- name = "log"
193
- version = "0.4.26"
280
+ name = "lock_api"
281
+ version = "0.4.12"
194
282
  source = "registry+https://github.com/rust-lang/crates.io-index"
195
- checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e"
283
+ checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
284
+ dependencies = [
285
+ "autocfg",
286
+ "scopeguard",
287
+ ]
196
288
 
197
289
  [[package]]
198
- name = "magnus"
199
- version = "0.6.4"
290
+ name = "log"
291
+ version = "0.4.26"
200
292
  source = "registry+https://github.com/rust-lang/crates.io-index"
201
- checksum = "b1597ef40aa8c36be098249e82c9a20cf7199278ac1c1a1a995eeead6a184479"
202
- dependencies = [
203
- "magnus-macros",
204
- "rb-sys",
205
- "rb-sys-env",
206
- "seq-macro",
207
- ]
293
+ checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e"
208
294
 
209
295
  [[package]]
210
296
  name = "magnus"
@@ -227,7 +313,7 @@ checksum = "5968c820e2960565f647819f5928a42d6e874551cab9d88d75e3e0660d7f71e3"
227
313
  dependencies = [
228
314
  "proc-macro2",
229
315
  "quote",
230
- "syn",
316
+ "syn 2.0.98",
231
317
  ]
232
318
 
233
319
  [[package]]
@@ -251,6 +337,30 @@ version = "0.2.1"
251
337
  source = "registry+https://github.com/rust-lang/crates.io-index"
252
338
  checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
253
339
 
340
+ [[package]]
341
+ name = "mio"
342
+ version = "1.0.3"
343
+ source = "registry+https://github.com/rust-lang/crates.io-index"
344
+ checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd"
345
+ dependencies = [
346
+ "libc",
347
+ "log",
348
+ "wasi",
349
+ "windows-sys",
350
+ ]
351
+
352
+ [[package]]
353
+ name = "nix"
354
+ version = "0.29.0"
355
+ source = "registry+https://github.com/rust-lang/crates.io-index"
356
+ checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
357
+ dependencies = [
358
+ "bitflags",
359
+ "cfg-if",
360
+ "cfg_aliases",
361
+ "libc",
362
+ ]
363
+
254
364
  [[package]]
255
365
  name = "nom"
256
366
  version = "7.1.3"
@@ -289,6 +399,29 @@ version = "0.1.1"
289
399
  source = "registry+https://github.com/rust-lang/crates.io-index"
290
400
  checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
291
401
 
402
+ [[package]]
403
+ name = "parking_lot"
404
+ version = "0.12.3"
405
+ source = "registry+https://github.com/rust-lang/crates.io-index"
406
+ checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
407
+ dependencies = [
408
+ "lock_api",
409
+ "parking_lot_core",
410
+ ]
411
+
412
+ [[package]]
413
+ name = "parking_lot_core"
414
+ version = "0.9.10"
415
+ source = "registry+https://github.com/rust-lang/crates.io-index"
416
+ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
417
+ dependencies = [
418
+ "cfg-if",
419
+ "libc",
420
+ "redox_syscall",
421
+ "smallvec",
422
+ "windows-targets",
423
+ ]
424
+
292
425
  [[package]]
293
426
  name = "pem"
294
427
  version = "3.0.5"
@@ -350,7 +483,7 @@ dependencies = [
350
483
  "quote",
351
484
  "regex",
352
485
  "shell-words",
353
- "syn",
486
+ "syn 2.0.98",
354
487
  ]
355
488
 
356
489
  [[package]]
@@ -372,6 +505,15 @@ dependencies = [
372
505
  "yasna",
373
506
  ]
374
507
 
508
+ [[package]]
509
+ name = "redox_syscall"
510
+ version = "0.5.10"
511
+ source = "registry+https://github.com/rust-lang/crates.io-index"
512
+ checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1"
513
+ dependencies = [
514
+ "bitflags",
515
+ ]
516
+
375
517
  [[package]]
376
518
  name = "regex"
377
519
  version = "1.11.1"
@@ -442,6 +584,18 @@ version = "1.11.0"
442
584
  source = "registry+https://github.com/rust-lang/crates.io-index"
443
585
  checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c"
444
586
 
587
+ [[package]]
588
+ name = "ryu"
589
+ version = "1.0.20"
590
+ source = "registry+https://github.com/rust-lang/crates.io-index"
591
+ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
592
+
593
+ [[package]]
594
+ name = "scopeguard"
595
+ version = "1.2.0"
596
+ source = "registry+https://github.com/rust-lang/crates.io-index"
597
+ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
598
+
445
599
  [[package]]
446
600
  name = "seq-macro"
447
601
  version = "0.3.5"
@@ -465,7 +619,19 @@ checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b"
465
619
  dependencies = [
466
620
  "proc-macro2",
467
621
  "quote",
468
- "syn",
622
+ "syn 2.0.98",
623
+ ]
624
+
625
+ [[package]]
626
+ name = "serde_json"
627
+ version = "1.0.140"
628
+ source = "registry+https://github.com/rust-lang/crates.io-index"
629
+ checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
630
+ dependencies = [
631
+ "itoa",
632
+ "memchr",
633
+ "ryu",
634
+ "serde",
469
635
  ]
470
636
 
471
637
  [[package]]
@@ -495,6 +661,17 @@ version = "1.14.0"
495
661
  source = "registry+https://github.com/rust-lang/crates.io-index"
496
662
  checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
497
663
 
664
+ [[package]]
665
+ name = "syn"
666
+ version = "1.0.109"
667
+ source = "registry+https://github.com/rust-lang/crates.io-index"
668
+ checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
669
+ dependencies = [
670
+ "proc-macro2",
671
+ "quote",
672
+ "unicode-ident",
673
+ ]
674
+
498
675
  [[package]]
499
676
  name = "syn"
500
677
  version = "2.0.98"
@@ -523,7 +700,7 @@ checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2"
523
700
  dependencies = [
524
701
  "proc-macro2",
525
702
  "quote",
526
- "syn",
703
+ "syn 2.0.98",
527
704
  ]
528
705
 
529
706
  [[package]]
@@ -574,7 +751,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
574
751
  dependencies = [
575
752
  "proc-macro2",
576
753
  "quote",
577
- "syn",
754
+ "syn 2.0.98",
578
755
  ]
579
756
 
580
757
  [[package]]
@@ -598,6 +775,16 @@ dependencies = [
598
775
  "tracing-core",
599
776
  ]
600
777
 
778
+ [[package]]
779
+ name = "tracing-serde"
780
+ version = "0.2.0"
781
+ source = "registry+https://github.com/rust-lang/crates.io-index"
782
+ checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1"
783
+ dependencies = [
784
+ "serde",
785
+ "tracing-core",
786
+ ]
787
+
601
788
  [[package]]
602
789
  name = "tracing-subscriber"
603
790
  version = "0.3.19"
@@ -608,12 +795,15 @@ dependencies = [
608
795
  "nu-ansi-term",
609
796
  "once_cell",
610
797
  "regex",
798
+ "serde",
799
+ "serde_json",
611
800
  "sharded-slab",
612
801
  "smallvec",
613
802
  "thread_local",
614
803
  "tracing",
615
804
  "tracing-core",
616
805
  "tracing-log",
806
+ "tracing-serde",
617
807
  ]
618
808
 
619
809
  [[package]]
@@ -622,6 +812,12 @@ version = "1.0.17"
622
812
  source = "registry+https://github.com/rust-lang/crates.io-index"
623
813
  checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe"
624
814
 
815
+ [[package]]
816
+ name = "unicode-xid"
817
+ version = "0.2.6"
818
+ source = "registry+https://github.com/rust-lang/crates.io-index"
819
+ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
820
+
625
821
  [[package]]
626
822
  name = "untrusted"
627
823
  version = "0.9.0"
@@ -3,7 +3,13 @@
3
3
  require "bundler/gem_tasks"
4
4
  require "minitest/test_task"
5
5
 
6
- Minitest::TestTask.create
6
+ Minitest::TestTask.create(:test) do |t|
7
+ t.libs << 'test'
8
+ t.libs << 'lib'
9
+ t.warning = false
10
+ t.test_globs = ['test/**/*.rb']
11
+ t.test_prelude = 'require "helpers/test_helper.rb"'
12
+ end
7
13
 
8
14
  require "rubocop/rake_task"
9
15
 
@@ -7,3 +7,5 @@ edition = "2024"
7
7
  thiserror = "2.0.11"
8
8
  magnus = { version = "0.7.1" }
9
9
  rcgen = "0.13.2"
10
+ nix = "0.29.0"
11
+ httparse = "1.10.1"
@@ -0,0 +1,70 @@
1
+ use crate::ItsiError;
2
+ use std::ffi::NulError;
3
+
4
+ pub static CLIENT_CONNECTION_CLOSED: &str = "Client disconnected";
5
+
6
+ impl From<httparse::Error> for ItsiError {
7
+ fn from(err: httparse::Error) -> Self {
8
+ ItsiError::ArgumentError(err.to_string())
9
+ }
10
+ }
11
+
12
+ impl From<nix::errno::Errno> for ItsiError {
13
+ fn from(err: nix::errno::Errno) -> Self {
14
+ ItsiError::ArgumentError(err.to_string())
15
+ }
16
+ }
17
+
18
+ impl From<std::io::Error> for ItsiError {
19
+ fn from(err: std::io::Error) -> Self {
20
+ ItsiError::ArgumentError(err.to_string())
21
+ }
22
+ }
23
+
24
+ impl From<rcgen::Error> for ItsiError {
25
+ fn from(err: rcgen::Error) -> Self {
26
+ ItsiError::ArgumentError(err.to_string())
27
+ }
28
+ }
29
+
30
+ impl From<NulError> for ItsiError {
31
+ fn from(err: NulError) -> Self {
32
+ ItsiError::ArgumentError(err.to_string())
33
+ }
34
+ }
35
+
36
+ impl From<magnus::Error> for ItsiError {
37
+ fn from(err: magnus::Error) -> Self {
38
+ match err.error_type() {
39
+ magnus::error::ErrorType::Jump(tag) => ItsiError::Jump(tag.to_string()),
40
+ magnus::error::ErrorType::Error(_exception_class, cow) => {
41
+ ItsiError::ArgumentError(cow.to_string())
42
+ }
43
+ magnus::error::ErrorType::Exception(exception) => {
44
+ ItsiError::ArgumentError(exception.to_string())
45
+ }
46
+ }
47
+ }
48
+ }
49
+
50
+ impl From<ItsiError> for magnus::Error {
51
+ fn from(err: ItsiError) -> Self {
52
+ match err {
53
+ ItsiError::InvalidInput(msg) => magnus::Error::new(magnus::exception::arg_error(), msg),
54
+ ItsiError::InternalServerError(msg) => {
55
+ magnus::Error::new(magnus::exception::exception(), msg)
56
+ }
57
+ ItsiError::UnsupportedProtocol(msg) => {
58
+ magnus::Error::new(magnus::exception::arg_error(), msg)
59
+ }
60
+ ItsiError::ArgumentError(msg) => {
61
+ magnus::Error::new(magnus::exception::arg_error(), msg)
62
+ }
63
+ ItsiError::Jump(msg) => magnus::Error::new(magnus::exception::local_jump_error(), msg),
64
+ ItsiError::Break() => magnus::Error::new(magnus::exception::interrupt(), "Break"),
65
+ ItsiError::ClientConnectionClosed => {
66
+ magnus::Error::new(magnus::exception::eof_error(), CLIENT_CONNECTION_CLOSED)
67
+ }
68
+ }
69
+ }
70
+ }
@@ -1,49 +1,22 @@
1
+ pub mod from;
1
2
  use thiserror::Error;
2
3
 
3
4
  pub type Result<T> = std::result::Result<T, ItsiError>;
4
5
 
5
6
  #[derive(Error, Debug)]
6
7
  pub enum ItsiError {
7
- #[error("Invalid input")]
8
+ #[error("Invalid input {0}")]
8
9
  InvalidInput(String),
9
- #[error("Internal server error")]
10
- InternalServerError,
11
- #[error("Unsupported protocol")]
10
+ #[error("Internal server error {0}")]
11
+ InternalServerError(String),
12
+ #[error("Unsupported protocol {0}")]
12
13
  UnsupportedProtocol(String),
13
- #[error("Argument error")]
14
+ #[error("Argument error: {0}")]
14
15
  ArgumentError(String),
16
+ #[error("Client Connection Closed")]
17
+ ClientConnectionClosed,
15
18
  #[error("Jump")]
16
19
  Jump(String),
17
- }
18
-
19
- impl From<ItsiError> for magnus::Error {
20
- fn from(err: ItsiError) -> Self {
21
- magnus::Error::new(magnus::exception::runtime_error(), err.to_string())
22
- }
23
- }
24
-
25
- impl From<std::io::Error> for ItsiError {
26
- fn from(err: std::io::Error) -> Self {
27
- ItsiError::ArgumentError(err.to_string())
28
- }
29
- }
30
-
31
- impl From<rcgen::Error> for ItsiError {
32
- fn from(err: rcgen::Error) -> Self {
33
- ItsiError::ArgumentError(err.to_string())
34
- }
35
- }
36
-
37
- impl From<magnus::Error> for ItsiError {
38
- fn from(err: magnus::Error) -> Self {
39
- match err.error_type() {
40
- magnus::error::ErrorType::Jump(tag) => ItsiError::Jump(tag.to_string()),
41
- magnus::error::ErrorType::Error(_exception_class, cow) => {
42
- ItsiError::ArgumentError(cow.to_string())
43
- }
44
- magnus::error::ErrorType::Exception(exception) => {
45
- ItsiError::ArgumentError(exception.to_string())
46
- }
47
- }
48
- }
20
+ #[error("Break")]
21
+ Break(),
49
22
  }
@@ -0,0 +1,15 @@
1
+ [package]
2
+ name = "itsi_instrument_entry"
3
+ version = "0.1.0"
4
+ edition = "2021"
5
+ authors = ["Wouter Coppieters <wc@pico.net.nz>"]
6
+ license = "MIT"
7
+ publish = false
8
+
9
+
10
+ [lib]
11
+ proc-macro = true
12
+ [dependencies]
13
+ proc-macro2 = "1.0"
14
+ quote = "1.0"
15
+ syn = { version = "1.0", features = ["full"] }
@@ -0,0 +1,31 @@
1
+ use proc_macro::TokenStream;
2
+ use proc_macro2::TokenStream as TokenStream2;
3
+ use quote::quote;
4
+ use syn::{parse_macro_input, ItemFn};
5
+
6
+ #[proc_macro_attribute]
7
+ pub fn instrument_with_entry(attr: TokenStream, item: TokenStream) -> TokenStream {
8
+ let attr_tokens = TokenStream2::from(attr);
9
+ let input_fn = parse_macro_input!(item as ItemFn);
10
+ let attrs = input_fn.attrs;
11
+ let vis = input_fn.vis;
12
+ let sig = input_fn.sig;
13
+ let block = input_fn.block;
14
+ let output = quote! {
15
+ #[cfg(debug_assertions)]
16
+ #[tracing::instrument(#attr_tokens)]
17
+ #(#attrs)*
18
+ #vis #sig {
19
+ tracing::trace!("");
20
+ #block
21
+ }
22
+
23
+ #[cfg(not(debug_assertions))]
24
+ #(#attrs)*
25
+ #vis #sig {
26
+ #block
27
+ }
28
+ };
29
+
30
+ output.into()
31
+ }
@@ -4,5 +4,7 @@ version = "0.1.0"
4
4
  edition = "2024"
5
5
 
6
6
  [dependencies]
7
+ cfg-if = "1.0.0"
7
8
  magnus = { version = "0.7.1", features = ["rb-sys", "bytes"] }
9
+ nix = "0.29.0"
8
10
  rb-sys = "0.9.105"