itsi-scheduler 0.1.5 → 0.1.14

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.

Potentially problematic release.


This version of itsi-scheduler might be problematic. Click here for more details.

Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +7 -0
  3. data/Cargo.lock +83 -22
  4. data/README.md +5 -0
  5. data/_index.md +7 -0
  6. data/ext/itsi_error/src/from.rs +26 -29
  7. data/ext/itsi_error/src/lib.rs +10 -1
  8. data/ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/common.rs +355 -0
  9. data/ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/dynamic.rs +276 -0
  10. data/ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/macros.rs +49 -0
  11. data/ext/itsi_error/target/debug/build/rb-sys-49f554618693db24/out/bindings-0.9.110-mri-arm64-darwin23-3.4.2.rs +8865 -0
  12. data/ext/itsi_error/target/debug/incremental/itsi_error-1mmt5sux7jb0i/s-h510z7m8v9-0bxu7yd.lock +0 -0
  13. data/ext/itsi_error/target/debug/incremental/itsi_error-2vn3jey74oiw0/s-h5113n0e7e-1v5qzs6.lock +0 -0
  14. data/ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510ykifhe-0tbnep2.lock +0 -0
  15. data/ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510yyocpj-0tz7ug7.lock +0 -0
  16. data/ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510z0xc8g-14ol18k.lock +0 -0
  17. data/ext/itsi_error/target/debug/incremental/itsi_error-3g5qf4y7d54uj/s-h5113n0e7d-1trk8on.lock +0 -0
  18. data/ext/itsi_error/target/debug/incremental/itsi_error-3lpfftm45d3e2/s-h510z7m8r3-1pxp20o.lock +0 -0
  19. data/ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510ykifek-1uxasnk.lock +0 -0
  20. data/ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510yyocki-11u37qm.lock +0 -0
  21. data/ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510z0xc93-0pmy0zm.lock +0 -0
  22. data/ext/itsi_rb_helpers/Cargo.toml +1 -0
  23. data/ext/itsi_rb_helpers/src/heap_value.rs +18 -0
  24. data/ext/itsi_rb_helpers/src/lib.rs +59 -9
  25. data/ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/common.rs +355 -0
  26. data/ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/dynamic.rs +276 -0
  27. data/ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/macros.rs +49 -0
  28. 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
  29. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-040pxg6yhb3g3/s-h5113n7a1b-03bwlt4.lock +0 -0
  30. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-131g1u4dzkt1a/s-h51113xnh3-1eik1ip.lock +0 -0
  31. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-131g1u4dzkt1a/s-h5111704jj-0g4rj8x.lock +0 -0
  32. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-1q2d3drtxrzs5/s-h5113n79yl-0bxcqc5.lock +0 -0
  33. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-374a9h7ovycj0/s-h51113xoox-10de2hp.lock +0 -0
  34. data/ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-374a9h7ovycj0/s-h5111704w7-0vdq7gq.lock +0 -0
  35. data/ext/itsi_server/Cargo.lock +2956 -0
  36. data/ext/itsi_server/Cargo.toml +69 -26
  37. data/ext/itsi_server/src/env.rs +43 -0
  38. data/ext/itsi_server/src/lib.rs +81 -75
  39. data/ext/itsi_server/src/{body_proxy → ruby_types/itsi_body_proxy}/big_bytes.rs +10 -5
  40. data/ext/itsi_server/src/{body_proxy/itsi_body_proxy.rs → ruby_types/itsi_body_proxy/mod.rs} +22 -3
  41. data/ext/itsi_server/src/ruby_types/itsi_grpc_request.rs +147 -0
  42. data/ext/itsi_server/src/ruby_types/itsi_grpc_response.rs +19 -0
  43. data/ext/itsi_server/src/ruby_types/itsi_grpc_stream/mod.rs +216 -0
  44. data/ext/itsi_server/src/{request/itsi_request.rs → ruby_types/itsi_http_request.rs} +108 -103
  45. data/ext/itsi_server/src/{response/itsi_response.rs → ruby_types/itsi_http_response.rs} +79 -38
  46. data/ext/itsi_server/src/ruby_types/itsi_server/file_watcher.rs +225 -0
  47. data/ext/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +355 -0
  48. data/ext/itsi_server/src/ruby_types/itsi_server.rs +82 -0
  49. data/ext/itsi_server/src/ruby_types/mod.rs +55 -0
  50. data/ext/itsi_server/src/server/bind.rs +33 -20
  51. data/ext/itsi_server/src/server/byte_frame.rs +32 -0
  52. data/ext/itsi_server/src/server/cache_store.rs +74 -0
  53. data/ext/itsi_server/src/server/itsi_service.rs +172 -0
  54. data/ext/itsi_server/src/server/lifecycle_event.rs +3 -0
  55. data/ext/itsi_server/src/server/listener.rs +197 -106
  56. data/ext/itsi_server/src/server/middleware_stack/middleware.rs +153 -0
  57. data/ext/itsi_server/src/server/middleware_stack/middlewares/allow_list.rs +47 -0
  58. data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_api_key.rs +58 -0
  59. data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_basic.rs +82 -0
  60. data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs +264 -0
  61. data/ext/itsi_server/src/server/middleware_stack/middlewares/cache_control.rs +139 -0
  62. data/ext/itsi_server/src/server/middleware_stack/middlewares/compression.rs +300 -0
  63. data/ext/itsi_server/src/server/middleware_stack/middlewares/cors.rs +287 -0
  64. data/ext/itsi_server/src/server/middleware_stack/middlewares/deny_list.rs +48 -0
  65. data/ext/itsi_server/src/server/middleware_stack/middlewares/error_response.rs +127 -0
  66. data/ext/itsi_server/src/server/middleware_stack/middlewares/etag.rs +191 -0
  67. data/ext/itsi_server/src/server/middleware_stack/middlewares/grpc_service.rs +72 -0
  68. data/ext/itsi_server/src/server/middleware_stack/middlewares/header_interpretation.rs +85 -0
  69. data/ext/itsi_server/src/server/middleware_stack/middlewares/intrusion_protection.rs +195 -0
  70. data/ext/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs +82 -0
  71. data/ext/itsi_server/src/server/middleware_stack/middlewares/mod.rs +82 -0
  72. data/ext/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +216 -0
  73. data/ext/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs +124 -0
  74. data/ext/itsi_server/src/server/middleware_stack/middlewares/redirect.rs +76 -0
  75. data/ext/itsi_server/src/server/middleware_stack/middlewares/request_headers.rs +43 -0
  76. data/ext/itsi_server/src/server/middleware_stack/middlewares/response_headers.rs +34 -0
  77. data/ext/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +93 -0
  78. data/ext/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +162 -0
  79. data/ext/itsi_server/src/server/middleware_stack/middlewares/string_rewrite.rs +158 -0
  80. data/ext/itsi_server/src/server/middleware_stack/middlewares/token_source.rs +12 -0
  81. data/ext/itsi_server/src/server/middleware_stack/mod.rs +315 -0
  82. data/ext/itsi_server/src/server/mod.rs +8 -1
  83. data/ext/itsi_server/src/server/process_worker.rs +44 -11
  84. data/ext/itsi_server/src/server/rate_limiter.rs +565 -0
  85. data/ext/itsi_server/src/server/request_job.rs +11 -0
  86. data/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs +129 -46
  87. data/ext/itsi_server/src/server/serve_strategy/mod.rs +9 -6
  88. data/ext/itsi_server/src/server/serve_strategy/single_mode.rs +337 -163
  89. data/ext/itsi_server/src/server/signal.rs +25 -2
  90. data/ext/itsi_server/src/server/static_file_server.rs +984 -0
  91. data/ext/itsi_server/src/server/thread_worker.rs +164 -88
  92. data/ext/itsi_server/src/server/tls/locked_dir_cache.rs +55 -17
  93. data/ext/itsi_server/src/server/tls.rs +104 -28
  94. data/ext/itsi_server/src/server/types.rs +43 -0
  95. data/ext/itsi_tracing/Cargo.toml +1 -0
  96. data/ext/itsi_tracing/src/lib.rs +222 -34
  97. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-0994n8rpvvt9m/s-h510hfz1f6-1kbycmq.lock +0 -0
  98. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-0bob7bf4yq34i/s-h5113125h5-0lh4rag.lock +0 -0
  99. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-2fcodulrxbbxo/s-h510h2infk-0hp5kjw.lock +0 -0
  100. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-2iak63r1woi1l/s-h510h2in4q-0kxfzw1.lock +0 -0
  101. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-2kk4qj9gn5dg2/s-h5113124kv-0enwon2.lock +0 -0
  102. data/ext/itsi_tracing/target/debug/incremental/itsi_tracing-2mwo0yas7dtw4/s-h510hfz1ha-1udgpei.lock +0 -0
  103. data/lib/itsi/scheduler/version.rb +1 -1
  104. data/lib/itsi/scheduler.rb +2 -2
  105. metadata +79 -14
  106. data/ext/itsi_server/extconf.rb +0 -6
  107. data/ext/itsi_server/src/body_proxy/mod.rs +0 -2
  108. data/ext/itsi_server/src/request/mod.rs +0 -1
  109. data/ext/itsi_server/src/response/mod.rs +0 -1
  110. data/ext/itsi_server/src/server/itsi_ca/itsi_ca.crt +0 -13
  111. data/ext/itsi_server/src/server/itsi_ca/itsi_ca.key +0 -5
  112. data/ext/itsi_server/src/server/itsi_server.rs +0 -244
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: itsi-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wouter Coppieters
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-03-14 00:00:00.000000000 Z
10
+ date: 2025-03-29 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: rb_sys
@@ -40,53 +40,118 @@ files:
40
40
  - LICENSE.txt
