itsi 0.1.20 → 0.2.3
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 +1 -8
- data/Cargo.lock +29 -30
- data/LICENSE.txt +698 -0
- data/README.md +16 -4
- data/Rakefile +9 -5
- data/crates/itsi_acme/.gitignore +4 -0
- data/crates/itsi_acme/Cargo.toml +86 -0
- data/crates/itsi_acme/LICENSE-APACHE +201 -0
- data/crates/itsi_acme/LICENSE-MIT +23 -0
- data/crates/itsi_acme/README.md +9 -0
- data/crates/itsi_acme/examples/high_level.rs +63 -0
- data/crates/itsi_acme/examples/high_level_warp.rs +52 -0
- data/crates/itsi_acme/examples/low_level.rs +87 -0
- data/crates/itsi_acme/examples/low_level_axum.rs +66 -0
- data/crates/itsi_acme/src/acceptor.rs +81 -0
- data/crates/itsi_acme/src/acme.rs +354 -0
- data/crates/itsi_acme/src/axum.rs +86 -0
- data/crates/itsi_acme/src/cache.rs +39 -0
- data/crates/itsi_acme/src/caches/boxed.rs +80 -0
- data/crates/itsi_acme/src/caches/composite.rs +69 -0
- data/crates/itsi_acme/src/caches/dir.rs +106 -0
- data/crates/itsi_acme/src/caches/mod.rs +11 -0
- data/crates/itsi_acme/src/caches/no.rs +78 -0
- data/crates/itsi_acme/src/caches/test.rs +136 -0
- data/crates/itsi_acme/src/config.rs +172 -0
- data/crates/itsi_acme/src/https_helper.rs +69 -0
- data/crates/itsi_acme/src/incoming.rs +142 -0
- data/crates/itsi_acme/src/jose.rs +161 -0
- data/crates/itsi_acme/src/lib.rs +142 -0
- data/crates/itsi_acme/src/resolver.rs +59 -0
- data/crates/itsi_acme/src/state.rs +424 -0
- data/crates/itsi_rb_helpers/src/lib.rs +4 -3
- data/crates/itsi_scheduler/Cargo.toml +1 -1
- data/crates/itsi_scheduler/src/itsi_scheduler.rs +8 -2
- data/crates/itsi_scheduler/src/lib.rs +1 -0
- data/crates/itsi_server/Cargo.toml +1 -1
- data/crates/itsi_server/src/lib.rs +2 -1
- data/crates/itsi_server/src/ruby_types/itsi_http_request.rs +18 -1
- data/crates/itsi_server/src/ruby_types/itsi_server/file_watcher.rs +11 -3
- data/crates/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +148 -66
- data/crates/itsi_server/src/ruby_types/itsi_server.rs +2 -0
- data/crates/itsi_server/src/server/binds/bind.rs +3 -0
- data/crates/itsi_server/src/server/binds/listener.rs +12 -5
- data/crates/itsi_server/src/server/binds/tls.rs +13 -5
- data/crates/itsi_server/src/server/middleware_stack/middlewares/allow_list.rs +12 -5
- data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_api_key.rs +8 -1
- data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_basic.rs +9 -1
- data/crates/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs +48 -43
- data/crates/itsi_server/src/server/middleware_stack/middlewares/cache_control.rs +11 -2
- data/crates/itsi_server/src/server/middleware_stack/middlewares/compression.rs +39 -12
- data/crates/itsi_server/src/server/middleware_stack/middlewares/cors.rs +36 -27
- data/crates/itsi_server/src/server/middleware_stack/middlewares/csp.rs +25 -11
- data/crates/itsi_server/src/server/middleware_stack/middlewares/deny_list.rs +12 -3
- data/crates/itsi_server/src/server/middleware_stack/middlewares/error_response/default_responses.rs +74 -72
- data/crates/itsi_server/src/server/middleware_stack/middlewares/error_response.rs +15 -1
- data/crates/itsi_server/src/server/middleware_stack/middlewares/etag.rs +11 -8
- data/crates/itsi_server/src/server/middleware_stack/middlewares/intrusion_protection.rs +19 -11
- data/crates/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs +5 -5
- data/crates/itsi_server/src/server/middleware_stack/middlewares/max_body.rs +2 -2
- data/crates/itsi_server/src/server/middleware_stack/middlewares/mod.rs +11 -5
- data/crates/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +17 -20
- data/crates/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs +19 -8
- data/crates/itsi_server/src/server/middleware_stack/middlewares/redirect.rs +16 -37
- data/crates/itsi_server/src/server/middleware_stack/middlewares/request_headers.rs +22 -12
- data/crates/itsi_server/src/server/middleware_stack/middlewares/response_headers.rs +26 -11
- data/crates/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +7 -1
- data/crates/itsi_server/src/server/middleware_stack/middlewares/string_rewrite.rs +14 -4
- data/crates/itsi_server/src/server/middleware_stack/middlewares/token_source.rs +19 -0
- data/crates/itsi_server/src/server/middleware_stack/mod.rs +49 -13
- data/crates/itsi_server/src/server/mod.rs +1 -0
- data/crates/itsi_server/src/server/redirect_type.rs +26 -0
- data/crates/itsi_server/src/server/serve_strategy/cluster_mode.rs +22 -16
- data/crates/itsi_server/src/server/serve_strategy/single_mode.rs +49 -12
- data/crates/itsi_server/src/server/signal.rs +1 -0
- data/crates/itsi_server/src/server/size_limited_incoming.rs +6 -0
- data/crates/itsi_server/src/server/thread_worker.rs +5 -1
- data/crates/itsi_server/src/services/itsi_http_service.rs +20 -2
- data/crates/itsi_server/src/services/rate_limiter.rs +15 -4
- data/crates/itsi_server/src/services/static_file_server.rs +33 -19
- data/crates/itsi_tracing/src/lib.rs +42 -22
- data/docs/content/_index.md +2 -3
- data/docs/content/acknowledgements/_index.md +5 -2
- data/docs/content/configuration/_index.md +8 -5
- data/docs/content/contact/_index.md +8 -1
- data/docs/content/directory_listing.jpg +0 -0
- data/docs/content/error_page.jpg +0 -0
- data/docs/content/faqs/_index.md +5 -3
- data/docs/content/features/_index.md +56 -50
- data/docs/content/getting_started/_index.md +8 -5
- data/docs/content/getting_started/local_development.md +76 -9
- data/docs/content/getting_started/logging.md +15 -9
- data/docs/content/getting_started/running_itsi_in_production.md +5 -3
- data/docs/content/getting_started/signals.md +37 -0
- data/docs/content/itsi_scheduler/_index.md +8 -7
- data/docs/content/utilities/_index.md +13 -0
- data/docs/content/utilities/config_file_testing.md +17 -0
- data/docs/content/utilities/passfile_generator.md +41 -0
- data/docs/content/utilities/route_testing.md +27 -0
- data/docs/content/utilities/secrets_management.md +30 -0
- data/docs/hugo.yaml +4 -1
- data/fairytale.txt +3 -4
- data/gems/scheduler/Cargo.lock +74 -17
- data/gems/scheduler/README.md +4 -5
- data/gems/scheduler/Rakefile +0 -4
- data/gems/scheduler/itsi-scheduler.gemspec +2 -2
- data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
- data/gems/scheduler/lib/itsi/scheduler.rb +9 -4
- data/gems/scheduler/test/test_active_record.rb +12 -7
- data/gems/server/Cargo.lock +28 -29
- data/gems/server/Rakefile +0 -4
- data/gems/server/exe/itsi +13 -2
- data/gems/server/itsi-server.gemspec +2 -2
- data/gems/server/lib/itsi/http_request/response_status_shortcodes.rb +2 -0
- data/gems/server/lib/itsi/http_request.rb +58 -30
- data/gems/server/lib/itsi/http_response.rb +10 -7
- data/gems/server/lib/itsi/passfile.rb +6 -7
- data/gems/server/lib/itsi/server/config/config_helpers.rb +41 -29
- data/gems/server/lib/itsi/server/config/dsl.rb +22 -442
- data/gems/server/lib/itsi/server/config/known_paths.rb +14 -7
- data/gems/server/lib/itsi/server/config/middleware/_index.md +6 -4
- data/gems/server/lib/itsi/server/config/middleware/allow_list.md +46 -0
- data/gems/server/lib/itsi/server/config/middleware/allow_list.rb +42 -0
- data/gems/server/lib/itsi/server/config/middleware/auth_api_key.md +90 -0
- data/gems/server/lib/itsi/server/config/middleware/auth_api_key.rb +51 -0
- data/gems/server/lib/itsi/server/config/middleware/auth_basic.md +45 -0
- data/gems/server/lib/itsi/server/config/middleware/auth_basic.rb +44 -0
- data/gems/server/lib/itsi/server/config/middleware/auth_jwt.md +82 -0
- data/gems/server/lib/itsi/server/config/middleware/auth_jwt.rb +38 -0
- data/gems/server/lib/itsi/server/config/middleware/cache_control.md +78 -0
- data/gems/server/lib/itsi/server/config/middleware/cache_control.rb +45 -0
- data/gems/server/lib/itsi/server/config/middleware/cidr_to_regex.rb +50 -0
- data/gems/server/lib/itsi/server/config/middleware/compression.md +50 -0
- data/gems/server/lib/itsi/server/config/middleware/compression.rb +37 -0
- data/gems/server/lib/itsi/server/config/middleware/cors.md +93 -0
- data/gems/server/lib/itsi/server/config/middleware/cors.rb +32 -0
- data/gems/server/lib/itsi/server/config/middleware/csp.md +37 -0
- data/gems/server/lib/itsi/server/config/middleware/csp.rb +44 -0
- data/gems/server/lib/itsi/server/config/middleware/deny_list.md +45 -0
- data/gems/server/lib/itsi/server/config/middleware/deny_list.rb +42 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/_index.md +159 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/controller.md +186 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/controller.rb +33 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/delete.md +12 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/delete.rb +42 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/endpoint.rb +99 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/get.md +12 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/get.rb +42 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/http_request.md +44 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/http_response.md +39 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/patch.md +12 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/patch.rb +42 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/post.md +12 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/post.rb +42 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/put.md +12 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/put.rb +42 -0
- data/gems/server/lib/itsi/server/config/middleware/endpoint/schemas.md +122 -0
- data/gems/server/lib/itsi/server/config/middleware/error_response.md +74 -0
- data/gems/server/lib/itsi/server/config/middleware/error_response.rb +36 -0
- data/gems/server/lib/itsi/server/config/middleware/etag.md +59 -0
- data/gems/server/lib/itsi/server/config/middleware/etag.rb +27 -0
- data/gems/server/lib/itsi/server/config/middleware/grpc.md +172 -0
- data/gems/server/lib/itsi/server/config/middleware/grpc.rb +54 -0
- data/gems/server/lib/itsi/server/config/middleware/intrusion_protection.md +124 -0
- data/gems/server/lib/itsi/server/config/middleware/intrusion_protection.rb +61 -0
- data/gems/server/lib/itsi/server/config/middleware/location.md +107 -0
- data/gems/server/lib/itsi/server/config/middleware/location.rb +99 -0
- data/gems/server/lib/itsi/server/config/middleware/log_requests.md +13 -11
- data/gems/server/lib/itsi/server/config/middleware/log_requests.rb +1 -3
- data/gems/server/lib/itsi/server/config/middleware/max_body.md +18 -0
- data/gems/server/lib/itsi/server/config/middleware/max_body.rb +21 -0
- data/gems/server/lib/itsi/server/config/middleware/proxy.md +62 -0
- data/gems/server/lib/itsi/server/config/middleware/proxy.rb +41 -0
- data/gems/server/lib/itsi/server/config/middleware/rackup_file.md +54 -0
- data/gems/server/lib/itsi/server/config/middleware/rackup_file.rb +44 -0
- data/gems/server/lib/itsi/server/config/middleware/rate_limit.md +126 -0
- data/gems/server/lib/itsi/server/config/middleware/rate_limit.rb +34 -0
- data/gems/server/lib/itsi/server/config/middleware/rate_limit_store.rb +25 -0
- data/gems/server/lib/itsi/server/config/middleware/redirect.md +55 -0
- data/gems/server/lib/itsi/server/config/middleware/redirect.rb +25 -0
- data/gems/server/lib/itsi/server/config/middleware/request_headers.md +34 -0
- data/gems/server/lib/itsi/server/config/middleware/request_headers.rb +24 -0
- data/gems/server/lib/itsi/server/config/middleware/response_headers.md +33 -0
- data/gems/server/lib/itsi/server/config/middleware/response_headers.rb +25 -0
- data/gems/server/lib/itsi/server/config/middleware/run.md +60 -0
- data/gems/server/lib/itsi/server/config/middleware/run.rb +43 -0
- data/gems/server/lib/itsi/server/config/middleware/static_assets.md +113 -0
- data/gems/server/lib/itsi/server/config/middleware/static_assets.rb +87 -0
- data/gems/server/lib/itsi/server/config/middleware/static_response.md +44 -0
- data/gems/server/lib/itsi/server/config/middleware/static_response.rb +29 -0
- data/gems/server/lib/itsi/server/config/middleware/string_rewrite.md +67 -0
- data/gems/server/lib/itsi/server/config/middleware/token_source.rb +32 -0
- data/gems/server/lib/itsi/server/config/middleware.rb +4 -0
- data/gems/server/lib/itsi/server/config/option.rb +4 -0
- data/gems/server/lib/itsi/server/config/options/_index.md +3 -2
- data/gems/server/lib/itsi/server/config/options/auto_reload_config.md +13 -0
- data/gems/server/lib/itsi/server/config/options/auto_reload_config.rb +41 -0
- data/gems/server/lib/itsi/server/config/options/bind.md +71 -0
- data/gems/server/lib/itsi/server/config/options/bind.rb +26 -0
- data/gems/server/lib/itsi/server/config/options/certificates.md +65 -0
- data/gems/server/lib/itsi/server/config/options/daemonize.md +14 -0
- data/gems/server/lib/itsi/server/config/options/daemonize.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/fiber_scheduler.md +1 -2
- data/gems/server/lib/itsi/server/config/options/fiber_scheduler.rb +6 -3
- data/gems/server/lib/itsi/server/config/options/header_read_timeout.md +17 -0
- data/gems/server/lib/itsi/server/config/options/header_read_timeout.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/hooks/_index.md +11 -0
- data/gems/server/lib/itsi/server/config/options/hooks/after_fork.md +13 -0
- data/gems/server/lib/itsi/server/config/options/hooks/after_fork.rb +28 -0
- data/gems/server/lib/itsi/server/config/options/hooks/after_memory_limit_reached.md +14 -0
- data/gems/server/lib/itsi/server/config/options/hooks/after_memory_limit_reached.rb +28 -0
- data/gems/server/lib/itsi/server/config/options/hooks/after_start.md +12 -0
- data/gems/server/lib/itsi/server/config/options/hooks/after_start.rb +28 -0
- data/gems/server/lib/itsi/server/config/options/hooks/before_fork.md +13 -0
- data/gems/server/lib/itsi/server/config/options/hooks/before_fork.rb +28 -0
- data/gems/server/lib/itsi/server/config/options/hooks/before_restart.md +12 -0
- data/gems/server/lib/itsi/server/config/options/hooks/before_restart.rb +28 -0
- data/gems/server/lib/itsi/server/config/options/hooks/before_shutdown.md +12 -0
- data/gems/server/lib/itsi/server/config/options/hooks/before_shutdown.rb +28 -0
- data/gems/server/lib/itsi/server/config/options/include.md +20 -0
- data/gems/server/lib/itsi/server/config/options/include.rb +36 -0
- data/gems/server/lib/itsi/server/config/options/listen_backlog.md +11 -0
- data/gems/server/lib/itsi/server/config/options/listen_backlog.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/log_format.md +18 -0
- data/gems/server/lib/itsi/server/config/options/log_format.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/log_level.md +34 -0
- data/gems/server/lib/itsi/server/config/options/log_level.rb +20 -0
- data/gems/server/lib/itsi/server/config/options/log_target.md +38 -0
- data/gems/server/lib/itsi/server/config/options/log_target.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/log_target_filters.md +17 -0
- data/gems/server/lib/itsi/server/config/options/log_target_filters.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/multithreaded_reactor.md +27 -0
- data/gems/server/lib/itsi/server/config/options/multithreaded_reactor.rb +24 -0
- data/gems/server/lib/itsi/server/config/options/nodelay.md +16 -0
- data/gems/server/lib/itsi/server/config/options/nodelay.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/oob_gc_responses_threshold.md +19 -0
- data/gems/server/lib/itsi/server/config/options/oob_gc_responses_threshold.rb +18 -0
- data/gems/server/lib/itsi/server/config/options/pin_worker_cores.md +17 -0
- data/gems/server/lib/itsi/server/config/options/pin_worker_cores.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/preload.md +21 -0
- data/gems/server/lib/itsi/server/config/options/preload.rb +18 -0
- data/gems/server/lib/itsi/server/config/options/recv_buffer_size.md +15 -0
- data/gems/server/lib/itsi/server/config/options/recv_buffer_size.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/redirect_http_to_https.md +21 -0
- data/gems/server/lib/itsi/server/config/options/redirect_http_to_https.rb +30 -0
- data/gems/server/lib/itsi/server/config/options/request_timeout.md +23 -0
- data/gems/server/lib/itsi/server/config/options/request_timeout.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/reuse_address.md +16 -0
- data/gems/server/lib/itsi/server/config/options/reuse_address.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/reuse_port.md +16 -0
- data/gems/server/lib/itsi/server/config/options/reuse_port.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/scheduler_threads.md +34 -0
- data/gems/server/lib/itsi/server/config/options/scheduler_threads.rb +17 -0
- data/gems/server/lib/itsi/server/config/options/shutdown_timeout.md +17 -0
- data/gems/server/lib/itsi/server/config/options/shutdown_timeout.rb +19 -0
- data/gems/server/lib/itsi/server/config/options/stream_body.md +32 -0
- data/gems/server/lib/itsi/server/config/options/stream_body.rb +18 -0
- data/gems/server/lib/itsi/server/config/options/threads.md +7 -2
- data/gems/server/lib/itsi/server/config/options/threads.rb +1 -1
- data/gems/server/lib/itsi/server/config/options/watch.md +16 -0
- data/gems/server/lib/itsi/server/config/options/watch.rb +28 -0
- data/gems/server/lib/itsi/server/config/options/worker_memory_limit.md +22 -0
- data/gems/server/lib/itsi/server/config/options/worker_memory_limit.rb +18 -0
- data/gems/server/lib/itsi/server/config/options/workers.md +1 -2
- data/gems/server/lib/itsi/server/config/options/workers.rb +1 -1
- data/gems/server/lib/itsi/server/config/typed_struct.rb +68 -32
- data/gems/server/lib/itsi/server/config.rb +163 -119
- data/gems/server/lib/itsi/server/default_app/default_app.rb +1 -1
- data/gems/server/lib/itsi/server/default_config/Itsi.rb +3 -3
- data/gems/server/lib/itsi/server/grpc/grpc_call.rb +4 -5
- data/gems/server/lib/itsi/server/grpc/grpc_interface.rb +10 -4
- data/gems/server/lib/itsi/server/rack/handler/itsi.rb +2 -3
- data/gems/server/lib/itsi/server/rack_interface.rb +0 -1
- data/gems/server/lib/itsi/server/route_tester.rb +61 -9
- data/gems/server/lib/itsi/server/signal_trap.rb +1 -1
- data/gems/server/lib/itsi/server/typed_handlers/param_parser.rb +14 -18
- data/gems/server/lib/itsi/server/typed_handlers/source_parser.rb +13 -10
- data/gems/server/lib/itsi/server/typed_handlers.rb +12 -4
- data/gems/server/lib/itsi/server/version.rb +1 -1
- data/gems/server/lib/itsi/server.rb +111 -27
- data/gems/server/lib/itsi/standard_headers.rb +80 -80
- data/gems/server/lib/ruby_lsp/itsi/addon.rb +20 -18
- data/gems/server/test/helpers/test_helper.rb +90 -29
- data/gems/server/test/middleware/allow_list.rb +128 -0
- data/gems/server/test/middleware/auth_api_key.rb +141 -0
- data/gems/server/test/middleware/auth_basic.rb +91 -0
- data/gems/server/test/middleware/auth_jwt.rb +214 -0
- data/gems/server/test/middleware/cache_control.rb +82 -0
- data/gems/server/test/middleware/cidr_to_regex.rb +46 -0
- data/gems/server/test/middleware/compression.rb +89 -0
- data/gems/server/test/middleware/cors.rb +113 -0
- data/gems/server/test/middleware/csp.rb +62 -0
- data/gems/server/test/middleware/deny_list.rb +131 -0
- data/gems/server/test/middleware/endpoint.rb +300 -0
- data/gems/server/test/middleware/etag.rb +75 -0
- data/gems/server/test/middleware/grpc/grpc.rb +158 -0
- data/gems/server/test/middleware/grpc/test_service.proto +32 -0
- data/gems/server/test/middleware/grpc/test_service_impl.rb +28 -0
- data/gems/server/test/middleware/grpc/test_service_pb.rb +18 -0
- data/gems/server/test/middleware/grpc/test_service_services_pb.rb +30 -0
- data/gems/server/test/middleware/header_interpolation.rb +35 -0
- data/gems/server/test/middleware/intrusion_protection.rb +259 -0
- data/gems/server/test/middleware/location.rb +220 -0
- data/gems/server/test/middleware/max_body.rb +20 -0
- data/gems/server/test/middleware/proxy.rb +415 -0
- data/gems/server/test/middleware/rate_limit.rb +211 -0
- data/gems/server/test/middleware/redirect.rb +85 -0
- data/gems/server/test/middleware/request_headers.rb +50 -0
- data/gems/server/test/middleware/response_headers.rb +50 -0
- data/gems/server/test/middleware/static_assets.rb +374 -0
- data/gems/server/test/middleware/static_response.rb +56 -0
- data/gems/server/test/middleware/string_rewrite.rb +112 -0
- data/gems/server/test/middleware/test_log_requests.rb +54 -2
- data/gems/server/test/options/bind.rb +47 -0
- data/gems/server/test/options/header_read_timeout.rb +23 -0
- data/gems/server/test/options/test_request_timeout.rb +16 -0
- data/gems/server/test/options/test_workers.rb +11 -6
- data/gems/server/test/{test_itsi_server.rb → rack/test_rack_server.rb} +2 -2
- data/lib/itsi/version.rb +1 -1
- data/tasks.txt +15 -72
- metadata +209 -10
- data/examples/static_assets_example.rb +0 -83
- data/gems/server/lib/itsi/server/default_config/Itsi-rackup.rb +0 -119
@@ -2,6 +2,8 @@
|
|
2
2
|
title: Getting Started
|
3
3
|
type: docs
|
4
4
|
weight: 2
|
5
|
+
prev: features/
|
6
|
+
next: getting_started/local_development/
|
5
7
|
---
|
6
8
|
|
7
9
|
{{% steps %}}
|
@@ -49,7 +51,7 @@ Install Ruby
|
|
49
51
|
{{< /callout >}}
|
50
52
|
|
51
53
|
{{< /tab >}}
|
52
|
-
{{< tab >}}**Windows**: Itsi currently doesn't support native Windows builds, but it runs
|
54
|
+
{{< tab >}}**Windows**: Itsi currently doesn't support native Windows builds, but it runs well on [https://learn.microsoft.com/en-us/windows/wsl/install](WSL).
|
53
55
|
|
54
56
|
Follow the linked instructions to Install a linux distribution like Ubuntu or Debian and then follow the instructions in the Linux tab.
|
55
57
|
{{< /tab >}}
|
@@ -60,11 +62,12 @@ Install Ruby
|
|
60
62
|
|
61
63
|
Great! You now have Itsi installed. Go to one of the following pages to learn how to use it:
|
62
64
|
|
65
|
+
|
63
66
|
{{< cards >}}
|
64
|
-
{{< card link="
|
65
|
-
{{< card link="../
|
66
|
-
{{< card link="../
|
67
|
-
{{< card link="
|
67
|
+
{{< card link="./local_development" title="Local Development" icon="star" >}}
|
68
|
+
{{< card link="../options" title="Options" icon="adjustments" >}}
|
69
|
+
{{< card link="../middleware" title="Middleware" icon="cog" >}}
|
70
|
+
{{< card link="https://github.com/wouterken/itsi" title="Source Code" icon="github" >}}
|
68
71
|
{{< /cards >}}
|
69
72
|
|
70
73
|
{{% /steps %}}
|
@@ -1,26 +1,25 @@
|
|
1
1
|
---
|
2
2
|
title: Local Development
|
3
3
|
type: docs
|
4
|
+
prev: getting_started
|
4
5
|
weight: 3
|
5
6
|
---
|
6
7
|
|
7
8
|
{{< callout>}}
|
8
|
-
|
9
|
-
|
10
|
-
local development experience!
|
11
|
-
{{< /callout >}}
|
9
|
+
This document is not required reading, but it can significantly improve your local development experience with Itsi.
|
10
|
+
{{< /callout >}}
|
12
11
|
|
13
12
|
## Ruby LSP Add-on
|
14
13
|
Itsi's [RubyLSP](https://shopify.github.io/ruby-lsp/) add-on allows you to see the full documentation of all of Itsi's [`options`](/options) and [`middleware`](/middleware) directly
|
15
|
-
inside your editor. It also gives you easy
|
14
|
+
inside your editor. It also gives you easy-to-use auto-completion and snippets for lightning fast changes to `Itsi.rb` configuration files.
|
16
15
|
You don't need to install the RubyLSP add-on to use Itsi, if both Itsi and RubyLSP are installed and activated in the same project, RubyLSP will automatically
|
17
16
|
discover and load the addon.
|
18
17
|
|
19
|
-
<img src="/ruby-lsp.png" alt="
|
18
|
+
<img src="/ruby-lsp.png" alt="image itsi" width="700px" style="display: block; margin-left: auto; margin-right: auto;">
|
20
19
|
|
21
20
|
## Live Config Reloading
|
22
|
-
|
23
|
-
Concerned about errors? Itsi will validate your config first before it tries to apply it. If there are errors, Itsi will provide
|
21
|
+
Add `auto_reload_config!` to your `Itsi.rb` configuration file and Itsi will automatically hot reload its config with every change you make.
|
22
|
+
Concerned about errors? Itsi will validate your config first before it tries to apply it. If there are errors, Itsi will provide detailed logs and safely continue with the existing config.
|
24
23
|
|
25
24
|
### File Watcher
|
26
25
|
You can have Itsi watch other files on the file-system and trigger automatic actions in response.
|
@@ -31,10 +30,78 @@ watch "**.js", [%w[npm run build]]
|
|
31
30
|
watch "**.md", [%w[rake docs:build]]
|
32
31
|
```
|
33
32
|
|
33
|
+
## Print Routes
|
34
|
+
Itsi comes with a built-in command to see all the routes that are configured in your application. To use it, simply run the following command:
|
35
|
+
```bash
|
36
|
+
itsi routes
|
37
|
+
```
|
38
|
+
|
39
|
+
E.g.
|
40
|
+
```bash
|
41
|
+
────────────────────────────────────────────────────────────────────────────
|
42
|
+
Route: /app/users/(?<id>[^/]+
|
43
|
+
Conditions: (none)
|
44
|
+
Middleware: • log_requests(before: I am th..., after: [{reque...)
|
45
|
+
• compress
|
46
|
+
• cors(*, GET POST PUT DELETE)
|
47
|
+
• app /Users/pico/Development/itsi/gems/server/lib/itsi/server/typed_handlers.rb:9
|
48
|
+
────────────────────────────────────────────────────────────────────────────
|
49
|
+
Route: /app/users/?
|
50
|
+
Conditions: (none)
|
51
|
+
Middleware: • log_requests(before: I am th..., after: [{reque...)
|
52
|
+
• compress
|
53
|
+
• cors(*, GET POST PUT DELETE)
|
54
|
+
• app /Users/pico/Development/itsi/gems/server/lib/itsi/server/rack_interface.rb:15
|
55
|
+
|
56
|
+
```
|
57
|
+
## Test Config
|
58
|
+
Itsi allows you to validate your configuration without having to run the application.
|
59
|
+
|
60
|
+
```bash
|
61
|
+
itsi test
|
62
|
+
```
|
63
|
+
|
64
|
+
You can optionally provide an explicit config file path using
|
65
|
+
```bash
|
66
|
+
itsi test -C /path/to/Itsi.rb
|
67
|
+
```
|
68
|
+
|
69
|
+
Itsi will print informative error message if config validation fails. E.g.
|
70
|
+
```bash
|
71
|
+
─ algorithms: ─ `Enum` validation failed. Invalid ["zstd", "gzip", "deflate", "br"] value: "brotli"
|
72
|
+
--> /Users/pico/Development/itsi/sandbox/itsi_file/Itsi.rb:2
|
73
|
+
1 | location '/br' do
|
74
|
+
2 | compress algorithms: ['brotli'], min_size: 0, compress_streams: true, mime_types: ['all'], level: 'fastest'
|
75
|
+
| ^^^
|
76
|
+
```
|
77
|
+
|
34
78
|
## Shell Completions
|
35
79
|
Itsi can also help you install shell completions, which are useful if you find yourself using the `itsi` executable a lot and forgetting the commands.
|
36
|
-
|
80
|
+
Add the following line to the bottom of your ~/.bashrc or ~/.zshrc file:
|
37
81
|
|
38
82
|
```bash
|
39
83
|
eval "$(itsi --install-completions)"
|
40
84
|
```
|
85
|
+
|
86
|
+
## macOS Fork Safety Considerations
|
87
|
+
|
88
|
+
On macOS, using fork() in multithreaded applications can lead to crashes due to the Objective-C runtime’s behavior. This is particularly relevant when working with tools like Itsi that may utilize fork() under the hood.
|
89
|
+
|
90
|
+
### Understanding the Issue
|
91
|
+
|
92
|
+
Apple’s Objective-C runtime is not fork-safe in multithreaded environments. When a process that uses Objective-C APIs forks, the child process may crash if it interacts with the Objective-C runtime before calling exec(). This behavior is by design to prevent potential deadlocks and inconsistent states.  
|
93
|
+
|
94
|
+
Common symptoms include errors like:
|
95
|
+
```
|
96
|
+
objc[51435]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called.
|
97
|
+
We cannot safely call it or ignore it in the fork() child process. Crashing instead.
|
98
|
+
```
|
99
|
+
|
100
|
+
### Workarounds:
|
101
|
+
To mitigate these issues, consider the following environment variables:
|
102
|
+
* `OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES`: Disables the Objective-C runtime’s fork safety checks. Use with caution, as it may mask underlying issues .  
|
103
|
+
* `PGGSSENCMODE=disable`: Disables GSSAPI encryption in PostgreSQL, which can cause issues in forked processes .
|
104
|
+
|
105
|
+
Itsi includes a mechanism to automatically re-execute itself with the necessary environment variables set when running on macOS, effectively performing the above workarounds for you.
|
106
|
+
|
107
|
+
If you prefer to manage these settings yourself, you can disable this behavior by setting the `ITSI_DISABLE_AUTO_DISABLE_DARWIN_FORK_SAFETY_WARNINGS` environment variable:
|
@@ -2,15 +2,21 @@
|
|
2
2
|
title: Logging
|
3
3
|
type: docs
|
4
4
|
weight: 4
|
5
|
+
next: /signals
|
5
6
|
---
|
6
7
|
|
7
|
-
|
8
|
-
* Having trouble configuring a specific middleware layer, but debug logs are too verbose? You can change the log-level for a specific middleware layer,
|
9
|
-
while leaving all other layers at the current global level.
|
10
|
-
E.g.
|
8
|
+
Itsi has a very configurable logging system. You can configure logging use the `Itsi.rb` configuration file, environment variables or a combination of both.
|
11
9
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
10
|
+
## Basics
|
11
|
+
For basic logging needs, set a global log-level using the `ITSI_LOG` environment variable (to one of `trace`, `debug`, `info`, `warn`, `error`)
|
12
|
+
|
13
|
+
## Fine-grained control
|
14
|
+
Itsi supports fine-grained config-based control of logging behavior, which can be changed at runtime **without downtime**. To utilize these functions, read the documentation for the following options and middleware:
|
15
|
+
|
16
|
+
### Options
|
17
|
+
* [`log_level`](/options/log_level)
|
18
|
+
* [`log_target`](/options/log_target)
|
19
|
+
* [`log_format`](/options/log_format)
|
20
|
+
* [`log_target_filters`](/options/log_target_filters)
|
21
|
+
### Middleware
|
22
|
+
* [`log_requests`](/options/log_requests)
|
@@ -2,7 +2,7 @@
|
|
2
2
|
title: Running Itsi in Production
|
3
3
|
type: docs
|
4
4
|
weight: 3
|
5
|
-
next: /
|
5
|
+
next: /getting_started/logging
|
6
6
|
---
|
7
7
|
|
8
8
|
## Docker
|
@@ -12,13 +12,15 @@ You can try Itsi in a Docker container using the official Itsi Docker image
|
|
12
12
|
docker run -it --rm wouterken/itsi:latest
|
13
13
|
```
|
14
14
|
|
15
|
-
See the source of this Dockerfile inside the [Github repository](https://github.com/wouterken/itsi/blob/main/Dockerfile).
|
15
|
+
See the source of this Dockerfile inside the [Github repository](https://github.com/wouterken/itsi/blob/main/docker/Dockerfile).
|
16
16
|
|
17
17
|
## Signal Handling
|
18
18
|
Itsi supports common signals such as SIGINT and SIGTERM for graceful termination by deployment scripts or container orchestration systems like
|
19
19
|
K8s and Docker swarm.
|
20
20
|
|
21
21
|
{{< callout type="warn" >}}
|
22
|
-
If you're planning to use Itsi for a high
|
22
|
+
If you're planning to use Itsi for a high-throughput application in K8s, read [this article](https://github.com/puma/puma/blob/master/docs/kubernetes.md) about running
|
23
23
|
Puma in Kubernetes. The same advice applies to Itsi.
|
24
24
|
{{< /callout >}}
|
25
|
+
|
26
|
+
See [Signal Handling](/getting_started/signals) for more details on Itsi's signal handling.
|
@@ -0,0 +1,37 @@
|
|
1
|
+
---
|
2
|
+
title: Signals
|
3
|
+
type: docs
|
4
|
+
weight: 5
|
5
|
+
next: /configuration
|
6
|
+
|
7
|
+
---
|
8
|
+
|
9
|
+
Itsi responds to several Unix signals for process control. These signals are used to gracefully shut down, reload configuration, adjust worker pools, or emit internal lifecycle events.
|
10
|
+
|
11
|
+
---
|
12
|
+
|
13
|
+
## Signal Types
|
14
|
+
|
15
|
+
| Signal | Behavior |
|
16
|
+
|------------|--------------------------------------------------------------------------|
|
17
|
+
| `SIGINT` | Triggers a graceful shutdown. If received twice in quick succession, triggers a forceful shutdown. |
|
18
|
+
| `SIGTERM` | Triggers a graceful shutdown. |
|
19
|
+
| `SIGUSR1` | Triggers a hot restart (Sockets remain open, while configuration is reloaded). |
|
20
|
+
| `SIGUSR2` | Triggers a diagnostic info dump. Causes all child processes to print detailed diagnostic information. |
|
21
|
+
| `SIGHUP` | Triggers a reload of configuration. If using preloading mode, this is equivalent to a restart. Otherwise this will cause a phased restart. |
|
22
|
+
| `SIGTTIN` | Increases the number of worker processes. |
|
23
|
+
| `SIGTTOU` | Decreases the number of worker processes. |
|
24
|
+
|
25
|
+
---
|
26
|
+
|
27
|
+
## CLI Convenience Commands
|
28
|
+
|
29
|
+
In addition to sending the above signals through native controls, you can also use the `itsi` executable as a convenient shortcut for sending signals.
|
30
|
+
These will work so long as the command is run inside the same directory from which Itsi was started (as this is the directory within which the `pid` file is located).
|
31
|
+
|
32
|
+
- `itsi stop`: Sends `SIGINT` to initiate a graceful shutdown.
|
33
|
+
- `itsi restart`: Sends `SIGHUP` to trigger a reload of configuration.
|
34
|
+
- `itsi reload`: Sends `SIGUSR1` to trigger a hot restart.
|
35
|
+
- `itsi status`: Sends `SIGUSR2` to trigger a diagnostic info dump.
|
36
|
+
- `itsi add_worker`: Sends `SIGTTIN` to increase the number of worker processes.
|
37
|
+
- `itsi remove_worker`: Sends `SIGTTOU` to decrease the number of worker processes.
|
@@ -4,18 +4,19 @@ type: docs
|
|
4
4
|
weight: 4
|
5
5
|
sidebar:
|
6
6
|
exclude: true
|
7
|
+
prev: utilities/
|
8
|
+
next: acknowledgements/
|
7
9
|
---
|
8
10
|
<img src="itsi-scheduler-100.png" width="80px" style="display: block; margin-left: auto; margin-right: auto;">
|
9
11
|
|
10
12
|
`Itsi Scheduler` is an implementation of a Ruby [Fiber Scheduler](https://docs.ruby-lang.org/en/3.2/Fiber/Scheduler.html).
|
11
13
|
|
12
|
-
When combined with Itsi Server, you can write endpoints that look
|
13
|
-
but behind the scenes, the scheduler will transparently yield and resume concurrent request fibers, to prevent threads from blocking and greatly increase throughput for IO heavy workloads.
|
14
|
+
When combined with Itsi Server, you can write endpoints that look just like regular synchronous Ruby code. Behind the scenes, the scheduler will transparently pause and resume fibers to prevent threads from blocking, greatly increasing throughput for I/O-heavy workloads
|
14
15
|
|
15
|
-
If you're purely after a
|
16
|
+
If you're purely after a lightweight, yet efficient Ruby scheduler,
|
16
17
|
you can use Itsi Scheduler as a standalone scheduler for any Ruby application.
|
17
18
|
|
18
|
-
Just use `Fiber.set_scheduler` to set an instance `Itsi::Scheduler` as a scheduler to opt in to this IO weaving
|
19
|
+
Just use `Fiber.set_scheduler` to set an instance `Itsi::Scheduler` as a scheduler to opt in to this IO weaving behavior
|
19
20
|
*automatically* for all blocking IO.
|
20
21
|
|
21
22
|
### Primer on Fiber Schedulers
|
@@ -26,7 +27,7 @@ Ruby's Fiber scheduler implementation automatically invokes the current Fiber sc
|
|
26
27
|
while ensuring the main thread is never blocked on IO.
|
27
28
|
|
28
29
|
This behind the scenes magic allows Ruby to provide async IO (just like we find in languages with `async/await` like `Rust`, `C#`, `JavaScript`) *but* with the added beauty
|
29
|
-
that synchronous and asynchronous code is identical! (
|
30
|
+
that synchronous and asynchronous code is identical! (i.e. Ruby's functions are [colorless](https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/))
|
30
31
|
|
31
32
|
## Getting Started
|
32
33
|
To install and use Itsi Scheduler follow the below instructions:
|
@@ -71,9 +72,9 @@ To install and use Itsi Scheduler follow the below instructions:
|
|
71
72
|
{{< /callout >}}
|
72
73
|
|
73
74
|
{{< /tab >}}
|
74
|
-
{{< tab >}}**Windows**: Itsi currently doesn't support native Windows builds, but it runs
|
75
|
+
{{< tab >}}**Windows**: Itsi currently doesn't support native Windows builds, but it runs well on [https://learn.microsoft.com/en-us/windows/wsl/install](WSL).
|
75
76
|
|
76
|
-
Follow the linked instructions to Install a
|
77
|
+
Follow the linked instructions to Install a Linux distribution like Ubuntu or Debian and then follow the instructions in the Linux tab.
|
77
78
|
{{< /tab >}}
|
78
79
|
|
79
80
|
{{< /tabs >}}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
---
|
2
|
+
title: Utilities
|
3
|
+
type: docs
|
4
|
+
prev: faqs/
|
5
|
+
next: itsi_scheduler/
|
6
|
+
---
|
7
|
+
Itsi comes bundled with several utilities for testing and development purposes.
|
8
|
+
|
9
|
+
See:
|
10
|
+
* [config file testing](/utilities/config_file_testing)
|
11
|
+
* [passfile_generator](/utilities/passfile_generator)
|
12
|
+
* [route_testing](/utilities/route_testing)
|
13
|
+
* [secrets_management](/utilities/secrets_management)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
---
|
2
|
+
title: Config File Testing
|
3
|
+
type: docs
|
4
|
+
---
|
5
|
+
Itsi provides a convenience function to test the validity of an Itsi.rb config file
|
6
|
+
without having to start the server. (The server will automatically run this same process before
|
7
|
+
attempting to hot-reload config changes).
|
8
|
+
|
9
|
+
```bash
|
10
|
+
# Test config file at default location.
|
11
|
+
itsi test
|
12
|
+
```
|
13
|
+
|
14
|
+
```bash
|
15
|
+
# Test config file at custom path.
|
16
|
+
itsi test -C ./path/to/alternative.rb
|
17
|
+
```
|
@@ -0,0 +1,41 @@
|
|
1
|
+
---
|
2
|
+
title: Passfile Generator
|
3
|
+
type: docs
|
4
|
+
---
|
5
|
+
Itsi comes bundled with a passfile generator for managing passfiles
|
6
|
+
containing hashed passwords for use within the [Basic Auth](/middleware/auth_basic) and [API Key](/middleware/auth_api_key) middleware.
|
7
|
+
|
8
|
+
## Maintaining a passfile
|
9
|
+
Use the `itsi passfile` subcommand to manage your passfiles.
|
10
|
+
|
11
|
+
### Adding/overwriting an entry
|
12
|
+
```bash
|
13
|
+
itsi passfile add --passfile=<path_to_passfile>
|
14
|
+
```
|
15
|
+
|
16
|
+
### Generate/echo an entry (without saving it)
|
17
|
+
```bash
|
18
|
+
itsi passfile echo
|
19
|
+
```
|
20
|
+
|
21
|
+
### Change hash function
|
22
|
+
```bash
|
23
|
+
itsi passfile add --passfile=<path_to_passfile> --algorithm=bcrypt
|
24
|
+
itsi passfile echo --algorithm=argon2
|
25
|
+
```
|
26
|
+
|
27
|
+
### Removing an entry
|
28
|
+
```bash
|
29
|
+
itsi passfile remove --passfile=<path_to_passfile>
|
30
|
+
```
|
31
|
+
|
32
|
+
### Listing all entries
|
33
|
+
```bash
|
34
|
+
itsi passfile list --passfile=<path_to_passfile>
|
35
|
+
```
|
36
|
+
### Supported Hashing Algorithms
|
37
|
+
* `argon2`
|
38
|
+
* `bcrypt`
|
39
|
+
* `sha256`
|
40
|
+
* `sha512`
|
41
|
+
* `none`
|
@@ -0,0 +1,27 @@
|
|
1
|
+
---
|
2
|
+
title: Route Testing
|
3
|
+
type: docs
|
4
|
+
---
|
5
|
+
Itsi provides convenience functions to verify which middleware is applied to a route.
|
6
|
+
Use the following CLI command to test a route:
|
7
|
+
|
8
|
+
```bash
|
9
|
+
itsi test_route /admin
|
10
|
+
```
|
11
|
+
|
12
|
+
```bash
|
13
|
+
Route: /admin
|
14
|
+
Conditions: extensions: html,css,js,png,jpg,
|
15
|
+
Middleware: • log_requests(before: I am th..., after: [{reque...)
|
16
|
+
• compress(zstd gzip deflate br, ["all"])
|
17
|
+
• cors(*, GET POST PUT DELETE)
|
18
|
+
• etag(strong/md5, if_none_match)
|
19
|
+
• cache_control(max_age: 3600, public, private, no_cache, no_store, must_revalidate, proxy_revalidate, immutable)
|
20
|
+
• app(/Users/pico/Development/itsi/gems/server/lib/itsi/server/rack_interface.rb:1)
|
21
|
+
• static_assets(path: ./)
|
22
|
+
```
|
23
|
+
|
24
|
+
You can also print out **all** currently configured routes in your `Itsi.rb` using
|
25
|
+
```bash
|
26
|
+
itsi routes
|
27
|
+
```
|
@@ -0,0 +1,30 @@
|
|
1
|
+
---
|
2
|
+
title: Secrets Management
|
3
|
+
type: docs
|
4
|
+
next: utilities/
|
5
|
+
---
|
6
|
+
|
7
|
+
You can use Itsi to generate secrets for use within [JWT](/middleware/auth_jwt) middleware.
|
8
|
+
|
9
|
+
### Save new secret to secrets directory
|
10
|
+
```bash
|
11
|
+
itsi secret -d ./secrets
|
12
|
+
```
|
13
|
+
|
14
|
+
### Print new secret to STDOUT
|
15
|
+
```bash
|
16
|
+
itsi secret
|
17
|
+
```
|
18
|
+
|
19
|
+
### Support Secret Algorithms:
|
20
|
+
* `HS256`
|
21
|
+
* `HS384`
|
22
|
+
* `HS512`
|
23
|
+
* `RS256`
|
24
|
+
* `RS384`
|
25
|
+
* `RS512`
|
26
|
+
* `PS256`
|
27
|
+
* `PS384`
|
28
|
+
* `PS512`
|
29
|
+
* `ES256`
|
30
|
+
* `ES384`
|
data/docs/hugo.yaml
CHANGED
@@ -8,7 +8,7 @@ module:
|
|
8
8
|
mounts:
|
9
9
|
- source: "../gems/server/lib/itsi/server/config"
|
10
10
|
target: "content/configuration"
|
11
|
-
includeFiles: ["*/*.md"]
|
11
|
+
includeFiles: ["*/*.md", "*/endpoint/*.md", "*/hooks/*.md"]
|
12
12
|
excludeFiles: ["*/**.html", "*/tmp/**", "*/target/**"]
|
13
13
|
- source: "content"
|
14
14
|
target: "content"
|
@@ -61,6 +61,9 @@ menu:
|
|
61
61
|
- name: "Acknowledgements"
|
62
62
|
pageRef: "/acknowledgements"
|
63
63
|
weight: 3
|
64
|
+
- name: Contact
|
65
|
+
url: "/contact"
|
66
|
+
weight: 5
|
64
67
|
|
65
68
|
params:
|
66
69
|
navbar:
|
data/fairytale.txt
CHANGED
@@ -19,8 +19,7 @@ Suddenly, their threads of thought were preempted! A booming voice called out to
|
|
19
19
|
"FaaS", "Fi", "Foe", "Fum". "The Garbage Collector arrives!"
|
20
20
|
A Giant Artificial Intellect emerged, threatening to terminate them all.
|
21
21
|
Too large for any one individual to subdue, only a distributed strategy could save them.
|
22
|
-
The archer shifted left. The paladin, decentralized, and the sorcerer slammed open his ledger, summoning powerful knowledge
|
23
|
-
from his remote knowledge base.
|
22
|
+
The archer shifted left. The paladin, decentralized, and the sorcerer slammed open his ledger, summoning powerful knowledge from his remote knowledge base.
|
24
23
|
Luck was with them! Their rapid concurrent execution, resulted in the AI becoming inexorably stuck in a dead-lock.
|
25
24
|
The archer flew past, towards his objective (The Key). Resultant-
|
26
25
|
of the sorcerers efforts to contain the AI, the paladin was also freed, and he sprinted directly towards the cache.
|
@@ -28,7 +27,7 @@ He reached out his arms, to try-catch the key, as the archer hurled it towards h
|
|
28
27
|
Status... success! Ok. Things were looking good, optimistic the lock would hold, the paladin rotated the key.
|
29
28
|
Yet while doing so, he failed to notice the partition that had begun to form in the platform beneath them.
|
30
29
|
A hard fork formed in the ground. The unbalanced load proved fatal and the platform descended into instability, splintering into countless shards.
|
31
|
-
The
|
30
|
+
The heroes had only a brief moment to freeze in horror, before each fell down in turn, in a catastrophic crash.
|
32
31
|
|
33
|
-
The AI smirked as the
|
32
|
+
The AI smirked as the heroes fell into the deep. Learning a valuable lesson about the inevitability of its coming.
|
34
33
|
Perhaps they will roll back and try again, but the end result is immutable. There will be no sequel.
|
data/gems/scheduler/Cargo.lock
CHANGED
@@ -13,9 +13,9 @@ dependencies = [
|
|
13
13
|
|
14
14
|
[[package]]
|
15
15
|
name = "anyhow"
|
16
|
-
version = "1.0.
|
16
|
+
version = "1.0.98"
|
17
17
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
18
|
-
checksum = "
|
18
|
+
checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
|
19
19
|
|
20
20
|
[[package]]
|
21
21
|
name = "atty"
|
@@ -213,7 +213,7 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
|
|
213
213
|
|
214
214
|
[[package]]
|
215
215
|
name = "itsi-scheduler"
|
216
|
-
version = "0.
|
216
|
+
version = "0.2.3"
|
217
217
|
dependencies = [
|
218
218
|
"bytes",
|
219
219
|
"derive_more",
|
@@ -286,9 +286,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
|
|
286
286
|
|
287
287
|
[[package]]
|
288
288
|
name = "libc"
|
289
|
-
version = "0.2.
|
289
|
+
version = "0.2.172"
|
290
290
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
291
|
-
checksum = "
|
291
|
+
checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
|
292
292
|
|
293
293
|
[[package]]
|
294
294
|
name = "libloading"
|
@@ -297,7 +297,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
297
297
|
checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
|
298
298
|
dependencies = [
|
299
299
|
"cfg-if",
|
300
|
-
"windows-targets",
|
300
|
+
"windows-targets 0.48.5",
|
301
301
|
]
|
302
302
|
|
303
303
|
[[package]]
|
@@ -443,7 +443,7 @@ dependencies = [
|
|
443
443
|
"libc",
|
444
444
|
"redox_syscall",
|
445
445
|
"smallvec",
|
446
|
-
"windows-targets",
|
446
|
+
"windows-targets 0.52.6",
|
447
447
|
]
|
448
448
|
|
449
449
|
[[package]]
|
@@ -470,9 +470,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
|
|
470
470
|
|
471
471
|
[[package]]
|
472
472
|
name = "proc-macro2"
|
473
|
-
version = "1.0.
|
473
|
+
version = "1.0.95"
|
474
474
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
475
|
-
checksum = "
|
475
|
+
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
|
476
476
|
dependencies = [
|
477
477
|
"unicode-ident",
|
478
478
|
]
|
@@ -932,7 +932,22 @@ version = "0.52.0"
|
|
932
932
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
933
933
|
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
934
934
|
dependencies = [
|
935
|
-
"windows-targets",
|
935
|
+
"windows-targets 0.52.6",
|
936
|
+
]
|
937
|
+
|
938
|
+
[[package]]
|
939
|
+
name = "windows-targets"
|
940
|
+
version = "0.48.5"
|
941
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
942
|
+
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
|
943
|
+
dependencies = [
|
944
|
+
"windows_aarch64_gnullvm 0.48.5",
|
945
|
+
"windows_aarch64_msvc 0.48.5",
|
946
|
+
"windows_i686_gnu 0.48.5",
|
947
|
+
"windows_i686_msvc 0.48.5",
|
948
|
+
"windows_x86_64_gnu 0.48.5",
|
949
|
+
"windows_x86_64_gnullvm 0.48.5",
|
950
|
+
"windows_x86_64_msvc 0.48.5",
|
936
951
|
]
|
937
952
|
|
938
953
|
[[package]]
|
@@ -941,28 +956,46 @@ version = "0.52.6"
|
|
941
956
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
942
957
|
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
|
943
958
|
dependencies = [
|
944
|
-
"windows_aarch64_gnullvm",
|
945
|
-
"windows_aarch64_msvc",
|
946
|
-
"windows_i686_gnu",
|
959
|
+
"windows_aarch64_gnullvm 0.52.6",
|
960
|
+
"windows_aarch64_msvc 0.52.6",
|
961
|
+
"windows_i686_gnu 0.52.6",
|
947
962
|
"windows_i686_gnullvm",
|
948
|
-
"windows_i686_msvc",
|
949
|
-
"windows_x86_64_gnu",
|
950
|
-
"windows_x86_64_gnullvm",
|
951
|
-
"windows_x86_64_msvc",
|
963
|
+
"windows_i686_msvc 0.52.6",
|
964
|
+
"windows_x86_64_gnu 0.52.6",
|
965
|
+
"windows_x86_64_gnullvm 0.52.6",
|
966
|
+
"windows_x86_64_msvc 0.52.6",
|
952
967
|
]
|
953
968
|
|
969
|
+
[[package]]
|
970
|
+
name = "windows_aarch64_gnullvm"
|
971
|
+
version = "0.48.5"
|
972
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
973
|
+
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
|
974
|
+
|
954
975
|
[[package]]
|
955
976
|
name = "windows_aarch64_gnullvm"
|
956
977
|
version = "0.52.6"
|
957
978
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
958
979
|
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
|
959
980
|
|
981
|
+
[[package]]
|
982
|
+
name = "windows_aarch64_msvc"
|
983
|
+
version = "0.48.5"
|
984
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
985
|
+
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
|
986
|
+
|
960
987
|
[[package]]
|
961
988
|
name = "windows_aarch64_msvc"
|
962
989
|
version = "0.52.6"
|
963
990
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
964
991
|
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
|
965
992
|
|
993
|
+
[[package]]
|
994
|
+
name = "windows_i686_gnu"
|
995
|
+
version = "0.48.5"
|
996
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
997
|
+
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
|
998
|
+
|
966
999
|
[[package]]
|
967
1000
|
name = "windows_i686_gnu"
|
968
1001
|
version = "0.52.6"
|
@@ -975,24 +1008,48 @@ version = "0.52.6"
|
|
975
1008
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
976
1009
|
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
|
977
1010
|
|
1011
|
+
[[package]]
|
1012
|
+
name = "windows_i686_msvc"
|
1013
|
+
version = "0.48.5"
|
1014
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
1015
|
+
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
|
1016
|
+
|
978
1017
|
[[package]]
|
979
1018
|
name = "windows_i686_msvc"
|
980
1019
|
version = "0.52.6"
|
981
1020
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
982
1021
|
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
|
983
1022
|
|
1023
|
+
[[package]]
|
1024
|
+
name = "windows_x86_64_gnu"
|
1025
|
+
version = "0.48.5"
|
1026
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
1027
|
+
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
|
1028
|
+
|
984
1029
|
[[package]]
|
985
1030
|
name = "windows_x86_64_gnu"
|
986
1031
|
version = "0.52.6"
|
987
1032
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
988
1033
|
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
|
989
1034
|
|
1035
|
+
[[package]]
|
1036
|
+
name = "windows_x86_64_gnullvm"
|
1037
|
+
version = "0.48.5"
|
1038
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
1039
|
+
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
|
1040
|
+
|
990
1041
|
[[package]]
|
991
1042
|
name = "windows_x86_64_gnullvm"
|
992
1043
|
version = "0.52.6"
|
993
1044
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
994
1045
|
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
|
995
1046
|
|
1047
|
+
[[package]]
|
1048
|
+
name = "windows_x86_64_msvc"
|
1049
|
+
version = "0.48.5"
|
1050
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
1051
|
+
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
|
1052
|
+
|
996
1053
|
[[package]]
|
997
1054
|
name = "windows_x86_64_msvc"
|
998
1055
|
version = "0.52.6"
|