itsi-server 0.2.22-aarch64-linux
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 +7 -0
- data/.rubocop.yml +8 -0
- data/Cargo.lock +4452 -0
- data/Cargo.toml +11 -0
- data/Rakefile +57 -0
- data/exe/itsi +193 -0
- data/ext/itsi_acme/Cargo.toml +86 -0
- data/ext/itsi_acme/examples/high_level.rs +63 -0
- data/ext/itsi_acme/examples/high_level_warp.rs +52 -0
- data/ext/itsi_acme/examples/low_level.rs +87 -0
- data/ext/itsi_acme/examples/low_level_axum.rs +66 -0
- data/ext/itsi_acme/src/acceptor.rs +81 -0
- data/ext/itsi_acme/src/acme.rs +354 -0
- data/ext/itsi_acme/src/axum.rs +86 -0
- data/ext/itsi_acme/src/cache.rs +39 -0
- data/ext/itsi_acme/src/caches/boxed.rs +80 -0
- data/ext/itsi_acme/src/caches/composite.rs +69 -0
- data/ext/itsi_acme/src/caches/dir.rs +106 -0
- data/ext/itsi_acme/src/caches/mod.rs +11 -0
- data/ext/itsi_acme/src/caches/no.rs +78 -0
- data/ext/itsi_acme/src/caches/test.rs +136 -0
- data/ext/itsi_acme/src/config.rs +172 -0
- data/ext/itsi_acme/src/https_helper.rs +69 -0
- data/ext/itsi_acme/src/incoming.rs +142 -0
- data/ext/itsi_acme/src/jose.rs +161 -0
- data/ext/itsi_acme/src/lib.rs +142 -0
- data/ext/itsi_acme/src/resolver.rs +59 -0
- data/ext/itsi_acme/src/state.rs +424 -0
- data/ext/itsi_error/Cargo.lock +368 -0
- data/ext/itsi_error/Cargo.toml +12 -0
- data/ext/itsi_error/src/lib.rs +140 -0
- data/ext/itsi_instrument_entry/Cargo.toml +15 -0
- data/ext/itsi_instrument_entry/src/lib.rs +31 -0
- data/ext/itsi_rb_helpers/Cargo.lock +355 -0
- data/ext/itsi_rb_helpers/Cargo.toml +11 -0
- data/ext/itsi_rb_helpers/src/heap_value.rs +139 -0
- data/ext/itsi_rb_helpers/src/lib.rs +232 -0
- data/ext/itsi_scheduler/Cargo.toml +24 -0
- data/ext/itsi_scheduler/src/itsi_scheduler/io_helpers.rs +56 -0
- data/ext/itsi_scheduler/src/itsi_scheduler/io_waiter.rs +44 -0
- data/ext/itsi_scheduler/src/itsi_scheduler/timer.rs +44 -0
- data/ext/itsi_scheduler/src/itsi_scheduler.rs +320 -0
- data/ext/itsi_scheduler/src/lib.rs +39 -0
- data/ext/itsi_server/Cargo.lock +2956 -0
- data/ext/itsi_server/Cargo.toml +94 -0
- data/ext/itsi_server/extconf.rb +11 -0
- data/ext/itsi_server/src/default_responses/html/401.html +68 -0
- data/ext/itsi_server/src/default_responses/html/403.html +68 -0
- data/ext/itsi_server/src/default_responses/html/404.html +68 -0
- data/ext/itsi_server/src/default_responses/html/413.html +71 -0
- data/ext/itsi_server/src/default_responses/html/429.html +68 -0
- data/ext/itsi_server/src/default_responses/html/500.html +71 -0
- data/ext/itsi_server/src/default_responses/html/502.html +71 -0
- data/ext/itsi_server/src/default_responses/html/503.html +68 -0
- data/ext/itsi_server/src/default_responses/html/504.html +69 -0
- data/ext/itsi_server/src/default_responses/html/index.html +238 -0
- data/ext/itsi_server/src/default_responses/json/401.json +6 -0
- data/ext/itsi_server/src/default_responses/json/403.json +6 -0
- data/ext/itsi_server/src/default_responses/json/404.json +6 -0
- data/ext/itsi_server/src/default_responses/json/413.json +6 -0
- data/ext/itsi_server/src/default_responses/json/429.json +6 -0
- data/ext/itsi_server/src/default_responses/json/500.json +6 -0
- data/ext/itsi_server/src/default_responses/json/502.json +6 -0
- data/ext/itsi_server/src/default_responses/json/503.json +6 -0
- data/ext/itsi_server/src/default_responses/json/504.json +6 -0
- data/ext/itsi_server/src/default_responses/mod.rs +14 -0
- data/ext/itsi_server/src/env.rs +43 -0
- data/ext/itsi_server/src/lib.rs +154 -0
- data/ext/itsi_server/src/prelude.rs +2 -0
- data/ext/itsi_server/src/ruby_types/itsi_body_proxy/big_bytes.rs +116 -0
- data/ext/itsi_server/src/ruby_types/itsi_body_proxy/mod.rs +149 -0
- data/ext/itsi_server/src/ruby_types/itsi_grpc_call.rs +346 -0
- data/ext/itsi_server/src/ruby_types/itsi_grpc_response_stream/mod.rs +265 -0
- data/ext/itsi_server/src/ruby_types/itsi_http_request.rs +399 -0
- data/ext/itsi_server/src/ruby_types/itsi_http_response.rs +447 -0
- data/ext/itsi_server/src/ruby_types/itsi_server/file_watcher.rs +545 -0
- data/ext/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +650 -0
- data/ext/itsi_server/src/ruby_types/itsi_server.rs +102 -0
- data/ext/itsi_server/src/ruby_types/mod.rs +48 -0
- data/ext/itsi_server/src/server/binds/bind.rs +204 -0
- data/ext/itsi_server/src/server/binds/bind_protocol.rs +37 -0
- data/ext/itsi_server/src/server/binds/listener.rs +485 -0
- data/ext/itsi_server/src/server/binds/mod.rs +4 -0
- data/ext/itsi_server/src/server/binds/tls/locked_dir_cache.rs +132 -0
- data/ext/itsi_server/src/server/binds/tls.rs +278 -0
- data/ext/itsi_server/src/server/byte_frame.rs +32 -0
- data/ext/itsi_server/src/server/frame_stream.rs +143 -0
- data/ext/itsi_server/src/server/http_message_types.rs +230 -0
- data/ext/itsi_server/src/server/io_stream.rs +128 -0
- data/ext/itsi_server/src/server/lifecycle_event.rs +12 -0
- data/ext/itsi_server/src/server/middleware_stack/middleware.rs +170 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/allow_list.rs +63 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_api_key.rs +94 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_basic.rs +93 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/auth_jwt.rs +343 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/cache_control.rs +151 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/compression.rs +329 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/cors.rs +300 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/csp.rs +193 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/deny_list.rs +64 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/error_response/default_responses.rs +188 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/error_response.rs +168 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/etag.rs +183 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/header_interpretation.rs +82 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/intrusion_protection.rs +209 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/log_requests.rs +133 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/max_body.rs +47 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/mod.rs +122 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +407 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/rate_limit.rs +155 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/redirect.rs +54 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/request_headers.rs +54 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/response_headers.rs +51 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +138 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/static_assets.rs +269 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/static_response.rs +62 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/string_rewrite.rs +218 -0
- data/ext/itsi_server/src/server/middleware_stack/middlewares/token_source.rs +31 -0
- data/ext/itsi_server/src/server/middleware_stack/mod.rs +381 -0
- data/ext/itsi_server/src/server/mod.rs +14 -0
- data/ext/itsi_server/src/server/process_worker.rs +247 -0
- data/ext/itsi_server/src/server/redirect_type.rs +26 -0
- data/ext/itsi_server/src/server/request_job.rs +11 -0
- data/ext/itsi_server/src/server/serve_strategy/acceptor.rs +100 -0
- data/ext/itsi_server/src/server/serve_strategy/cluster_mode.rs +411 -0
- data/ext/itsi_server/src/server/serve_strategy/mod.rs +31 -0
- data/ext/itsi_server/src/server/serve_strategy/single_mode.rs +449 -0
- data/ext/itsi_server/src/server/signal.rs +129 -0
- data/ext/itsi_server/src/server/size_limited_incoming.rs +107 -0
- data/ext/itsi_server/src/server/thread_worker.rs +504 -0
- data/ext/itsi_server/src/services/cache_store.rs +74 -0
- data/ext/itsi_server/src/services/itsi_http_service.rs +270 -0
- data/ext/itsi_server/src/services/mime_types.rs +2896 -0
- data/ext/itsi_server/src/services/mod.rs +6 -0
- data/ext/itsi_server/src/services/password_hasher.rs +89 -0
- data/ext/itsi_server/src/services/rate_limiter.rs +609 -0
- data/ext/itsi_server/src/services/static_file_server.rs +1400 -0
- data/ext/itsi_tracing/Cargo.lock +274 -0
- data/ext/itsi_tracing/Cargo.toml +17 -0
- data/ext/itsi_tracing/src/lib.rs +370 -0
- data/lib/itsi/http_request/response_status_shortcodes.rb +76 -0
- data/lib/itsi/http_request.rb +228 -0
- data/lib/itsi/http_response.rb +49 -0
- data/lib/itsi/passfile.rb +108 -0
- data/lib/itsi/rack_env_pool.rb +49 -0
- data/lib/itsi/server/3.1/itsi_server.so +0 -0
- data/lib/itsi/server/3.2/itsi_server.so +0 -0
- data/lib/itsi/server/3.3/itsi_server.so +0 -0
- data/lib/itsi/server/3.4/itsi_server.so +0 -0
- data/lib/itsi/server/4.0/itsi_server.so +0 -0
- data/lib/itsi/server/config/config_helpers.rb +116 -0
- data/lib/itsi/server/config/dsl.rb +208 -0
- data/lib/itsi/server/config/known_paths/KitchensinkDirectories.txt +2346 -0
- data/lib/itsi/server/config/known_paths/Randomfiles.txt +24 -0
- data/lib/itsi/server/config/known_paths/UnixDotfiles.txt +52 -0
- data/lib/itsi/server/config/known_paths/backdoors/ASP_CommonBackdoors.txt +29 -0
- data/lib/itsi/server/config/known_paths/backdoors/bot_control_panels.txt +1668 -0
- data/lib/itsi/server/config/known_paths/backdoors/shells.txt +1167 -0
- data/lib/itsi/server/config/known_paths/cgi/CGI_HTTP_POST.txt +7 -0
- data/lib/itsi/server/config/known_paths/cgi/CGI_HTTP_POST_Windows.txt +6 -0
- data/lib/itsi/server/config/known_paths/cgi/CGI_Microsoft.txt +79 -0
- data/lib/itsi/server/config/known_paths/cgi/CGI_XPlatform.txt +3948 -0
- data/lib/itsi/server/config/known_paths/cms/README.md +5 -0
- data/lib/itsi/server/config/known_paths/cms/drupal_plugins.txt +6320 -0
- data/lib/itsi/server/config/known_paths/cms/drupal_themes.txt +828 -0
- data/lib/itsi/server/config/known_paths/cms/joomla_plugins.txt +224 -0
- data/lib/itsi/server/config/known_paths/cms/joomla_themes.txt +30 -0
- data/lib/itsi/server/config/known_paths/cms/php-nuke.txt +2142 -0
- data/lib/itsi/server/config/known_paths/cms/wordpress.txt +1566 -0
- data/lib/itsi/server/config/known_paths/cms/wp_common_theme_files.txt +46 -0
- data/lib/itsi/server/config/known_paths/cms/wp_plugins.txt +13366 -0
- data/lib/itsi/server/config/known_paths/cms/wp_plugins_full.txt +68662 -0
- data/lib/itsi/server/config/known_paths/cms/wp_plugins_top225.txt +225 -0
- data/lib/itsi/server/config/known_paths/cms/wp_themes.readme +12 -0
- data/lib/itsi/server/config/known_paths/cms/wp_themes.txt +7336 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/3CharExtBrute.txt +17576 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/CommonWebExtensions.txt +80 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Backup.txt +14 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Common.txt +865 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Compressed.txt +186 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Mostcommon.txt +30 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/Extensions.Skipfish.txt +93 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/WordlistSkipfish.txt +1918 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/copy_of.txt +8 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-directories-lowercase.txt +56180 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-directories.txt +62290 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-extensions-lowercase.txt +2367 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-extensions.txt +2450 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-files-lowercase.txt +35323 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-files.txt +37037 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-words-lowercase.txt +107982 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-large-words.txt +119600 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-directories-lowercase.txt +26593 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-directories.txt +30009 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-extensions-lowercase.txt +1233 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-extensions.txt +1289 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-files-lowercase.txt +16243 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-files.txt +17128 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-words-lowercase.txt +56293 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-medium-words.txt +63087 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-directories-lowercase.txt +17776 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-directories.txt +20122 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-extensions-lowercase.txt +914 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-extensions.txt +963 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-files-lowercase.txt +10848 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-files.txt +11424 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-words-lowercase.txt +38267 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/raft-small-words.txt +43003 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/spanish.txt +445 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/test_demo.txt +36 -0
- data/lib/itsi/server/config/known_paths/filename-dirname-bruteforce/upload_variants.txt +44 -0
- data/lib/itsi/server/config/known_paths/login-file-locations/Logins.txt +71 -0
- data/lib/itsi/server/config/known_paths/login-file-locations/cfm.txt +294 -0
- data/lib/itsi/server/config/known_paths/login-file-locations/html.txt +295 -0
- data/lib/itsi/server/config/known_paths/login-file-locations/jsp.txt +294 -0
- data/lib/itsi/server/config/known_paths/login-file-locations/php.txt +294 -0
- data/lib/itsi/server/config/known_paths/login-file-locations/windows-asp.txt +294 -0
- data/lib/itsi/server/config/known_paths/login-file-locations/windows-aspx.txt +294 -0
- data/lib/itsi/server/config/known_paths/password-file-locations/Passwords.txt +47 -0
- data/lib/itsi/server/config/known_paths/php/PHP.txt +30 -0
- data/lib/itsi/server/config/known_paths/php/PHP_CommonBackdoors.txt +5 -0
- data/lib/itsi/server/config/known_paths/proxy-conf.txt +31 -0
- data/lib/itsi/server/config/known_paths/tftp.txt +79 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/ADFS.txt +86 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/AdobeXML.txt +16 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Apache.txt +101 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/ApacheTomcat.txt +47 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Apache_Axis.txt +16 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/ColdFusion.txt +111 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/FatwireCMS.txt +390 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Frontpage.txt +38 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/HP_System_Mgmt_Homepage.txt +239 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/HTTP_POST_Microsoft.txt +2 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Hyperion.txt +578 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/IIS.txt +187 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/JBoss.txt +5 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/JRun.txt +13 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/JavaServlets_Common.txt +3 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Joomla_exploitable.txt +1937 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/LotusNotes.txt +206 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Netware.txt +18 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Oracle9i.txt +60 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/OracleAppServer.txt +192 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/README.md +6 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Ruby_Rails.txt +121 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/SAP.txt +463 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Sharepoint.txt +1707 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/SiteMinder.txt +19 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/SunAppServerGlassfish.txt +51 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/SuniPlanet.txt +35 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Vignette.txt +73 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Weblogic.txt +160 -0
- data/lib/itsi/server/config/known_paths/webservers-appservers/Websphere.txt +366 -0
- data/lib/itsi/server/config/known_paths/wellknown-rfc5785.txt +30 -0
- data/lib/itsi/server/config/known_paths.rb +24 -0
- data/lib/itsi/server/config/middleware/_index.md +56 -0
- data/lib/itsi/server/config/middleware/allow_list.md +46 -0
- data/lib/itsi/server/config/middleware/allow_list.rb +42 -0
- data/lib/itsi/server/config/middleware/auth_api_key.md +90 -0
- data/lib/itsi/server/config/middleware/auth_api_key.rb +51 -0
- data/lib/itsi/server/config/middleware/auth_basic.md +45 -0
- data/lib/itsi/server/config/middleware/auth_basic.rb +46 -0
- data/lib/itsi/server/config/middleware/auth_jwt.md +82 -0
- data/lib/itsi/server/config/middleware/auth_jwt.rb +38 -0
- data/lib/itsi/server/config/middleware/cache_control.md +78 -0
- data/lib/itsi/server/config/middleware/cache_control.rb +45 -0
- data/lib/itsi/server/config/middleware/cidr_to_regex.rb +50 -0
- data/lib/itsi/server/config/middleware/compression.md +50 -0
- data/lib/itsi/server/config/middleware/compression.rb +37 -0
- data/lib/itsi/server/config/middleware/cors.md +93 -0
- data/lib/itsi/server/config/middleware/cors.rb +32 -0
- data/lib/itsi/server/config/middleware/csp.md +37 -0
- data/lib/itsi/server/config/middleware/csp.rb +44 -0
- data/lib/itsi/server/config/middleware/deny_list.md +45 -0
- data/lib/itsi/server/config/middleware/deny_list.rb +42 -0
- data/lib/itsi/server/config/middleware/endpoint/_index.md +160 -0
- data/lib/itsi/server/config/middleware/endpoint/controller.md +186 -0
- data/lib/itsi/server/config/middleware/endpoint/controller.rb +33 -0
- data/lib/itsi/server/config/middleware/endpoint/delete.md +12 -0
- data/lib/itsi/server/config/middleware/endpoint/delete.rb +43 -0
- data/lib/itsi/server/config/middleware/endpoint/endpoint.rb +106 -0
- data/lib/itsi/server/config/middleware/endpoint/get.md +12 -0
- data/lib/itsi/server/config/middleware/endpoint/get.rb +43 -0
- data/lib/itsi/server/config/middleware/endpoint/http_request.md +44 -0
- data/lib/itsi/server/config/middleware/endpoint/http_response.md +39 -0
- data/lib/itsi/server/config/middleware/endpoint/patch.md +12 -0
- data/lib/itsi/server/config/middleware/endpoint/patch.rb +43 -0
- data/lib/itsi/server/config/middleware/endpoint/post.md +12 -0
- data/lib/itsi/server/config/middleware/endpoint/post.rb +43 -0
- data/lib/itsi/server/config/middleware/endpoint/put.md +12 -0
- data/lib/itsi/server/config/middleware/endpoint/put.rb +43 -0
- data/lib/itsi/server/config/middleware/endpoint/schemas.md +122 -0
- data/lib/itsi/server/config/middleware/error_response.md +74 -0
- data/lib/itsi/server/config/middleware/error_response.rb +36 -0
- data/lib/itsi/server/config/middleware/etag.md +55 -0
- data/lib/itsi/server/config/middleware/etag.rb +25 -0
- data/lib/itsi/server/config/middleware/grpc.md +170 -0
- data/lib/itsi/server/config/middleware/grpc.rb +54 -0
- data/lib/itsi/server/config/middleware/intrusion_protection.md +124 -0
- data/lib/itsi/server/config/middleware/intrusion_protection.rb +61 -0
- data/lib/itsi/server/config/middleware/location.md +107 -0
- data/lib/itsi/server/config/middleware/location.rb +103 -0
- data/lib/itsi/server/config/middleware/log_requests.md +67 -0
- data/lib/itsi/server/config/middleware/log_requests.rb +31 -0
- data/lib/itsi/server/config/middleware/max_body.md +18 -0
- data/lib/itsi/server/config/middleware/max_body.rb +21 -0
- data/lib/itsi/server/config/middleware/proxy.md +62 -0
- data/lib/itsi/server/config/middleware/proxy.rb +42 -0
- data/lib/itsi/server/config/middleware/rackup_file.md +72 -0
- data/lib/itsi/server/config/middleware/rackup_file.rb +43 -0
- data/lib/itsi/server/config/middleware/rate_limit.md +126 -0
- data/lib/itsi/server/config/middleware/rate_limit.rb +34 -0
- data/lib/itsi/server/config/middleware/rate_limit_store.rb +25 -0
- data/lib/itsi/server/config/middleware/redirect.md +55 -0
- data/lib/itsi/server/config/middleware/redirect.rb +25 -0
- data/lib/itsi/server/config/middleware/request_headers.md +34 -0
- data/lib/itsi/server/config/middleware/request_headers.rb +24 -0
- data/lib/itsi/server/config/middleware/response_headers.md +33 -0
- data/lib/itsi/server/config/middleware/response_headers.rb +25 -0
- data/lib/itsi/server/config/middleware/run.md +79 -0
- data/lib/itsi/server/config/middleware/run.rb +45 -0
- data/lib/itsi/server/config/middleware/static_assets.md +113 -0
- data/lib/itsi/server/config/middleware/static_assets.rb +99 -0
- data/lib/itsi/server/config/middleware/static_response.md +44 -0
- data/lib/itsi/server/config/middleware/static_response.rb +30 -0
- data/lib/itsi/server/config/middleware/string_rewrite.md +81 -0
- data/lib/itsi/server/config/middleware/token_source.rb +32 -0
- data/lib/itsi/server/config/middleware.rb +13 -0
- data/lib/itsi/server/config/option.rb +13 -0
- data/lib/itsi/server/config/options/_index.md +41 -0
- data/lib/itsi/server/config/options/auto_reload_config.md +13 -0
- data/lib/itsi/server/config/options/auto_reload_config.rb +46 -0
- data/lib/itsi/server/config/options/bind.md +71 -0
- data/lib/itsi/server/config/options/bind.rb +26 -0
- data/lib/itsi/server/config/options/certificates.md +65 -0
- data/lib/itsi/server/config/options/daemonize.md +14 -0
- data/lib/itsi/server/config/options/daemonize.rb +19 -0
- data/lib/itsi/server/config/options/fiber_scheduler.md +34 -0
- data/lib/itsi/server/config/options/fiber_scheduler.rb +21 -0
- data/lib/itsi/server/config/options/header_read_timeout.md +17 -0
- data/lib/itsi/server/config/options/header_read_timeout.rb +19 -0
- data/lib/itsi/server/config/options/hooks/_index.md +11 -0
- data/lib/itsi/server/config/options/hooks/after_fork.md +13 -0
- data/lib/itsi/server/config/options/hooks/after_fork.rb +28 -0
- data/lib/itsi/server/config/options/hooks/after_memory_limit_reached.md +14 -0
- data/lib/itsi/server/config/options/hooks/after_memory_limit_reached.rb +28 -0
- data/lib/itsi/server/config/options/hooks/after_start.md +12 -0
- data/lib/itsi/server/config/options/hooks/after_start.rb +28 -0
- data/lib/itsi/server/config/options/hooks/before_fork.md +13 -0
- data/lib/itsi/server/config/options/hooks/before_fork.rb +28 -0
- data/lib/itsi/server/config/options/hooks/before_restart.md +12 -0
- data/lib/itsi/server/config/options/hooks/before_restart.rb +28 -0
- data/lib/itsi/server/config/options/hooks/before_shutdown.md +12 -0
- data/lib/itsi/server/config/options/hooks/before_shutdown.rb +28 -0
- data/lib/itsi/server/config/options/include.md +21 -0
- data/lib/itsi/server/config/options/include.rb +41 -0
- data/lib/itsi/server/config/options/listen_backlog.md +11 -0
- data/lib/itsi/server/config/options/listen_backlog.rb +19 -0
- data/lib/itsi/server/config/options/log_format.md +18 -0
- data/lib/itsi/server/config/options/log_format.rb +19 -0
- data/lib/itsi/server/config/options/log_level.md +34 -0
- data/lib/itsi/server/config/options/log_level.rb +20 -0
- data/lib/itsi/server/config/options/log_target.md +38 -0
- data/lib/itsi/server/config/options/log_target.rb +19 -0
- data/lib/itsi/server/config/options/log_target_filters.md +17 -0
- data/lib/itsi/server/config/options/log_target_filters.rb +19 -0
- data/lib/itsi/server/config/options/multithreaded_reactor.md +27 -0
- data/lib/itsi/server/config/options/multithreaded_reactor.rb +24 -0
- data/lib/itsi/server/config/options/nodelay.md +16 -0
- data/lib/itsi/server/config/options/nodelay.rb +19 -0
- data/lib/itsi/server/config/options/oob_gc_responses_threshold.md +19 -0
- data/lib/itsi/server/config/options/oob_gc_responses_threshold.rb +18 -0
- data/lib/itsi/server/config/options/pin_worker_cores.md +17 -0
- data/lib/itsi/server/config/options/pin_worker_cores.rb +19 -0
- data/lib/itsi/server/config/options/pipeline_flush.md +16 -0
- data/lib/itsi/server/config/options/pipeline_flush.rb +19 -0
- data/lib/itsi/server/config/options/preload.md +21 -0
- data/lib/itsi/server/config/options/preload.rb +18 -0
- data/lib/itsi/server/config/options/recv_buffer_size.md +15 -0
- data/lib/itsi/server/config/options/recv_buffer_size.rb +19 -0
- data/lib/itsi/server/config/options/redirect_http_to_https.md +21 -0
- data/lib/itsi/server/config/options/redirect_http_to_https.rb +30 -0
- data/lib/itsi/server/config/options/request_timeout.md +23 -0
- data/lib/itsi/server/config/options/request_timeout.rb +19 -0
- data/lib/itsi/server/config/options/reuse_address.md +18 -0
- data/lib/itsi/server/config/options/reuse_address.rb +19 -0
- data/lib/itsi/server/config/options/reuse_port.md +18 -0
- data/lib/itsi/server/config/options/reuse_port.rb +17 -0
- data/lib/itsi/server/config/options/ruby_thread_request_backlog_size.md +18 -0
- data/lib/itsi/server/config/options/ruby_thread_request_backlog_size.rb +19 -0
- data/lib/itsi/server/config/options/scheduler_threads.md +41 -0
- data/lib/itsi/server/config/options/scheduler_threads.rb +17 -0
- data/lib/itsi/server/config/options/send_buffer_size.md +15 -0
- data/lib/itsi/server/config/options/send_buffer_size.rb +19 -0
- data/lib/itsi/server/config/options/shutdown_timeout.md +17 -0
- data/lib/itsi/server/config/options/shutdown_timeout.rb +19 -0
- data/lib/itsi/server/config/options/stream_body.md +32 -0
- data/lib/itsi/server/config/options/stream_body.rb +18 -0
- data/lib/itsi/server/config/options/threads.md +44 -0
- data/lib/itsi/server/config/options/threads.rb +17 -0
- data/lib/itsi/server/config/options/watch.md +16 -0
- data/lib/itsi/server/config/options/watch.rb +28 -0
- data/lib/itsi/server/config/options/worker_memory_limit.md +22 -0
- data/lib/itsi/server/config/options/worker_memory_limit.rb +18 -0
- data/lib/itsi/server/config/options/workers.md +42 -0
- data/lib/itsi/server/config/options/workers.rb +17 -0
- data/lib/itsi/server/config/options/writev.md +25 -0
- data/lib/itsi/server/config/options/writev.rb +19 -0
- data/lib/itsi/server/config/typed_struct.rb +239 -0
- data/lib/itsi/server/config.rb +321 -0
- data/lib/itsi/server/default_app/default_app.rb +34 -0
- data/lib/itsi/server/default_app/index.html +115 -0
- data/lib/itsi/server/default_config/Itsi.rb +108 -0
- data/lib/itsi/server/grpc/grpc_call.rb +247 -0
- data/lib/itsi/server/grpc/grpc_interface.rb +106 -0
- data/lib/itsi/server/grpc/reflection/v1/reflection_pb.rb +26 -0
- data/lib/itsi/server/grpc/reflection/v1/reflection_services_pb.rb +122 -0
- data/lib/itsi/server/native_extension.rb +34 -0
- data/lib/itsi/server/rack/handler/itsi.rb +29 -0
- data/lib/itsi/server/rack_interface.rb +109 -0
- data/lib/itsi/server/route_tester.rb +159 -0
- data/lib/itsi/server/scheduler_interface.rb +23 -0
- data/lib/itsi/server/scheduler_mode.rb +10 -0
- data/lib/itsi/server/signal_trap.rb +33 -0
- data/lib/itsi/server/typed_handlers/param_parser.rb +221 -0
- data/lib/itsi/server/typed_handlers/source_parser.rb +58 -0
- data/lib/itsi/server/typed_handlers.rb +25 -0
- data/lib/itsi/server/version.rb +7 -0
- data/lib/itsi/server.rb +288 -0
- data/lib/itsi/standard_headers.rb +86 -0
- data/lib/ruby_lsp/itsi/addon.rb +128 -0
- data/lib/shell_completions/completions.rb +26 -0
- 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 +569 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Log Target
|
|
3
|
+
url: /options/log_target
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Configures the target for logging. The default value is `:stdout`.
|
|
7
|
+
|
|
8
|
+
## Configuration
|
|
9
|
+
```ruby {filename=Itsi.rb}
|
|
10
|
+
log_target :stdout
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
```ruby {filename=Itsi.rb}
|
|
14
|
+
# Log to a file instead
|
|
15
|
+
log_target "my_app.log"
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
```ruby {filename=Itsi.rb}
|
|
19
|
+
# Log to both a file and the standard output (filename determined by ITSI_LOG_FILE)
|
|
20
|
+
log_target :both
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Options
|
|
24
|
+
| Option | Description |
|
|
25
|
+
|----------|-----------------------------------------------------------------------------|
|
|
26
|
+
| stdout | Logs are sent to the standard output (console). This is the default option. |
|
|
27
|
+
| [filename] | Logs are written to a specified file. |
|
|
28
|
+
| both | Logs are sent to both the standard output the default log file. |
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
## Environment Variables
|
|
32
|
+
You can also control the log target using environment variables.
|
|
33
|
+
If both are set, the value in the configuration file takes precedence.
|
|
34
|
+
|
|
35
|
+
| Variable | Description |
|
|
36
|
+
|------------|-----------------------------------------------------------------------------|
|
|
37
|
+
| ITSI_LOG_TARGET | Specifies the log target. Possible values are stdout, filename, or both. |
|
|
38
|
+
| ITSI_LOG_FILE | The name of the log file used by itsi. Default is `itsi-app.log`. |
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class LogTarget < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
log_target ${1|:stdout,:both,"./filename.log"|}
|
|
8
|
+
SNIPPET
|
|
9
|
+
|
|
10
|
+
detail "Specifies the target for logging. The default value is stdout."
|
|
11
|
+
|
|
12
|
+
schema do
|
|
13
|
+
(Type(String) & Or(Enum(%w[stdout file]), Type(String))).default('stdout')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Log Target Filters
|
|
3
|
+
url: /options/log_target_filters
|
|
4
|
+
---
|
|
5
|
+
Log target filters allow you fine-grained control over which log messages are enabled based on their level and source. This is configured using the `EnvFilter` syntax, which supports filtering by log level, module path, or a combination of both. Examples of valid filters include:
|
|
6
|
+
|
|
7
|
+
- `"middleware=debug"`: Enables `debug` level logs for the `middleware` module and its submodules.
|
|
8
|
+
- `"middleware::auth_jwt=trace"`: Enables `trace` level logs for a specific submodule.
|
|
9
|
+
- `"debug,middleware::auth_jwt=warn,middleware::rate_limit=info"`: Combines multiple filters, setting different log levels for different modules.
|
|
10
|
+
|
|
11
|
+
These filters provide fine-grained control over logging behavior, making it easier to focus on relevant information during debugging or monitoring.
|
|
12
|
+
Configures the size of the listen backlog for the socket. Larger backlog sizes can improve performance for high-throughput applications by allowing more pending connections to queue, but may increase memory usage. The default value is 1024.
|
|
13
|
+
|
|
14
|
+
## Configuration
|
|
15
|
+
```ruby {filename=Itsi.rb}
|
|
16
|
+
log_target_filters ["middleware=debug", "middleware::rate_limit=trace"]
|
|
17
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class LogTargetFilters < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
log_target_filters ${1|[],%w[middleware=debug middleware::rate_limit=trace]|}
|
|
8
|
+
SNIPPET
|
|
9
|
+
|
|
10
|
+
detail "Specifies the fine-grained target filters for logging. E.g.log_target_filters [\"middleware=debug\", \"middleware::rate_limit=trace\"]."
|
|
11
|
+
|
|
12
|
+
schema do
|
|
13
|
+
(Type(Array) & Required()).default([])
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Multithreaded Reactor
|
|
3
|
+
url: /options/multithreaded_reactor
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Configures whether the Tokio reactor should run in multithreaded mode.
|
|
7
|
+
|
|
8
|
+
Itsi will attempt to intelligently determine this config value by default, by enabling it in single mode, and disabling it in cluster-mode (where attempting to utilize multiple cores via both multi-threaded reactor and multi-worker is generally less efficient, not recommended).
|
|
9
|
+
however you can use this option to override it.
|
|
10
|
+
|
|
11
|
+
## Options
|
|
12
|
+
|Option | Description |
|
|
13
|
+
|-------|-------------|
|
|
14
|
+
| `true` | Enable multithreaded reactor |
|
|
15
|
+
| `false` | Disable multithreaded reactor |
|
|
16
|
+
| `:auto` | Automatically determine based on mode |
|
|
17
|
+
|
|
18
|
+
### Default
|
|
19
|
+
|
|
20
|
+
```ruby {filename=Itsi.rb}
|
|
21
|
+
multithreaded_reactor :auto # Default. Will result in true if running in single mode, false if running in multi mode.
|
|
22
|
+
```
|
|
23
|
+
### Example
|
|
24
|
+
|
|
25
|
+
```ruby {filename=Itsi.rb}
|
|
26
|
+
multithreaded_reactor true
|
|
27
|
+
```
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class MultithreadedReactor < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
multithreaded_reactor ${1|:auto,true,false|}
|
|
8
|
+
SNIPPET
|
|
9
|
+
|
|
10
|
+
detail "Configures whether the server should use a multithreaded reactor."
|
|
11
|
+
|
|
12
|
+
schema do
|
|
13
|
+
(Or(Bool(), Enum([:auto])) & Required()).default(:auto) # Default 5 seconds
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def initialize(location, value)
|
|
17
|
+
value = nil if value == :auto
|
|
18
|
+
super
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Nodelay
|
|
3
|
+
url: /options/nodelay
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Configures whether the server should enable the `TCP_NODELAY` option on the underlying socket.
|
|
7
|
+
This option determines whether the Nagle's algorithm is disabled, allowing small packets of data to be sent immediately without waiting for more data to fill the packet.
|
|
8
|
+
|
|
9
|
+
## Configuration
|
|
10
|
+
```ruby {filename=Itsi.rb}
|
|
11
|
+
nodelay true
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
```ruby {filename=Itsi.rb}
|
|
15
|
+
nodelay false
|
|
16
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class Nodelay < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
nodelay ${1|true,false|}
|
|
8
|
+
SNIPPET
|
|
9
|
+
|
|
10
|
+
detail "Configures whether the server should set the nodelay option on the underlying socket."
|
|
11
|
+
|
|
12
|
+
schema do
|
|
13
|
+
(Bool() & Required()).default(true)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: OOB GC
|
|
3
|
+
url: /options/oob_gc
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The **OOB GC Response Threshold** sets the threshold at which the Ruby GC should be triggered during periods where there is a gap in queued requests.
|
|
7
|
+
|
|
8
|
+
## Configuration File
|
|
9
|
+
|
|
10
|
+
### Examples
|
|
11
|
+
|
|
12
|
+
```ruby {filename="Itsi.rb"}
|
|
13
|
+
oob_gc_response_threshold 1000 # Trigger GC every 1000 pauses/gaps
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
{{< callout >}}
|
|
18
|
+
Settings this too aggressively can seriously impact performance. It's recommended to start with a relatively high value and then adjust based on your application's specific needs and performance characteristics.
|
|
19
|
+
{{< /callout >}}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class OobGcResponsesThreshold < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
oob_gc_responses_threshold ${1|128,256,512,1024|} # Trigger GC every N gaps in the request queue.
|
|
8
|
+
SNIPPET
|
|
9
|
+
|
|
10
|
+
detail "Sets the threshold for the number of request queue pauses, before triggering garbage collection."
|
|
11
|
+
|
|
12
|
+
schema do
|
|
13
|
+
Type(Integer) & Required()
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Pin Worker Cores
|
|
3
|
+
url: /options/pin_worker_cores
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Sets whether worker processes should attempt to pin to a single CPU core.
|
|
7
|
+
|
|
8
|
+
### Default
|
|
9
|
+
|
|
10
|
+
```ruby {filename=Itsi.rb}
|
|
11
|
+
pin_worker_cores true
|
|
12
|
+
```
|
|
13
|
+
### Example
|
|
14
|
+
|
|
15
|
+
```ruby {filename=Itsi.rb}
|
|
16
|
+
pin_worker_cores false
|
|
17
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class ShutdownTimeout < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
shutdown_timeout 5.0 # Shutdown Timeout in Seconds
|
|
8
|
+
SNIPPET
|
|
9
|
+
|
|
10
|
+
detail "Sets the timeout for graceful shutdown of the server."
|
|
11
|
+
|
|
12
|
+
schema do
|
|
13
|
+
(Type(Float) & Required()).default(5.0) # Default 5 seconds
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Pipeline Flush
|
|
3
|
+
url: /options/pipeline_flush
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Aggregates flushes to better support pipelined responses. (HTTP1 only)
|
|
7
|
+
The default value is `false`.
|
|
8
|
+
|
|
9
|
+
## Configuration
|
|
10
|
+
```ruby {filename=Itsi.rb}
|
|
11
|
+
pipeline_flush true
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
```ruby {filename=Itsi.rb}
|
|
15
|
+
pipeline_flush false
|
|
16
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class PipelineFlush < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
pipeline_flush ${1|true,false|}
|
|
8
|
+
SNIPPET
|
|
9
|
+
|
|
10
|
+
detail "Aggregates flushes to better support pipelined responses. (HTTP1 only)."
|
|
11
|
+
|
|
12
|
+
schema do
|
|
13
|
+
(Bool() & Required()).default(false)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Preload
|
|
3
|
+
url: /options/preload
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The **preload** option controls whether your application code and middleware are loaded into memory **before** forking worker processes. Preloading can improve request‑handling performance (thanks to copy‑on‑write memory sharing and avoiding per‑worker load time), but it also increases the master process’s memory footprint and startup time. In **single‑worker** mode (`workers 1`), `preload` is ignored.
|
|
7
|
+
|
|
8
|
+
## Configuration File
|
|
9
|
+
|
|
10
|
+
```ruby
|
|
11
|
+
# Load everything in the master process before forking
|
|
12
|
+
preload true
|
|
13
|
+
|
|
14
|
+
# Only preload the gems in the named Gemfile group (e.g. :assets)
|
|
15
|
+
preload :assets
|
|
16
|
+
# Only preload the gems in the named Gemfile group (e.g. :preload)
|
|
17
|
+
preload :preload
|
|
18
|
+
|
|
19
|
+
# Do not preload (load after forking in each worker)
|
|
20
|
+
preload false
|
|
21
|
+
```
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class Preload < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
preload ${1|true,false,:preload|} # Preload
|
|
8
|
+
SNIPPET
|
|
9
|
+
|
|
10
|
+
detail "Configures whether all apps and middleware are preloaded before forking, just specific gem groups, or nothing. Has no effect if running in single mode."
|
|
11
|
+
|
|
12
|
+
schema do
|
|
13
|
+
Or(Bool(), Type(Symbol)).default(false)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Receive Buffer Size
|
|
3
|
+
url: /options/recv_buffer_size
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Configures the size of the receive 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.
|
|
7
|
+
|
|
8
|
+
## Configuration
|
|
9
|
+
```ruby {filename=Itsi.rb}
|
|
10
|
+
recv_buffer_size 262_144
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
```ruby {filename=Itsi.rb}
|
|
14
|
+
recv_buffer_size 1_048_576
|
|
15
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class RecvBufferSize < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
recv_buffer_size ${1|262_144,1_048_576|}
|
|
8
|
+
SNIPPET
|
|
9
|
+
|
|
10
|
+
detail "Specifies the size of the receive 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
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Redirect HTTP to HTTPS
|
|
3
|
+
url: /options/redirect_http_to_https
|
|
4
|
+
---
|
|
5
|
+
This simple option installs a location block to redirect all HTTP traffic to HTTPS.
|
|
6
|
+
|
|
7
|
+
```ruby {filename=Itsi.rb}
|
|
8
|
+
redirect_http_to_https!
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
It is an alias for:
|
|
12
|
+
```ruby
|
|
13
|
+
location protocols: [:http] do
|
|
14
|
+
redirect \
|
|
15
|
+
to: "https://{host}{path_and_query}", \
|
|
16
|
+
type: "moved_permanently"
|
|
17
|
+
end
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
It is subject to ordinary [location](/middleware/location) resolution rules.
|
|
21
|
+
To make sure this rule takes precedence, place it *above* other locations in the `Itsi.rb` file
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class RedirectHttpToHttps < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
redirect_http_to_https! # Install a location block to redirect HTTP to HTTPS
|
|
8
|
+
# (Only works if listening on ports 443 and 80).
|
|
9
|
+
# For non-conventional or development ports use a manual redirect
|
|
10
|
+
SNIPPET
|
|
11
|
+
|
|
12
|
+
detail "Install a location block to redirect HTTP to HTTPS."
|
|
13
|
+
|
|
14
|
+
def self.option_name
|
|
15
|
+
:redirect_http_to_https!
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def build!
|
|
19
|
+
location.instance_eval do
|
|
20
|
+
location protocols: [:http] do
|
|
21
|
+
redirect \
|
|
22
|
+
to: "https://{host}{path_and_query}", \
|
|
23
|
+
type: "moved_permanently"
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Request Timeout
|
|
3
|
+
url: /options/request_timeout
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Sets the maximum duration (in seconds) allowed for the entire request to complete. If exceeded, the request will be terminated.
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Default
|
|
10
|
+
|
|
11
|
+
```ruby {filename=Itsi.rb}
|
|
12
|
+
request_timeout 300 # 5 minutes
|
|
13
|
+
```
|
|
14
|
+
### Example
|
|
15
|
+
|
|
16
|
+
```ruby {filename=Itsi.rb}
|
|
17
|
+
request_timeout 60 # 1 minute
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
{{< callout type="warn" >}}
|
|
22
|
+
If the request is held-up inside a Ruby worker, the worker will be gracefully restarted (as killing in-progress threads is not safe).
|
|
23
|
+
{{< /callout >}}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class RequestTimeout < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
request_timeout 300.0 # Request Timeout in Seconds
|
|
8
|
+
SNIPPET
|
|
9
|
+
|
|
10
|
+
detail "Set Request Timeout"
|
|
11
|
+
|
|
12
|
+
schema do
|
|
13
|
+
(Type(Float) & Required()).default(300.0) # Default 5 minutes
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Reuse Address
|
|
3
|
+
url: /options/reuse_address
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Configures whether the server should bind to the underlying socket using the `SO_REUSEADDR` option.
|
|
7
|
+
This option determines whether the server allows the reuse of local addresses during binding. This can be useful in scenarios where a socket needs to be quickly rebound without waiting for the operating system to release the address.
|
|
8
|
+
|
|
9
|
+
The default value is `false`.
|
|
10
|
+
|
|
11
|
+
## Configuration
|
|
12
|
+
```ruby {filename=Itsi.rb}
|
|
13
|
+
reuse_address true
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
```ruby {filename=Itsi.rb}
|
|
17
|
+
reuse_address false
|
|
18
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class ReuseAddress < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
reuse_address ${1|true,false|}
|
|
8
|
+
SNIPPET
|
|
9
|
+
|
|
10
|
+
detail "Configures whether the server should set the reuse_address option on the underlying socket."
|
|
11
|
+
|
|
12
|
+
schema do
|
|
13
|
+
(Bool() & Required()).default(false)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Reuse Port
|
|
3
|
+
url: /options/reuse_port
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Configures whether the server should bind to the underlying socket using the `SO_REUSEPORT` option.
|
|
7
|
+
This option determines whether multiple sockets can listen on the same IP and port combination, which can improve load balancing and fault tolerance in multi-threaded or multi-process server applications.
|
|
8
|
+
|
|
9
|
+
The default value is `false`.
|
|
10
|
+
|
|
11
|
+
## Configuration
|
|
12
|
+
```ruby {filename=Itsi.rb}
|
|
13
|
+
reuse_port true
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
```ruby {filename=Itsi.rb}
|
|
17
|
+
reuse_port false
|
|
18
|
+
```
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class ReusePort < Option
|
|
5
|
+
insert_text <<~SNIPPET
|
|
6
|
+
reuse_port ${1|true,false|}
|
|
7
|
+
SNIPPET
|
|
8
|
+
|
|
9
|
+
detail "Configures whether the server should set the reuse_port option on the underlying socket."
|
|
10
|
+
|
|
11
|
+
schema do
|
|
12
|
+
(Bool() & Required()).default(true)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Ruby Thread Request Backlog Size
|
|
3
|
+
url: /options/ruby_thread_request_backlog_size
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Configures the size of the backlog queue for incoming requests in the Ruby thread pool.
|
|
7
|
+
Up to this many requests can be queued at once before the server rejects further requests to Ruby workers (note this does not block other requests to proxied hosts or for static assets).
|
|
8
|
+
|
|
9
|
+
The default value is `30 x number of threads`.
|
|
10
|
+
|
|
11
|
+
## Configuration
|
|
12
|
+
```ruby {filename=Itsi.rb}
|
|
13
|
+
ruby_thread_request_backlog_size 20
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
```ruby {filename=Itsi.rb}
|
|
17
|
+
ruby_thread_request_backlog_size 100
|
|
18
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class RubyThreadRequestBacklogSize < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
ruby_thread_request_backlog_size ${1|10,25,50,100|}
|
|
8
|
+
SNIPPET
|
|
9
|
+
|
|
10
|
+
detail "The maximum number of requests that can be queued for processing by the Ruby thread."
|
|
11
|
+
|
|
12
|
+
schema do
|
|
13
|
+
(Type(Integer)).default(nil)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Scheduler Threads
|
|
3
|
+
url: /options/scheduler_threads
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
You can explicitly spawn a pool of non-blocking scheduler threads and divide work across traditional/blocking and non-blocking threads, using [location](/middleware/location) blocks.
|
|
7
|
+
|
|
8
|
+
This allows you to safely dip your toes into using non-blocking threads for specific I/O heavy operations without having to port an entire application to non-blocking I/O.
|
|
9
|
+
|
|
10
|
+
To use blocking and non-blocking threads in conjunction you need to perform several steps.
|
|
11
|
+
1. Configure a thread pool using [threads](/middleware/threads)
|
|
12
|
+
2. Configure a **separate** non-blocking thread pool using [scheduler_threads](/middleware/scheduler_threads) (By opting into this option you automatically make the ordinary thread pool blocking)
|
|
13
|
+
3. Enable a [fiber_scheduler](/options/fiber_scheduler)
|
|
14
|
+
4. Mount your app as non-blocking for selected routes. (Using either [run](/middleware/run), [rackup_file](/middleware/rackup_file) or [endpoint](/middleware/endpoint))
|
|
15
|
+
|
|
16
|
+
## Configuration
|
|
17
|
+
Here is an example configuration of the all of the above E.g.
|
|
18
|
+
|
|
19
|
+
```ruby {filename=Itsi.rb}
|
|
20
|
+
|
|
21
|
+
threads 3 # 3 threads (opting into scheduler threads make these blocking)
|
|
22
|
+
scheduler_threads 1 # 1 non-blocking scheduler thread
|
|
23
|
+
fiber_scheduler true
|
|
24
|
+
|
|
25
|
+
# We mount the same app *twice*.
|
|
26
|
+
# For a specific route prefix, all requests will be sent to non blocking threads.
|
|
27
|
+
# All others fall through to the default mount
|
|
28
|
+
|
|
29
|
+
location "/heavy_io/*" do
|
|
30
|
+
# You can optionally use the `script_name: ""` option here to set the base path for the mounted app (useful if a nested app
|
|
31
|
+
# should still serve requests as if it was mounted at the root).
|
|
32
|
+
# Otherwise it will infer the script-name based on the parent location block.
|
|
33
|
+
rackup_file "./config.ru", nonblocking: true
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
rackup_file "./config.ru"
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
## Examples.
|
|
40
|
+
|
|
41
|
+
See [a code example](https://github.com/wouterken/itsi/tree/main/examples/hybrid_scheduler_mode) in the Git repository.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class SchedulerThreads < Option
|
|
5
|
+
|
|
6
|
+
insert_text "scheduler_threads ${1|1,2,Etc.nprocessors|} # Number of non-blocking scheduler threads to run per worker"
|
|
7
|
+
|
|
8
|
+
detail "Number of non-blocking scheduler threads to run per worker"
|
|
9
|
+
|
|
10
|
+
schema do
|
|
11
|
+
Range(1..255)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|