41
41
  - README.md
42
42
  - Rakefile
43
+ - _index.md
43
44
  - ext/itsi_error/Cargo.lock
44
45
  - ext/itsi_error/Cargo.toml
45
46
  - ext/itsi_error/src/from.rs
46
47
  - ext/itsi_error/src/lib.rs
48
+ - ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/common.rs
49
+ - ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/dynamic.rs
50
+ - ext/itsi_error/target/debug/build/clang-sys-da71b0344e568175/out/macros.rs
51
+ - ext/itsi_error/target/debug/build/rb-sys-49f554618693db24/out/bindings-0.9.110-mri-arm64-darwin23-3.4.2.rs
52
+ - ext/itsi_error/target/debug/incremental/itsi_error-1mmt5sux7jb0i/s-h510z7m8v9-0bxu7yd.lock
53
+ - ext/itsi_error/target/debug/incremental/itsi_error-2vn3jey74oiw0/s-h5113n0e7e-1v5qzs6.lock
54
+ - ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510ykifhe-0tbnep2.lock
55
+ - ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510yyocpj-0tz7ug7.lock
56
+ - ext/itsi_error/target/debug/incremental/itsi_error-37uv9dicz7awp/s-h510z0xc8g-14ol18k.lock
57
+ - ext/itsi_error/target/debug/incremental/itsi_error-3g5qf4y7d54uj/s-h5113n0e7d-1trk8on.lock
58
+ - ext/itsi_error/target/debug/incremental/itsi_error-3lpfftm45d3e2/s-h510z7m8r3-1pxp20o.lock
59
+ - ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510ykifek-1uxasnk.lock
60
+ - ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510yyocki-11u37qm.lock
61
+ - ext/itsi_error/target/debug/incremental/itsi_error-3o4qownhl3d7n/s-h510z0xc93-0pmy0zm.lock
47
62
  - ext/itsi_instrument_entry/Cargo.toml
