itsi-server 0.2.14 → 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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +167 -218
  3. data/ext/itsi_scheduler/Cargo.toml +1 -1
  4. data/ext/itsi_server/Cargo.lock +1 -1
  5. data/ext/itsi_server/Cargo.toml +3 -2
  6. data/ext/itsi_server/extconf.rb +3 -1
  7. data/ext/itsi_server/src/lib.rs +1 -0
  8. data/ext/itsi_server/src/ruby_types/itsi_grpc_call.rs +2 -2
  9. data/ext/itsi_server/src/ruby_types/itsi_http_request.rs +9 -11
  10. data/ext/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +6 -1
  11. data/ext/itsi_server/src/server/binds/listener.rs +4 -1
  12. data/ext/itsi_server/src/server/http_message_types.rs +1 -1
  13. data/ext/itsi_server/src/server/middleware_stack/middlewares/error_response/default_responses.rs +32 -34
  14. data/ext/itsi_server/src/server/middleware_stack/middlewares/error_response.rs +3 -4
  15. data/ext/itsi_server/src/server/middleware_stack/middlewares/etag.rs +23 -38
  16. data/ext/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs +65 -14
  17. data/ext/itsi_server/src/server/middleware_stack/middlewares/max_body.rs +1 -1
  18. data/ext/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +1 -1
  19. data/ext/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs +21 -8
  20. data/ext/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +1 -5
  21. data/ext/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +8 -6
  22. data/ext/itsi_server/src/server/middleware_stack/middlewares/static_response.rs +12 -3
  23. data/ext/itsi_server/src/server/process_worker.rs +2 -1
  24. data/ext/itsi_server/src/server/serve_strategy/acceptor.rs +96 -0
  25. data/ext/itsi_server/src/server/serve_strategy/mod.rs +1 -0
  26. data/ext/itsi_server/src/server/serve_strategy/single_mode.rs +80 -136
  27. data/ext/itsi_server/src/server/thread_worker.rs +10 -3
  28. data/ext/itsi_server/src/services/itsi_http_service.rs +26 -21
  29. data/ext/itsi_server/src/services/mime_types.rs +2893 -1413
  30. data/ext/itsi_server/src/services/rate_limiter.rs +16 -34
  31. data/ext/itsi_server/src/services/static_file_server.rs +147 -121
  32. data/ext/itsi_tracing/Cargo.toml +1 -1
  33. data/lib/itsi/server/config/config_helpers.rb +1 -2
  34. data/lib/itsi/server/config/middleware/etag.md +3 -7
  35. data/lib/itsi/server/config/middleware/etag.rb +2 -4
  36. data/lib/itsi/server/config/options/listen_backlog.rb +1 -1
  37. data/lib/itsi/server/config/options/send_buffer_size.md +15 -0
  38. data/lib/itsi/server/config/options/send_buffer_size.rb +19 -0
  39. data/lib/itsi/server/config.rb +24 -25
  40. data/lib/itsi/server/route_tester.rb +1 -1
  41. data/lib/itsi/server/version.rb +1 -1
  42. metadata +21 -18
@@ -0,0 +1,19 @@
1
+ module Itsi
2
+ class Server
3
+ module Config
4
+ class SendBufferSize < Option
5
+
6
+ insert_text <<~SNIPPET
7
+ send_buffer_size ${1|262_144,1_048_576|}
8
+ SNIPPET
9
+
10
+ detail "Specifies the size of the send buffer for the socket. Larger buffer sizes can improve performance for high-throughput applications but may increase memory usage. The default value is 262,144 bytes."
11
+
12
+ schema do
13
+ (Type(Integer) & Range(1..Float::INFINITY) & Required()).default(262_144)
14
+ end
15
+
16
+ end
17
+ end
18
+ end
19
+ end
@@ -41,29 +41,28 @@ module Itsi
41
41
  DSL.evaluate(&builder_proc)
42
42
  elsif args[:static]
43
43
  DSL.evaluate do
44
- location "*" do
45
- rate_limit key: "address", store_config: "in_memory", requests: 2, seconds: 5
46
- etag type: "strong", algorithm: "md5", min_body_size: 1024 * 1024
47
- compress min_size: 1024 * 1024, level: "fastest", algorithms: %w[zstd gzip br deflate],
48
- mime_types: %w[all], compress_streams: true
49
- log_requests before: { level: "INFO", format: "[{request_id}] {method} {path_and_query} - {addr} " },
50
- after: { level: "INFO",
51
- format: "[{request_id}] └─ {status} in {response_time}" }
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
- }
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"]}, #{mw_args["handle_if_none_match"] ? "if_none_match" : ""})"
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Itsi
4
4
  class Server
5
- VERSION = "0.2.14"
5
+ VERSION = "0.2.16"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: itsi-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.14
4
+ version: 0.2.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wouter Coppieters
@@ -10,61 +10,61 @@ cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
- name: rack
13
+ name: json
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
- - - ">="
16
+ - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: '1.6'
18
+ version: '2'
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: '1.6'
25
+ version: '2'
26
26
  - !ruby/object:Gem::Dependency
27
- name: json
27
+ name: prism
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: '2'
32
+ version: '1.4'
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: '2'
39
+ version: '1.4'
40
40
  - !ruby/object:Gem::Dependency
41
- name: rb_sys
41
+ name: rack
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - "~>"
44
+ - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 0.9.91
46
+ version: '1.6'
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - "~>"
51
+ - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: 0.9.91
53
+ version: '1.6'
54
54
  - !ruby/object:Gem::Dependency
55
- name: prism
55
+ name: rb_sys
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '1.4'
60
+ version: 0.9.91
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '1.4'
67
+ version: 0.9.91
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: ruby-lsp
70
70
  requirement: !ruby/object:Gem::Requirement
@@ -233,6 +233,7 @@ files:
233
233
  - ext/itsi_server/src/server/process_worker.rs
234
234
  - ext/itsi_server/src/server/redirect_type.rs
235
235
  - ext/itsi_server/src/server/request_job.rs
236
+ - ext/itsi_server/src/server/serve_strategy/acceptor.rs
236
237
  - ext/itsi_server/src/server/serve_strategy/cluster_mode.rs
237
238
  - ext/itsi_server/src/server/serve_strategy/mod.rs
238
239
  - ext/itsi_server/src/server/serve_strategy/single_mode.rs
@@ -501,6 +502,8 @@ files:
501
502
  - lib/itsi/server/config/options/ruby_thread_request_backlog_size.rb
502
503
  - lib/itsi/server/config/options/scheduler_threads.md
503
504
  - lib/itsi/server/config/options/scheduler_threads.rb
505
+ - lib/itsi/server/config/options/send_buffer_size.md
506
+ - lib/itsi/server/config/options/send_buffer_size.rb
504
507
  - lib/itsi/server/config/options/shutdown_timeout.md
505
508
  - lib/itsi/server/config/options/shutdown_timeout.rb
506
509
  - lib/itsi/server/config/options/stream_body.md
@@ -536,7 +539,7 @@ files:
536
539
  - lib/shell_completions/completions.rb
537
540
  homepage: https://itsi.fyi
538
541
  licenses:
539
- - MIT
542
+ - LGPL-3.0
540
543
  metadata:
541
544
  homepage_uri: https://itsi.fyi
542
545
  source_code_uri: https://github.com/wouterken/itsi