itsi-server 0.2.21 → 0.2.23
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 +25 -38
- data/Cargo.toml +4 -0
- data/Rakefile +39 -7
- data/ext/itsi_scheduler/Cargo.toml +1 -1
- data/ext/itsi_server/Cargo.lock +2 -2
- data/ext/itsi_server/Cargo.toml +1 -1
- data/ext/itsi_server/src/server/middleware_stack/mod.rs +3 -9
- data/ext/itsi_server/src/server/signal.rs +7 -5
- data/ext/itsi_server/src/services/itsi_http_service.rs +5 -8
- data/lib/itsi/server/native_extension.rb +34 -0
- data/lib/itsi/server/version.rb +1 -1
- data/lib/itsi/server.rb +10 -2
- data/vendor/rb-sys-build/.cargo-ok +1 -0
- data/vendor/rb-sys-build/.cargo_vcs_info.json +6 -0
- data/vendor/rb-sys-build/Cargo.lock +294 -0
- data/vendor/rb-sys-build/Cargo.toml +71 -0
- data/vendor/rb-sys-build/Cargo.toml.orig +32 -0
- data/vendor/rb-sys-build/LICENSE-APACHE +190 -0
- data/vendor/rb-sys-build/LICENSE-MIT +21 -0
- data/vendor/rb-sys-build/src/bindings/sanitizer.rs +185 -0
- data/vendor/rb-sys-build/src/bindings/stable_api.rs +247 -0
- data/vendor/rb-sys-build/src/bindings/wrapper.h +71 -0
- data/vendor/rb-sys-build/src/bindings.rs +280 -0
- data/vendor/rb-sys-build/src/cc.rs +421 -0
- data/vendor/rb-sys-build/src/lib.rs +12 -0
- data/vendor/rb-sys-build/src/rb_config/flags.rs +101 -0
- data/vendor/rb-sys-build/src/rb_config/library.rs +132 -0
- data/vendor/rb-sys-build/src/rb_config/search_path.rs +57 -0
- data/vendor/rb-sys-build/src/rb_config.rs +906 -0
- data/vendor/rb-sys-build/src/utils.rs +53 -0
- metadata +25 -11
- data/ext/itsi_server/target/release/build/clang-sys-0dae18670e690c25/out/common.rs +0 -355
- data/ext/itsi_server/target/release/build/clang-sys-0dae18670e690c25/out/dynamic.rs +0 -276
- data/ext/itsi_server/target/release/build/clang-sys-0dae18670e690c25/out/macros.rs +0 -49
- data/ext/itsi_server/target/release/build/oid-registry-71b994a322b296ec/out/oid_db.rs +0 -537
- data/ext/itsi_server/target/release/build/rb-sys-9f9831ab50fb86db/out/bindings-0.9.124-mri-arm64-darwin24-2.7.8.rs +0 -6234
- data/ext/itsi_server/target/release/build/rb-sys-9f9831ab50fb86db/out/bindings-0.9.124-mri-arm64-darwin24-3.4.5.rs +0 -8936
- data/ext/itsi_server/target/release/build/rb-sys-9f9831ab50fb86db/out/bindings-0.9.124-mri-arm64-darwin24-4.0.1.rs +0 -9060
- data/ext/itsi_server/target/release/build/typenum-11265e44e46de3b7/out/tests.rs +0 -20563
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fb8f000cf846b5324309070910aac12db86cfe8dc10a792aab03def624e25fe7
|
|
4
|
+
data.tar.gz: 76d9b53f76fd77622aec8059f815a77bdd9684262fc9ff3851292bf5c75f9e57
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 378978e97506653bc14235b7859390c9f4acde16f9fc2b99025834474568deb12004a140dfaa6b6fdf9a86daa9d7a4ba53c00405ccf962035cd20c49e8eae6d1
|
|
7
|
+
data.tar.gz: b0512cec9b48b744a199d51e39accbad5fcd7904d7e2b47195502fbbe89a665ef7b05be072a2ae639807f0450a3b7a64c4790e78270cae47020d28425f66161a
|
data/Cargo.lock
CHANGED
|
@@ -270,7 +270,7 @@ version = "0.28.2"
|
|
|
270
270
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
271
271
|
checksum = "bfa9b6986f250236c27e5a204062434a773a13243d2ffc2955f37bdba4c5c6a1"
|
|
272
272
|
dependencies = [
|
|
273
|
-
"bindgen",
|
|
273
|
+
"bindgen 0.69.5",
|
|
274
274
|
"cc",
|
|
275
275
|
"cmake",
|
|
276
276
|
"dunce",
|
|
@@ -427,6 +427,24 @@ dependencies = [
|
|
|
427
427
|
"which",
|
|
428
428
|
]
|
|
429
429
|
|
|
430
|
+
[[package]]
|
|
431
|
+
name = "bindgen"
|
|
432
|
+
version = "0.72.1"
|
|
433
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
434
|
+
checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895"
|
|
435
|
+
dependencies = [
|
|
436
|
+
"bitflags 2.9.0",
|
|
437
|
+
"cexpr",
|
|
438
|
+
"clang-sys",
|
|
439
|
+
"itertools",
|
|
440
|
+
"proc-macro2",
|
|
441
|
+
"quote",
|
|
442
|
+
"regex",
|
|
443
|
+
"rustc-hash 2.1.1",
|
|
444
|
+
"shlex",
|
|
445
|
+
"syn 2.0.101",
|
|
446
|
+
]
|
|
447
|
+
|
|
430
448
|
[[package]]
|
|
431
449
|
name = "bitflags"
|
|
432
450
|
version = "1.3.2"
|
|
@@ -660,7 +678,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
660
678
|
checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
|
|
661
679
|
dependencies = [
|
|
662
680
|
"lazy_static",
|
|
663
|
-
"windows-sys 0.
|
|
681
|
+
"windows-sys 0.48.0",
|
|
664
682
|
]
|
|
665
683
|
|
|
666
684
|
[[package]]
|
|
@@ -1642,27 +1660,9 @@ version = "1.0.15"
|
|
|
1642
1660
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1643
1661
|
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
|
|
1644
1662
|
|
|
1645
|
-
[[package]]
|
|
1646
|
-
name = "itsi-scheduler"
|
|
1647
|
-
version = "0.2.21"
|
|
1648
|
-
dependencies = [
|
|
1649
|
-
"bytes",
|
|
1650
|
-
"derive_more",
|
|
1651
|
-
"itsi_error",
|
|
1652
|
-
"itsi_instrument_entry",
|
|
1653
|
-
"itsi_rb_helpers",
|
|
1654
|
-
"itsi_tracing",
|
|
1655
|
-
"magnus",
|
|
1656
|
-
"mio",
|
|
1657
|
-
"nix",
|
|
1658
|
-
"parking_lot",
|
|
1659
|
-
"rb-sys",
|
|
1660
|
-
"tracing",
|
|
1661
|
-
]
|
|
1662
|
-
|
|
1663
1663
|
[[package]]
|
|
1664
1664
|
name = "itsi-server"
|
|
1665
|
-
version = "0.2.
|
|
1665
|
+
version = "0.2.23"
|
|
1666
1666
|
dependencies = [
|
|
1667
1667
|
"argon2",
|
|
1668
1668
|
"async-channel",
|
|
@@ -1772,15 +1772,6 @@ dependencies = [
|
|
|
1772
1772
|
"thiserror 2.0.12",
|
|
1773
1773
|
]
|
|
1774
1774
|
|
|
1775
|
-
[[package]]
|
|
1776
|
-
name = "itsi_instrument_entry"
|
|
1777
|
-
version = "0.1.0"
|
|
1778
|
-
dependencies = [
|
|
1779
|
-
"proc-macro2",
|
|
1780
|
-
"quote",
|
|
1781
|
-
"syn 1.0.109",
|
|
1782
|
-
]
|
|
1783
|
-
|
|
1784
1775
|
[[package]]
|
|
1785
1776
|
name = "itsi_rb_helpers"
|
|
1786
1777
|
version = "0.1.0"
|
|
@@ -1934,8 +1925,7 @@ checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
|
|
|
1934
1925
|
[[package]]
|
|
1935
1926
|
name = "magnus"
|
|
1936
1927
|
version = "0.8.2"
|
|
1937
|
-
source = "
|
|
1938
|
-
checksum = "3b36a5b126bbe97eb0d02d07acfeb327036c6319fd816139a49824a83b7f9012"
|
|
1928
|
+
source = "git+https://github.com/matsadler/magnus.git?rev=1ed232edb2b75a2eed9b1def34ad57e55c411a5c#1ed232edb2b75a2eed9b1def34ad57e55c411a5c"
|
|
1939
1929
|
dependencies = [
|
|
1940
1930
|
"bytes",
|
|
1941
1931
|
"magnus-macros",
|
|
@@ -1947,8 +1937,7 @@ dependencies = [
|
|
|
1947
1937
|
[[package]]
|
|
1948
1938
|
name = "magnus-macros"
|
|
1949
1939
|
version = "0.8.0"
|
|
1950
|
-
source = "
|
|
1951
|
-
checksum = "47607461fd8e1513cb4f2076c197d8092d921a1ea75bd08af97398f593751892"
|
|
1940
|
+
source = "git+https://github.com/matsadler/magnus.git?rev=1ed232edb2b75a2eed9b1def34ad57e55c411a5c#1ed232edb2b75a2eed9b1def34ad57e55c411a5c"
|
|
1952
1941
|
dependencies = [
|
|
1953
1942
|
"proc-macro2",
|
|
1954
1943
|
"quote",
|
|
@@ -2591,10 +2580,8 @@ dependencies = [
|
|
|
2591
2580
|
[[package]]
|
|
2592
2581
|
name = "rb-sys-build"
|
|
2593
2582
|
version = "0.9.124"
|
|
2594
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2595
|
-
checksum = "568068db4102230882e6d4ae8de6632e224ca75fe5970f6e026a04e91ed635d3"
|
|
2596
2583
|
dependencies = [
|
|
2597
|
-
"bindgen",
|
|
2584
|
+
"bindgen 0.72.1",
|
|
2598
2585
|
"lazy_static",
|
|
2599
2586
|
"proc-macro2",
|
|
2600
2587
|
"quote",
|
|
@@ -3922,7 +3909,7 @@ version = "0.1.9"
|
|
|
3922
3909
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3923
3910
|
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
|
|
3924
3911
|
dependencies = [
|
|
3925
|
-
"windows-sys 0.
|
|
3912
|
+
"windows-sys 0.48.0",
|
|
3926
3913
|
]
|
|
3927
3914
|
|
|
3928
3915
|
[[package]]
|
data/Cargo.toml
CHANGED
data/Rakefile
CHANGED
|
@@ -3,15 +3,47 @@
|
|
|
3
3
|
require "bundler/gem_tasks"
|
|
4
4
|
require "minitest/test_task"
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
SMOKE_TEST_GLOBS = %w[
|
|
7
|
+
test/options/bind.rb
|
|
8
|
+
test/options/header_read_timeout.rb
|
|
9
|
+
test/options/test_request_timeout.rb
|
|
10
|
+
test/options/test_threads.rb
|
|
11
|
+
test/rack/test_rack_server.rb
|
|
12
|
+
test/middleware/allow_list.rb
|
|
13
|
+
test/middleware/auth_api_key.rb
|
|
14
|
+
test/middleware/auth_basic.rb
|
|
15
|
+
test/middleware/cache_control.rb
|
|
16
|
+
test/middleware/cidr_to_regex.rb
|
|
17
|
+
test/middleware/compression.rb
|
|
18
|
+
test/middleware/cors.rb
|
|
19
|
+
test/middleware/csp.rb
|
|
20
|
+
test/middleware/deny_list.rb
|
|
21
|
+
test/middleware/etag.rb
|
|
22
|
+
test/middleware/header_interpolation.rb
|
|
23
|
+
test/middleware/location.rb
|
|
24
|
+
test/middleware/max_body.rb
|
|
25
|
+
test/middleware/request_headers.rb
|
|
26
|
+
test/middleware/response_headers.rb
|
|
27
|
+
test/middleware/static_assets.rb
|
|
28
|
+
test/middleware/static_response.rb
|
|
29
|
+
test/middleware/string_rewrite.rb
|
|
30
|
+
].freeze
|
|
31
|
+
|
|
32
|
+
def configure_test_task(task_name, test_globs)
|
|
33
|
+
Minitest::TestTask.create(task_name) do |t|
|
|
34
|
+
t.libs << "test"
|
|
35
|
+
t.libs << "lib"
|
|
36
|
+
t.warning = false
|
|
37
|
+
t.test_globs = test_globs
|
|
38
|
+
t.test_prelude = 'require "helpers/test_helper.rb"'
|
|
39
|
+
end
|
|
13
40
|
end
|
|
14
41
|
|
|
42
|
+
configure_test_task(:test, ["test/**/*.rb"])
|
|
43
|
+
configure_test_task("test:smoke", SMOKE_TEST_GLOBS)
|
|
44
|
+
|
|
45
|
+
task "test:full" => :test
|
|
46
|
+
|
|
15
47
|
require "rb_sys/extensiontask"
|
|
16
48
|
|
|
17
49
|
task build: :compile
|
data/ext/itsi_server/Cargo.lock
CHANGED
|
@@ -984,7 +984,7 @@ checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
|
|
|
984
984
|
|
|
985
985
|
[[package]]
|
|
986
986
|
name = "itsi-scheduler"
|
|
987
|
-
version = "0.
|
|
987
|
+
version = "0.2.23"
|
|
988
988
|
dependencies = [
|
|
989
989
|
"bytes",
|
|
990
990
|
"derive_more",
|
|
@@ -1002,7 +1002,7 @@ dependencies = [
|
|
|
1002
1002
|
|
|
1003
1003
|
[[package]]
|
|
1004
1004
|
name = "itsi-server"
|
|
1005
|
-
version = "0.
|
|
1005
|
+
version = "0.2.23"
|
|
1006
1006
|
dependencies = [
|
|
1007
1007
|
"async-channel",
|
|
1008
1008
|
"async-trait",
|
data/ext/itsi_server/Cargo.toml
CHANGED
|
@@ -263,7 +263,7 @@ impl MiddlewareSet {
|
|
|
263
263
|
pub fn stack_for(
|
|
264
264
|
&self,
|
|
265
265
|
request: &HttpRequest,
|
|
266
|
-
) ->
|
|
266
|
+
) -> Option<(&Vec<Middleware>, Option<Arc<Regex>>)> {
|
|
267
267
|
let binding = self.route_set.matches(request.uri().path());
|
|
268
268
|
let matches = binding.iter();
|
|
269
269
|
|
|
@@ -276,7 +276,7 @@ impl MiddlewareSet {
|
|
|
276
276
|
let matching_pattern = self.patterns.get(index).cloned();
|
|
277
277
|
if let Some(stack) = self.stacks.get(&index) {
|
|
278
278
|
if stack.matches(request) {
|
|
279
|
-
return
|
|
279
|
+
return Some((&stack.layers, matching_pattern));
|
|
280
280
|
}
|
|
281
281
|
}
|
|
282
282
|
}
|
|
@@ -285,13 +285,7 @@ impl MiddlewareSet {
|
|
|
285
285
|
request.uri().path(),
|
|
286
286
|
self.route_set
|
|
287
287
|
);
|
|
288
|
-
|
|
289
|
-
magnus::Ruby::get().unwrap().exception_standard_error(),
|
|
290
|
-
format!(
|
|
291
|
-
"No matching middleware stack found for request: {:?}",
|
|
292
|
-
request
|
|
293
|
-
),
|
|
294
|
-
))
|
|
288
|
+
None
|
|
295
289
|
}
|
|
296
290
|
|
|
297
291
|
pub fn parse_middleware(middleware_type: String, parameters: Value) -> Result<Middleware> {
|
|
@@ -45,15 +45,17 @@ pub fn unsubscribe_runtime() {
|
|
|
45
45
|
pub fn send_lifecycle_event(event: LifecycleEvent) {
|
|
46
46
|
if let Some(sender) = SIGNAL_HANDLER_CHANNEL.lock().as_ref() {
|
|
47
47
|
if let Err(e) = sender.send(event) {
|
|
48
|
-
// Channel full or receivers dropped - this is a critical error for shutdown signals
|
|
49
|
-
eprintln!("Critical: Failed to send lifecycle event {:?}", e);
|
|
50
|
-
// For shutdown events, try to force exit if channel delivery fails
|
|
51
48
|
if matches!(
|
|
52
49
|
e.0,
|
|
53
50
|
LifecycleEvent::Shutdown | LifecycleEvent::ForceShutdown
|
|
54
51
|
) {
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
SHUTDOWN_REQUESTED.store(true, Ordering::SeqCst);
|
|
53
|
+
warn!(
|
|
54
|
+
"Dropping shutdown lifecycle event after receiver closed: {:?}",
|
|
55
|
+
e
|
|
56
|
+
);
|
|
57
|
+
} else {
|
|
58
|
+
eprintln!("Warning: Failed to send lifecycle event {:?}", e);
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
61
|
} else {
|
|
@@ -188,14 +188,11 @@ impl ItsiHttpService {
|
|
|
188
188
|
let token_preference = self.server_params.itsi_server_token_preference;
|
|
189
189
|
|
|
190
190
|
let service_future = async move {
|
|
191
|
-
let
|
|
192
|
-
.server_params
|
|
193
|
-
|
|
194
|
-
.
|
|
195
|
-
|
|
196
|
-
.stack_for(&req)
|
|
197
|
-
.unwrap();
|
|
198
|
-
let (stack, matching_pattern) = middleware_stack;
|
|
191
|
+
let Some((stack, matching_pattern)) =
|
|
192
|
+
self.server_params.middleware.get().unwrap().stack_for(&req)
|
|
193
|
+
else {
|
|
194
|
+
return Ok(NOT_FOUND_RESPONSE.to_http_response(accept).await);
|
|
195
|
+
};
|
|
199
196
|
let mut resp: Option<HttpResponse> = None;
|
|
200
197
|
|
|
201
198
|
let mut context =
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rbconfig"
|
|
4
|
+
|
|
5
|
+
module Itsi
|
|
6
|
+
class Server
|
|
7
|
+
module NativeExtension
|
|
8
|
+
module_function
|
|
9
|
+
|
|
10
|
+
def require!
|
|
11
|
+
ruby_abi = RUBY_VERSION[/\A\d+\.\d+/]
|
|
12
|
+
|
|
13
|
+
if ruby_abi && versioned_binary_present?(ruby_abi)
|
|
14
|
+
begin
|
|
15
|
+
require_relative "#{ruby_abi}/itsi_server"
|
|
16
|
+
return
|
|
17
|
+
rescue LoadError
|
|
18
|
+
# Fall back to the source-built extension when a packaged binary
|
|
19
|
+
# exists but cannot be loaded on this machine.
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
require_relative "itsi_server"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def versioned_binary_present?(ruby_abi)
|
|
27
|
+
binary_path = File.join(__dir__, ruby_abi, "itsi_server.#{RbConfig::CONFIG.fetch("DLEXT")}")
|
|
28
|
+
File.exist?(binary_path)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
Itsi::Server::NativeExtension.require!
|
data/lib/itsi/server/version.rb
CHANGED
data/lib/itsi/server.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative "server/version"
|
|
4
|
-
require_relative "server/
|
|
4
|
+
require_relative "server/native_extension"
|
|
5
5
|
require_relative "server/rack_interface"
|
|
6
6
|
require_relative "server/grpc/grpc_interface"
|
|
7
7
|
require_relative "server/grpc/grpc_call"
|
|
@@ -87,7 +87,15 @@ module Itsi
|
|
|
87
87
|
|
|
88
88
|
def stop_background_threads
|
|
89
89
|
@running && @running.each(&:stop)
|
|
90
|
-
@background_threads&.each
|
|
90
|
+
@background_threads&.each do |thread|
|
|
91
|
+
next unless thread
|
|
92
|
+
|
|
93
|
+
thread.join(5)
|
|
94
|
+
next unless thread.alive?
|
|
95
|
+
|
|
96
|
+
thread.kill
|
|
97
|
+
thread.join(1)
|
|
98
|
+
end
|
|
91
99
|
@background_threads = []
|
|
92
100
|
@running = []
|
|
93
101
|
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"v":1}
|