48
63
  - ext/itsi_instrument_entry/src/lib.rs
49
64
  - ext/itsi_rb_helpers/Cargo.lock
50
65
  - ext/itsi_rb_helpers/Cargo.toml
51
66
  - ext/itsi_rb_helpers/src/heap_value.rs
52
67
  - ext/itsi_rb_helpers/src/lib.rs
68
+ - ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/common.rs
69
+ - ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/dynamic.rs
70
+ - ext/itsi_rb_helpers/target/debug/build/clang-sys-da71b0344e568175/out/macros.rs
71
+ - ext/itsi_rb_helpers/target/debug/build/rb-sys-eb9ed4ff3a60f995/out/bindings-0.9.110-mri-arm64-darwin23-3.4.2.rs
72
+ - ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-040pxg6yhb3g3/s-h5113n7a1b-03bwlt4.lock
73
+ - ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-131g1u4dzkt1a/s-h51113xnh3-1eik1ip.lock
74
+ - ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-131g1u4dzkt1a/s-h5111704jj-0g4rj8x.lock
75
+ - ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-1q2d3drtxrzs5/s-h5113n79yl-0bxcqc5.lock
76
+ - ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-374a9h7ovycj0/s-h51113xoox-10de2hp.lock
77
+ - ext/itsi_rb_helpers/target/debug/incremental/itsi_rb_helpers-374a9h7ovycj0/s-h5111704w7-0vdq7gq.lock
53
78
  - ext/itsi_scheduler/Cargo.toml
