itsi 0.2.15 → 0.2.16
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/CHANGELOG.md +10 -0
- data/Cargo.lock +74 -74
- data/crates/itsi_scheduler/Cargo.toml +1 -1
- data/crates/itsi_scheduler/extconf.rb +3 -1
- data/crates/itsi_server/Cargo.lock +1 -1
- data/crates/itsi_server/Cargo.toml +1 -1
- data/crates/itsi_server/extconf.rb +3 -1
- data/crates/itsi_server/src/lib.rs +1 -0
- data/crates/itsi_server/src/ruby_types/itsi_grpc_call.rs +2 -2
- data/crates/itsi_server/src/ruby_types/itsi_http_request.rs +9 -11
- data/crates/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +6 -1
- data/crates/itsi_server/src/server/binds/listener.rs +4 -1
- data/crates/itsi_server/src/server/http_message_types.rs +1 -1
- data/crates/itsi_server/src/server/middleware_stack/middlewares/error_response/default_responses.rs +32 -34
- data/crates/itsi_server/src/server/middleware_stack/middlewares/error_response.rs +3 -4
- data/crates/itsi_server/src/server/middleware_stack/middlewares/etag.rs +23 -38
- data/crates/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs +65 -14
- data/crates/itsi_server/src/server/middleware_stack/middlewares/max_body.rs +1 -1
- data/crates/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +1 -1
- data/crates/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs +21 -8
- data/crates/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +1 -5
- data/crates/itsi_server/src/server/middleware_stack/middlewares/static_response.rs +12 -3
- data/crates/itsi_server/src/server/process_worker.rs +2 -1
- data/crates/itsi_server/src/server/serve_strategy/acceptor.rs +96 -0
- data/crates/itsi_server/src/server/serve_strategy/mod.rs +1 -0
- data/crates/itsi_server/src/server/serve_strategy/single_mode.rs +80 -136
- data/crates/itsi_server/src/server/thread_worker.rs +10 -3
- data/crates/itsi_server/src/services/itsi_http_service.rs +26 -21
- data/crates/itsi_server/src/services/mime_types.rs +185 -183
- data/crates/itsi_server/src/services/rate_limiter.rs +16 -34
- data/crates/itsi_server/src/services/static_file_server.rs +7 -13
- data/docs/content/features/_index.md +1 -1
- data/examples/rails_with_static_assets/Gemfile.lock +1 -1
- data/examples/rails_with_static_assets/Itsi.rb +4 -1
- data/gems/scheduler/Cargo.lock +15 -15
- data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
- data/gems/server/Cargo.lock +73 -73
- data/gems/server/lib/itsi/server/config/config_helpers.rb +1 -2
- data/gems/server/lib/itsi/server/config/middleware/etag.md +3 -7
- data/gems/server/lib/itsi/server/config/middleware/etag.rb +2 -4
- data/gems/server/lib/itsi/server/config/options/listen_backlog.rb +1 -1
- data/gems/server/lib/itsi/server/config/options/send_buffer_size.md +15 -0
- data/gems/server/lib/itsi/server/config/options/send_buffer_size.rb +19 -0
- data/gems/server/lib/itsi/server/config.rb +24 -25
- data/gems/server/lib/itsi/server/route_tester.rb +1 -1
- data/gems/server/lib/itsi/server/version.rb +1 -1
- data/gems/server/test/middleware/etag.rb +3 -3
- data/gems/server/test/options/ruby_thread_request_backlog_size.rb +2 -3
- data/lib/itsi/version.rb +1 -1
- data/tasks.txt +8 -7
- metadata +8 -5
@@ -41,29 +41,28 @@ module Itsi
|
|
41
41
|
DSL.evaluate(&builder_proc)
|
42
42
|
elsif args[:static]
|
43
43
|
DSL.evaluate do
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
end
|
44
|
+
rate_limit key: "address", store_config: "in_memory", requests: 5, seconds: 10
|
45
|
+
etag type: "strong", algorithm: "md5", min_body_size: 1024 * 1024
|
46
|
+
compress min_size: 1024 * 1024, level: "fastest", algorithms: %w[zstd gzip br deflate],
|
47
|
+
mime_types: %w[all], compress_streams: true
|
48
|
+
log_requests before: { level: "DEBUG", format: "[{request_id}] {method} {path_and_query} - {addr} " },
|
49
|
+
after: { level: "DEBUG",
|
50
|
+
format: "[{request_id}] └─ {status} in {response_time}" }
|
51
|
+
nodelay false
|
52
|
+
static_assets \
|
53
|
+
relative_path: true,
|
54
|
+
allowed_extensions: [],
|
55
|
+
root_dir: ".",
|
56
|
+
not_found_behavior: { error: "not_found" },
|
57
|
+
auto_index: true,
|
58
|
+
try_html_extension: true,
|
59
|
+
max_file_size_in_memory: 1024 * 1024, # 1MB
|
60
|
+
max_files_in_memory: 1000,
|
61
|
+
file_check_interval: 1,
|
62
|
+
serve_hidden_files: false,
|
63
|
+
headers: {
|
64
|
+
"X-Content-Type-Options" => "nosniff"
|
65
|
+
}
|
67
66
|
end
|
68
67
|
elsif File.exist?(config_file_path.to_s)
|
69
68
|
DSL.evaluate(config_file_path)
|
@@ -106,7 +105,6 @@ module Itsi
|
|
106
105
|
Server.write_pid
|
107
106
|
end
|
108
107
|
|
109
|
-
|
110
108
|
srv_config = {
|
111
109
|
workers: args.fetch(:workers) { itsifile_config.fetch(:workers, 1) },
|
112
110
|
worker_memory_limit: args.fetch(:worker_memory_limit) { itsifile_config.fetch(:worker_memory_limit, nil) },
|
@@ -148,7 +146,8 @@ module Itsi
|
|
148
146
|
reuse_port: itsifile_config.fetch(:reuse_port, true),
|
149
147
|
listen_backlog: itsifile_config.fetch(:listen_backlog, 1024),
|
150
148
|
nodelay: itsifile_config.fetch(:nodelay, true),
|
151
|
-
recv_buffer_size: itsifile_config.fetch(:recv_buffer_size, 262_144)
|
149
|
+
recv_buffer_size: itsifile_config.fetch(:recv_buffer_size, 262_144),
|
150
|
+
send_buffer_size: itsifile_config.fetch(:send_buffer_size, 262_144)
|
152
151
|
}.transform_keys(&:to_s)
|
153
152
|
|
154
153
|
[srv_config, errors_to_error_lines(errors)]
|
@@ -23,7 +23,7 @@ module Itsi
|
|
23
23
|
when "cors"
|
24
24
|
"\e[33mcors\e[0m(#{mw_args["allow_origins"].join(" ")}, #{mw_args["allow_methods"].join(" ")})"
|
25
25
|
when "etag"
|
26
|
-
"\e[33metag\e[0m(#{mw_args["type"]}/#{mw_args["algorithm"]}
|
26
|
+
"\e[33metag\e[0m(#{mw_args["type"]}/#{mw_args["algorithm"]})"
|
27
27
|
when "cache_control"
|
28
28
|
"\e[33mcache_control\e[0m(max_age: #{mw_args["max_age"]}, #{mw_args.select do |_, v|
|
29
29
|
v == true
|
@@ -4,7 +4,7 @@ class TestETag < Minitest::Test
|
|
4
4
|
def test_strong_etag_added
|
5
5
|
server(
|
6
6
|
itsi_rb: lambda do
|
7
|
-
etag type: "strong", algorithm: "sha256", min_body_size: 0
|
7
|
+
etag type: "strong", algorithm: "sha256", min_body_size: 0
|
8
8
|
get("/foo") { |r| r.ok "etag-body" }
|
9
9
|
end
|
10
10
|
) do
|
@@ -17,7 +17,7 @@ class TestETag < Minitest::Test
|
|
17
17
|
def test_weak_etag_added_with_md5
|
18
18
|
server(
|
19
19
|
itsi_rb: lambda do
|
20
|
-
etag type: "weak", algorithm: "md5", min_body_size: 0
|
20
|
+
etag type: "weak", algorithm: "md5", min_body_size: 0
|
21
21
|
get("/foo") { |r| r.ok "etag-weak-md5" }
|
22
22
|
end
|
23
23
|
) do
|
@@ -42,7 +42,7 @@ class TestETag < Minitest::Test
|
|
42
42
|
body = "etag-content"
|
43
43
|
server(
|
44
44
|
itsi_rb: lambda do
|
45
|
-
etag type: "strong", min_body_size: 0
|
45
|
+
etag type: "strong", min_body_size: 0
|
46
46
|
get("/foo") { |r| r.ok body }
|
47
47
|
end
|
48
48
|
) do
|
@@ -12,9 +12,8 @@ class TestRubyThreadRequestBacklogSize < Minitest::Test
|
|
12
12
|
end) do
|
13
13
|
responses = 10.times.map{ Thread.new{ get_resp("/foo") } }.map(&:value)
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
assert_equal "503", responses.last.code
|
15
|
+
assert responses.map(&:code).include?("200")
|
16
|
+
assert responses.map(&:code).include?("503")
|
18
17
|
end
|
19
18
|
end
|
20
19
|
|
data/lib/itsi/version.rb
CHANGED
data/tasks.txt
CHANGED
@@ -1,16 +1,17 @@
|
|
1
|
-
-
|
2
|
-
-
|
3
|
-
-
|
1
|
+
- Test CRB without main
|
2
|
+
- Try and compile new Itsi with jemalloc on Linux
|
3
|
+
- ACME HTTP-01 challenge
|
4
|
+
- Add way to opt non Itsi.rb files into LSP
|
5
|
+
- Fat binary gems
|
6
|
+
- First class Rackless Websockets
|
4
7
|
|
5
8
|
Tasks:
|
6
|
-
- Add way to opt non Itsi.rb files into LSP
|
7
|
-
- Better parallelization a lá Iodine
|
8
9
|
- Static ruby build
|
9
10
|
- OTel
|
11
|
+
- Even faster Hash creation for Rack
|
10
12
|
- Image resizer
|
11
|
-
- First class Rackless Websockets
|
12
13
|
- Print out warning if we can detect that a location block will never be hit.
|
13
|
-
- Built in
|
14
|
+
- Built in obs Dashboard + Stats
|
14
15
|
- WASM pluggable middleware
|
15
16
|
- Support UDP Proxy
|
16
17
|
- Support Unix Socket Proxy
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: itsi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wouter Coppieters
|
@@ -15,28 +15,28 @@ dependencies:
|
|
15
15
|
requirements:
|
16
16
|
- - "~>"
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: 0.2.
|
18
|
+
version: 0.2.16
|
19
19
|
type: :runtime
|
20
20
|
prerelease: false
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
22
22
|
requirements:
|
23
23
|
- - "~>"
|
24
24
|
- !ruby/object:Gem::Version
|
25
|
-
version: 0.2.
|
25
|
+
version: 0.2.16
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: itsi-server
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
30
30
|
- - "~>"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 0.2.
|
32
|
+
version: 0.2.16
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: 0.2.
|
39
|
+
version: 0.2.16
|
40
40
|
description: Wrapper Gem for both the Itsi server and the Itsi Fiber scheduler
|
41
41
|
email:
|
42
42
|
- wc@pico.net.nz
|
@@ -171,6 +171,7 @@ files:
|
|
171
171
|
- crates/itsi_server/src/server/process_worker.rs
|
172
172
|
- crates/itsi_server/src/server/redirect_type.rs
|
173
173
|
- crates/itsi_server/src/server/request_job.rs
|
174
|
+
- crates/itsi_server/src/server/serve_strategy/acceptor.rs
|
174
175
|
- crates/itsi_server/src/server/serve_strategy/cluster_mode.rs
|
175
176
|
- crates/itsi_server/src/server/serve_strategy/mod.rs
|
176
177
|
- crates/itsi_server/src/server/serve_strategy/single_mode.rs
|
@@ -949,6 +950,8 @@ files:
|
|
949
950
|
- gems/server/lib/itsi/server/config/options/ruby_thread_request_backlog_size.rb
|
950
951
|
- gems/server/lib/itsi/server/config/options/scheduler_threads.md
|
951
952
|
- gems/server/lib/itsi/server/config/options/scheduler_threads.rb
|
953
|
+
- gems/server/lib/itsi/server/config/options/send_buffer_size.md
|
954
|
+
- gems/server/lib/itsi/server/config/options/send_buffer_size.rb
|
952
955
|
- gems/server/lib/itsi/server/config/options/shutdown_timeout.md
|
953
956
|
- gems/server/lib/itsi/server/config/options/shutdown_timeout.rb
|
954
957
|
- gems/server/lib/itsi/server/config/options/stream_body.md
|