54
- - ext/itsi_scheduler/extconf.rb
55
79
  - ext/itsi_scheduler/src/itsi_scheduler.rs
56
80
  - ext/itsi_scheduler/src/itsi_scheduler/io_helpers.rs
57
81
  - ext/itsi_scheduler/src/itsi_scheduler/io_waiter.rs
58
82
  - ext/itsi_scheduler/src/itsi_scheduler/timer.rs
59
83
  - ext/itsi_scheduler/src/lib.rs
84
+ - ext/itsi_server/Cargo.lock
60
85
  - ext/itsi_server/Cargo.toml
61
- - ext/itsi_server/extconf.rb
62
- - ext/itsi_server/src/body_proxy/big_bytes.rs
63
- - ext/itsi_server/src/body_proxy/itsi_body_proxy.rs
64
- - ext/itsi_server/src/body_proxy/mod.rs
86
+ - ext/itsi_server/src/env.rs
65
87
  - ext/itsi_server/src/lib.rs
66
- - ext/itsi_server/src/request/itsi_request.rs
67
- - ext/itsi_server/src/request/mod.rs
68
- - ext/itsi_server/src/response/itsi_response.rs
69
- - ext/itsi_server/src/response/mod.rs
88
+ - ext/itsi_server/src/ruby_types/itsi_body_proxy/big_bytes.rs
89
+ - ext/itsi_server/src/ruby_types/itsi_body_proxy/mod.rs
90
+ - ext/itsi_server/src/ruby_types/itsi_grpc_request.rs
91
+ - ext/itsi_server/src/ruby_types/itsi_grpc_response.rs
92
+ - ext/itsi_server/src/ruby_types/itsi_grpc_stream/mod.rs
93
+ - ext/itsi_server/src/ruby_types/itsi_http_request.rs
94
+ - ext/itsi_server/src/ruby_types/itsi_http_response.rs
95
+ - ext/itsi_server/src/ruby_types/itsi_server.rs
96
+ - ext/itsi_server/src/ruby_types/itsi_server/file_watcher.rs
97
+ - ext/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs
98
+ - ext/itsi_server/src/ruby_types/mod.rs
70
99
  - ext/itsi_server/src/server/bind.rs
71
100
  - ext/itsi_server/src/server/bind_protocol.rs
101
+ - ext/itsi_server/src/server/byte_frame.rs
102
+ - ext/itsi_server/src/server/cache_store.rs
72
103
  - ext/itsi_server/src/server/io_stream.rs
73
- - ext/itsi_server/src/server/itsi_ca/itsi_ca.crt
74
- - ext/itsi_server/src/server/itsi_ca/itsi_ca.key
75
- - ext/itsi_server/src/server/itsi_server.rs
104
+ - ext/itsi_server/src/server/itsi_service.rs
76
105
  - ext/itsi_server/src/server/lifecycle_event.rs
77
106
  - ext/itsi_server/src/server/listener.rs
107
+ - ext/itsi_server/src/server/middleware_stack/middleware.rs
108
+ - ext/itsi_server/src/server/middleware_stack/middlewares/allow_list.rs
109
+ - ext/itsi_server/src/server/middleware_stack/middlewares/auth_api_key.rs
110
+ - ext/itsi_server/src/server/middleware_stack/middlewares/auth_basic.rs
111
+ - ext/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs
112
+ - ext/itsi_server/src/server/middleware_stack/middlewares/cache_control.rs
113
+ - ext/itsi_server/src/server/middleware_stack/middlewares/compression.rs
114
+ - ext/itsi_server/src/server/middleware_stack/middlewares/cors.rs
115
+ - ext/itsi_server/src/server/middleware_stack/middlewares/deny_list.rs
116
+ - ext/itsi_server/src/server/middleware_stack/middlewares/error_response.rs
117
+ - ext/itsi_server/src/server/middleware_stack/middlewares/etag.rs
118
+ - ext/itsi_server/src/server/middleware_stack/middlewares/grpc_service.rs
119
+ - ext/itsi_server/src/server/middleware_stack/middlewares/header_interpretation.rs
120
+ - ext/itsi_server/src/server/middleware_stack/middlewares/intrusion_protection.rs
121
+ - ext/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs
122
+ - ext/itsi_server/src/server/middleware_stack/middlewares/mod.rs
123
+ - ext/itsi_server/src/server/middleware_stack/middlewares/proxy.rs
124
+ - ext/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs
125
+ - ext/itsi_server/src/server/middleware_stack/middlewares/redirect.rs
126
+ - ext/itsi_server/src/server/middleware_stack/middlewares/request_headers.rs
127
+ - ext/itsi_server/src/server/middleware_stack/middlewares/response_headers.rs
128
+ - ext/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs
129
+ - ext/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs
130
+ - ext/itsi_server/src/server/middleware_stack/middlewares/string_rewrite.rs
131
+ - ext/itsi_server/src/server/middleware_stack/middlewares/token_source.rs
132
+ - ext/itsi_server/src/server/middleware_stack/mod.rs
78
133
  - ext/itsi_server/src/server/mod.rs
79
134
  - ext/itsi_server/src/server/process_worker.rs
135
+ - ext/itsi_server/src/server/rate_limiter.rs
136
+ - ext/itsi_server/src/server/request_job.rs
80
137
  - ext/itsi_server/src/server/serve_strategy/cluster_mode.rs
81
138
  - ext/itsi_server/src/server/serve_strategy/mod.rs
82
139
  - ext/itsi_server/src/server/serve_strategy/single_mode.rs
83
140
  - ext/itsi_server/src/server/signal.rs
141
+ - ext/itsi_server/src/server/static_file_server.rs
84
142
  - ext/itsi_server/src/server/thread_worker.rs
85
143
  - ext/itsi_server/src/server/tls.rs
86
144
  - ext/itsi_server/src/server/tls/locked_dir_cache.rs
145
+ - ext/itsi_server/src/server/types.rs
87
146
  - ext/itsi_tracing/Cargo.lock
88
147
  - ext/itsi_tracing/Cargo.toml
89
148
  - ext/itsi_tracing/src/lib.rs
149
+ - ext/itsi_tracing/target/debug/incremental/itsi_tracing-0994n8rpvvt9m/s-h510hfz1f6-1kbycmq.lock
150
+ - ext/itsi_tracing/target/debug/incremental/itsi_tracing-0bob7bf4yq34i/s-h5113125h5-0lh4rag.lock
151
+ - ext/itsi_tracing/target/debug/incremental/itsi_tracing-2fcodulrxbbxo/s-h510h2infk-0hp5kjw.lock
152
+ - ext/itsi_tracing/target/debug/incremental/itsi_tracing-2iak63r1woi1l/s-h510h2in4q-0kxfzw1.lock
153
+ - ext/itsi_tracing/target/debug/incremental/itsi_tracing-2kk4qj9gn5dg2/s-h5113124kv-0enwon2.lock
154
+ - ext/itsi_tracing/target/debug/incremental/itsi_tracing-2mwo0yas7dtw4/s-h510hfz1ha-1udgpei.lock
90
155
  - lib/itsi/scheduler.rb
91
156
  - lib/itsi/scheduler/version.rb
92
157
  - sig/itsi_scheduler.rbs
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "mkmf"
4
- require "rb_sys/mkmf"
5
-
6
- create_rust_makefile("itsi/server/itsi_server")
@@ -1,2 +0,0 @@
1
- pub mod big_bytes;
2
- pub mod itsi_body_proxy;
@@ -1 +0,0 @@
1
- pub mod itsi_request;
@@ -1 +0,0 @@
1
- pub mod itsi_response;
@@ -1,13 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIB9TCCAZugAwIBAgIUMpQtAScU2Ow9c1Xy/0b/kS/BuwcwCgYIKoZIzj0EAwIw
3
- UDELMAkGA1UEBhMCVVMxDTALBgNVBAgMBEl0c2kxDTALBgNVBAcMBEl0c2kxEDAO
4
- BgNVBAoMB0l0c2kgQ0ExETAPBgNVBAMMCGl0c2kuZnlpMB4XDTI1MDMwMzIwMjg1
5
- N1oXDTM1MDMwMTIwMjg1N1owUDELMAkGA1UEBhMCVVMxDTALBgNVBAgMBEl0c2kx
6
- DTALBgNVBAcMBEl0c2kxEDAOBgNVBAoMB0l0c2kgQ0ExETAPBgNVBAMMCGl0c2ku
7
- ZnlpMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqGdC9Vi1r7ARvqSkPXkAgiV5
8
- gn2MMTeEafagrWT7G1onSh/G+Qstxl61kfFNLOTiy6NSgAtKG+gfveCTo0Pcz6NT
9
- MFEwHQYDVR0OBBYEFN7zzDodmiK2VAzLDydDvb6Er+U+MB8GA1UdIwQYMBaAFN7z
10
- zDodmiK2VAzLDydDvb6Er+U+MA8GA1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwID
11
- SAAwRQIhAP8q3PiwqTwCbRvYvvetxH39mAce1mfQMosb33ns228VAiBXdb+p9s0o
12
- 5ug5g9/MTvrIPI7GgolXCWZunkouy0LSrw==
13
- -----END CERTIFICATE-----
@@ -1,5 +0,0 @@
1
- -----BEGIN PRIVATE KEY-----
2
- MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgC7WOxDmO7pBvDvYn
3
- YI8+z2/2c0ChxBsuJkQq/dXi1RyhRANCAASoZ0L1WLWvsBG+pKQ9eQCCJXmCfYwx
4
- N4Rp9qCtZPsbWidKH8b5Cy3GXrWR8U0s5OLLo1KAC0ob6B+94JOjQ9zP
5
- -----END PRIVATE KEY-----
@@ -1,244 +0,0 @@
1
- use super::{
2
- bind::Bind,
3
- listener::Listener,
4
- serve_strategy::{cluster_mode::ClusterMode, single_mode::SingleMode},
5
- signal::{clear_signal_handlers, reset_signal_handlers, SIGNAL_HANDLER_CHANNEL},
6
- };
7
- use crate::{request::itsi_request::ItsiRequest, server::serve_strategy::ServeStrategy};
8
- use derive_more::Debug;
9
- use itsi_rb_helpers::call_without_gvl;
10
- use itsi_tracing::error;
11
- use magnus::{
12
- block::Proc,
13
- error::Result,
14
- scan_args::{get_kwargs, scan_args, Args, KwArgs},
15
- value::{InnerValue, Opaque, ReprValue},
16
- RHash, Ruby, Symbol, Value,
17
- };
18
- use parking_lot::Mutex;
19
- use std::{cmp::max, ops::Deref, sync::Arc};
20
- use tracing::{info, instrument};
21
-
22
- static DEFAULT_BIND: &str = "localhost:3000";
23
-
24
- #[magnus::wrap(class = "Itsi::Server", free_immediately, size)]
25
- #[derive(Clone)]
26
- pub struct Server {
27
- pub config: Arc<ServerConfig>,
28
- }
29
-
30
- impl Deref for Server {
31
- type Target = ServerConfig;
32
-
33
- fn deref(&self) -> &Self::Target {
34
- &self.config
35
- }
36
- }
37
- type AfterFork = Mutex<Arc<Option<Box<dyn Fn() + Send + Sync>>>>;
38
-
39
- #[derive(Debug)]
40
- pub struct ServerConfig {
41
- #[debug(skip)]
42
- pub app: Opaque<Value>,
43
- #[allow(unused)]
44
- pub workers: u8,
45
- #[allow(unused)]
46
- pub threads: u8,
47
- #[allow(unused)]
48
- pub shutdown_timeout: f64,
49
- pub script_name: String,
50
- pub(crate) binds: Mutex<Vec<Bind>>,
51
- #[debug(skip)]
52
- pub before_fork: Mutex<Option<Box<dyn FnOnce() + Send + Sync>>>,
53
- #[debug(skip)]
54
- pub after_fork: AfterFork,
55
- pub scheduler_class: Option<String>,
56
- pub stream_body: Option<bool>,
57
- pub worker_memory_limit: Option<u64>,
58
- }
59
-
60
- #[derive(Debug)]
61
- pub enum RequestJob {
62
- ProcessRequest(ItsiRequest),
63
- Shutdown,
64
- }
65
-
66
- impl Server {
67
- #[instrument(
68
- name = "Itsi",
69
- parent=None,
70
- skip(args),
71
- fields(workers = 1, threads = 1, shutdown_timeout = 5)
72
- )]
73
- pub fn new(args: &[Value]) -> Result<Self> {
74
- let scan_args: Args<(), (), (), (), RHash, ()> = scan_args(args)?;
75
-
76
- type ArgSet1 = (
77
- Option<u8>,
78
- Option<u8>,
79
- Option<f64>,
80
- Option<String>,
81
- Option<Vec<String>>,
82
- Option<Proc>,
83
- Option<Proc>,
84
- Option<String>,
85
- Option<bool>,
86
- );
87
-
88
- type ArgSet2 = (Option<u64>,);
89
-
90
- let args1: KwArgs<(Value,), ArgSet1, ()> = get_kwargs(
91
- scan_args
92
- .keywords
93
- .funcall::<_, _, RHash>(
94
- "slice",
95
- (
96
- Symbol::new("app"),
97
- Symbol::new("workers"),
98
- Symbol::new("threads"),
99
- Symbol::new("shutdown_timeout"),
100
- Symbol::new("script_name"),
101
- Symbol::new("binds"),
102
- Symbol::new("before_fork"),
103
- Symbol::new("after_fork"),
104
- Symbol::new("scheduler_class"),
105
- Symbol::new("stream_body"),
106
- ),
107
- )
108
- .unwrap(),
109
- &["app"],
110
- &[
111
- "workers",
112
- "threads",
113
- "shutdown_timeout",
114
- "script_name",
115
- "binds",
116
- "before_fork",
117
- "after_fork",
118
- "scheduler_class",
119
- "stream_body",
120
- ],
121
- )?;
122
-
123
- let args2: KwArgs<(), ArgSet2, ()> = get_kwargs(
124
- scan_args
125
- .keywords
126
- .funcall::<_, _, RHash>("slice", (Symbol::new("worker_memory_limit"),))
127
- .unwrap(),
128
- &[],
129
- &["worker_memory_limit"],
130
- )?;
131
-
132
- let config = ServerConfig {
133
- app: Opaque::from(args1.required.0),
134
- workers: max(args1.optional.0.unwrap_or(1), 1),
135
- threads: max(args1.optional.1.unwrap_or(1), 1),
136
- shutdown_timeout: args1.optional.2.unwrap_or(5.0),
137
- script_name: args1.optional.3.unwrap_or("".to_string()),
138
- binds: Mutex::new(
139
- args1
140
- .optional
141
- .4
142
- .unwrap_or_else(|| vec![DEFAULT_BIND.to_string()])
143
- .into_iter()
144
- .map(|s| s.parse())
145
- .collect::<itsi_error::Result<Vec<Bind>>>()?,
146
- ),
147
- before_fork: Mutex::new(args1.optional.5.map(|p| {
148
- let opaque_proc = Opaque::from(p);
149
- Box::new(move || {
150
- opaque_proc
151
- .get_inner_with(&Ruby::get().unwrap())
152
- .call::<_, Value>(())
153
- .unwrap();
154
- }) as Box<dyn FnOnce() + Send + Sync>
155
- })),
156
- after_fork: Mutex::new(Arc::new(args1.optional.6.map(|p| {
157
- let opaque_proc = Opaque::from(p);
158
- Box::new(move || {
159
- opaque_proc
160
- .get_inner_with(&Ruby::get().unwrap())
161
- .call::<_, Value>(())
162
- .unwrap();
163
- }) as Box<dyn Fn() + Send + Sync>
164
- }))),
165
- scheduler_class: args1.optional.7.clone(),
166
- stream_body: args1.optional.8,
167
- worker_memory_limit: args2.optional.0,
168
- };
169
-
170
- if let Some(scheduler_class) = args1.optional.7 {
171
- info!(scheduler_class, fiber_scheduler = true);
172
- } else {
173
- info!(fiber_scheduler = false);
174
- }
175
-
176
- Ok(Server {
177
- config: Arc::new(config),
178
- })
179
- }
180
-
181
- #[instrument(name = "Bind", skip_all, fields(binds=format!("{:?}", self.config.binds.lock())))]
182
- pub(crate) fn listeners(&self) -> Result<Arc<Vec<Arc<Listener>>>> {
183
- let listeners = self
184
- .config
185
- .binds
186
- .lock()
187
- .iter()
188
- .cloned()
189
- .map(Listener::try_from)
190
- .collect::<std::result::Result<Vec<Listener>, _>>()?
191
- .into_iter()
192
- .map(Arc::new)
193
- .collect::<Vec<_>>();
194
- info!("Bound {:?} listeners", listeners.len());
195
- Ok(Arc::new(listeners))
196
- }
197
-
198
- pub(crate) fn build_strategy(
199
- self,
200
- listeners: Arc<Vec<Arc<Listener>>>,
201
- ) -> Result<ServeStrategy> {
202
- let server = Arc::new(self);
203
-
204
- let strategy = if server.config.workers == 1 {
205
- ServeStrategy::Single(Arc::new(SingleMode::new(
206
- server,
207
- listeners,
208
- SIGNAL_HANDLER_CHANNEL.0.clone(),
209
- )?))
210
- } else {
211
- ServeStrategy::Cluster(Arc::new(ClusterMode::new(
212
- server,
213
- listeners,
214
- SIGNAL_HANDLER_CHANNEL.0.clone(),
215
- )))
216
- };
217
- Ok(strategy)
218
- }
219
-
220
- pub fn start(&self) -> Result<()> {
221
- reset_signal_handlers();
222
- let rself = self.clone();
223
- let listeners = self.listeners()?;
224
- let listeners_clone = listeners.clone();
225
- call_without_gvl(move || -> Result<()> {
226
- let strategy = rself.build_strategy(listeners_clone)?;
227
- if let Err(e) = strategy.run() {
228
- error!("Error running server: {}", e);
229
- strategy.stop()?;
230
- }
231
- drop(strategy);
232
- Ok(())
233
- })?;
234
- if let Ok(listeners) = Arc::try_unwrap(listeners) {
235
- listeners.into_iter().for_each(|listener| {
236
- if let Ok(listener) = Arc::try_unwrap(listener) {
237
- listener.unbind()
238
- };
239
- });
240
- }
241
- clear_signal_handlers();
242
- Ok(())
243
- }
244
- }