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,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: TLS Certificates
|
|
3
|
+
url: /options/certificates
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Itsi can automatically generate TLS certificates for you, both in development and production environments.
|
|
7
|
+
|
|
8
|
+
## Development / Self-signed
|
|
9
|
+
To automatically generate a TLS certificate in development, just bind using the `https` scheme.
|
|
10
|
+
E.g.
|
|
11
|
+
```ruby {filename=Itsi.rb}
|
|
12
|
+
bind "https://0.0.0.0"
|
|
13
|
+
|
|
14
|
+
or
|
|
15
|
+
|
|
16
|
+
bind "https://0.0.0.0:8443"
|
|
17
|
+
```
|
|
18
|
+
Itsi will generate a local development CA for you if it does not yet exist, then use this to
|
|
19
|
+
sign a just-in-time certificate for your server.
|
|
20
|
+
The local CA will by default live inside a `.itsi` directory inside your home directory.
|
|
21
|
+
This directory can be overwritten using the `ITSI_LOCAL_CA_DIR` environment variable.
|
|
22
|
+
|
|
23
|
+
You can add this CA to your system's trusted certificate store to avoid browser warnings in development.
|
|
24
|
+
|
|
25
|
+
If you want the generated certificate to be valid for specific domains, you can add these to your bind string, and they will be added as subject alternative names (SANs). For example:
|
|
26
|
+
|
|
27
|
+
```ruby {filename=Itsi.rb}
|
|
28
|
+
bind "https://example.com?domains=development.example.com,development.example.org"
|
|
29
|
+
```
|
|
30
|
+
## Existing Certificates
|
|
31
|
+
If you already have a certificate and key, you can use them by passing the path to the certificate and key files to the `bind` method.
|
|
32
|
+
E.g.
|
|
33
|
+
```ruby {filename=Itsi.rb}
|
|
34
|
+
bind "https://example.com?cert=/path/to/cert.pem&key=/path/to/key.pem"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Production Certificates (Let's Encrypt)
|
|
38
|
+
If you want to use Let's Encrypt to automatically generate a production TLS certificate, you can add `cert=acme` to the bind string.
|
|
39
|
+
|
|
40
|
+
E.g.
|
|
41
|
+
```ruby {filename=Itsi.rb}
|
|
42
|
+
bind "https://0.0.0.0?cert=acme&domains=example.com,example.org&acme_email=you@example.com"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
You can provide several ENV variables to configure further configure the Let's Encrypt integration:
|
|
46
|
+
- `ITSI_ACME_CACHE_DIR`: The directory to use to cache Let's encrypt certificates (so that these are not regenerated each time the server is restarted).
|
|
47
|
+
- `ITSI_ACME_CONTACT_EMAIL`: The email address to use for Let's Encrypt account registration (overridden by the `acme_email` parameter).
|
|
48
|
+
- `ITSI_ACME_CA_PEM_PATH`: Optional CA Pem path, used for testing with non-trusted CAs for certifcate generation (e.g. pebble)
|
|
49
|
+
- `ITSI_ACME_DIRECTORY_URL`: Override the ACME directory URL (e.g. https://acme-staging-v02.api.letsencrypt.org/directory).
|
|
50
|
+
|
|
51
|
+
{{< callout type="info" >}}
|
|
52
|
+
Let's Encrypt enforces strict rate limits on production certificate generation. To verify that your configuration is correct, it's recommended to test it first using the staging directory URL. E.g.
|
|
53
|
+
`ITSI_ACME_DIRECTORY_URL=https://acme-staging-v02.api.letsencrypt.org/directory`
|
|
54
|
+
{{< /callout >}}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
{{< callout type="warn" >}}
|
|
58
|
+
Currently only the TLS-ALPN-01 challenge type is supported for automated certificates.
|
|
59
|
+
The HTTP-01 challenge is not *yet* supported. This means that, for e.g. if your server is sitting behind a CDN or reverse proxy that performs HTTPS termination, you will not be able to rely on the *automated* certificate generation for fully automated, verified e2e encryption.
|
|
60
|
+
|
|
61
|
+
Instead you may wish to use:
|
|
62
|
+
* [Self-signed](#development--self-signed) certificates
|
|
63
|
+
* [Manually](#existing-certificates) install certificates
|
|
64
|
+
* Use HTTP between the CDN and the server
|
|
65
|
+
{{< /callout >}}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Daemonize
|
|
3
|
+
url: /options/daemonize
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
If you set `daemonize` to true, the server will run in the background.
|
|
7
|
+
(Setting `daemonize` back to false, while auto-reloading config will not return the service to the foreground).
|
|
8
|
+
|
|
9
|
+
## Configuration
|
|
10
|
+
```ruby {filename=Itsi.rb}
|
|
11
|
+
daemonize true
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Use `status`, `start` and `stop` to inspect server state.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class Daemonize < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
daemonize ${1|true,false|}
|
|
8
|
+
SNIPPET
|
|
9
|
+
|
|
10
|
+
detail "Configures whether the server should run in the background."
|
|
11
|
+
|
|
12
|
+
schema do
|
|
13
|
+
(Bool() & Required())
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Fiber Scheduler
|
|
3
|
+
url: /options/fiber_scheduler
|
|
4
|
+
---
|
|
5
|
+
Itsi supports processing requests in threads that are managed by a fiber scheduler.
|
|
6
|
+
This allows Itsi to process a very large number of IO heavy requests concurrently without the memory and context switching overhead of managing multiple threads.
|
|
7
|
+
|
|
8
|
+
Enabling Fiber Scheduler mode can drastically improve application performance if you perform large amounts of blocking IO operations.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
## Configuration File
|
|
12
|
+
```ruby {filename="Itsi.rb"}
|
|
13
|
+
# Enable Itsi's fiber scheduler mode
|
|
14
|
+
# (This will use an instance of `Itsi::Scheduler`
|
|
15
|
+
# This is Itsi's built in Fiber scheduler.)
|
|
16
|
+
fiber_scheduler true
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```ruby {filename="Itsi.rb"}
|
|
20
|
+
# In the spirit of the Fiber::Scheduler interface,
|
|
21
|
+
# you can bring your own scheduler!.
|
|
22
|
+
# E.g. using the scheduler from the popular Async library.
|
|
23
|
+
fiber_scheduler "Async::Scheduler"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
{{< callout type="warning" >}}
|
|
27
|
+
Running in Fiber scheduler mode can be a huge performance boon, but it's not without tradeoffs. Because it enables drastically more in-flight requests,
|
|
28
|
+
it can have a substantial impact on memory usage. Similarly, it can increase the amount of simultaneous demand on pooled resources (like database connections or network sockets)
|
|
29
|
+
and can cause increased contention on shared locks.
|
|
30
|
+
|
|
31
|
+
While well-tuned Fiber based servers can drastically outperform their blocking counterparts in some scenarios, the above compromises can make it an unsafe blanket choice, particularly for some large applications with dependencies not specifically designed for a cooperative multitasking environment.
|
|
32
|
+
|
|
33
|
+
To see Itsi's recommended approach to enjoying the benefits of a Fiber scheduler while managing these risks, consider using Itsi's [hybrid mode](/options/scheduler_threads).
|
|
34
|
+
{{< /callout >}}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class FiberScheduler < Option
|
|
5
|
+
|
|
6
|
+
insert_text "fiber_scheduler ${1|true,'Itsi::Scheduler'|} # Enable Fiber Scheduler mode"
|
|
7
|
+
|
|
8
|
+
detail "Enable Fiber Scheduler mode"
|
|
9
|
+
|
|
10
|
+
schema do
|
|
11
|
+
Or(Bool(), (Type(String) & Required()))
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def build!
|
|
15
|
+
@params = "Itsi::Scheduler" if @params == true
|
|
16
|
+
location.options[:scheduler_class] = @params if @params
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Header Read Timeout
|
|
3
|
+
url: /options/header_read_timeout
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Sets the maximum time (in seconds) allowed to receive the request headers. This protects against slowloris-style attacks.
|
|
7
|
+
|
|
8
|
+
### Default
|
|
9
|
+
|
|
10
|
+
```ruby {filename=Itsi.rb}
|
|
11
|
+
header_read_timeout 2.0
|
|
12
|
+
```
|
|
13
|
+
### Example
|
|
14
|
+
|
|
15
|
+
```ruby {filename=Itsi.rb}
|
|
16
|
+
header_read_timeout 5.0
|
|
17
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class HeaderReadTimeout < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
header_read_timeout 2.0 # Request Timeout in Seconds
|
|
8
|
+
SNIPPET
|
|
9
|
+
|
|
10
|
+
detail "Header read timeout."
|
|
11
|
+
|
|
12
|
+
schema do
|
|
13
|
+
(Type(Float) & Required()).default(2.0) # Default 1 second
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Hooks
|
|
3
|
+
url: /options/hooks
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
* [after_fork](/options/after_fork)
|
|
7
|
+
* [after_memory_limit_reached](/options/after_memory_limit_reached)
|
|
8
|
+
* [after_start](/options/after_start)
|
|
9
|
+
* [before_fork](/options/before_fork)
|
|
10
|
+
* [before_restart](/options/before_restart)
|
|
11
|
+
* [before_shutdown](/options/before_shutdown)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: After Fork
|
|
3
|
+
url: /options/after_fork
|
|
4
|
+
parent: /options/after_fork
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
The **after_fork** hook runs once **in each worker process** immediately after it is forked. Use it to reinitialize connections (DB, cache) that shouldn't be shared across forks.
|
|
8
|
+
|
|
9
|
+
```ruby {filename=Itsi.rb}
|
|
10
|
+
after_fork do
|
|
11
|
+
DB.reconnect!
|
|
12
|
+
end
|
|
13
|
+
```
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class AfterFork < Option
|
|
5
|
+
insert_text <<~SNIPPET
|
|
6
|
+
after_fork do
|
|
7
|
+
${1:# code to run after worker forks}
|
|
8
|
+
end
|
|
9
|
+
SNIPPET
|
|
10
|
+
|
|
11
|
+
detail "Run code after worker forks"
|
|
12
|
+
|
|
13
|
+
schema do
|
|
14
|
+
(Type(Proc) & Required())
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def initialize(location, ¶ms)
|
|
18
|
+
super(location, params)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def build!
|
|
22
|
+
location.options[:hooks] ||= {}
|
|
23
|
+
location.options[:hooks][:after_fork] = @params
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: After Memory Limit Reached
|
|
3
|
+
url: /options/after_memory_limit_reached
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The **after_memory_limit_reached** hook fires whenever a worker’s RSS memory usage exceeds a configured limit. It passes the PID of the process so you can log, alert, or take corrective action.
|
|
7
|
+
|
|
8
|
+
This option works in conjunction with the [worker_memory_limit](/options/worker_memory_limit).
|
|
9
|
+
|
|
10
|
+
```ruby {filename=Itsi.rb}
|
|
11
|
+
after_memory_limit_reached do |pid|
|
|
12
|
+
AlertService.notify("Worker #{pid} memory exceeded limit")
|
|
13
|
+
end
|
|
14
|
+
```
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class AfterMemoryLimitReached < Option
|
|
5
|
+
insert_text <<~SNIPPET
|
|
6
|
+
after_memory_limit_reached do |pid|
|
|
7
|
+
${1:# code to run when memory threshold is exceeded}
|
|
8
|
+
end
|
|
9
|
+
SNIPPET
|
|
10
|
+
|
|
11
|
+
detail "Run code in a worker after its memory usage exceeds the configured threshold."
|
|
12
|
+
|
|
13
|
+
schema do
|
|
14
|
+
(Type(Proc) & Required())
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def initialize(location, ¶ms)
|
|
18
|
+
super(location, params)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def build!
|
|
22
|
+
location.options[:hooks] ||= {}
|
|
23
|
+
location.options[:hooks][:after_memory_threshold_reached] = @params
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class AfterStart < Option
|
|
5
|
+
insert_text <<~SNIPPET
|
|
6
|
+
after_start do
|
|
7
|
+
${1:# code to run after worker starts}
|
|
8
|
+
end
|
|
9
|
+
SNIPPET
|
|
10
|
+
|
|
11
|
+
detail "Run code after worker starts"
|
|
12
|
+
|
|
13
|
+
schema do
|
|
14
|
+
(Type(Proc) & Required())
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def initialize(location, ¶ms)
|
|
18
|
+
super(location, params)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def build!
|
|
22
|
+
location.options[:hooks] ||= {}
|
|
23
|
+
location.options[:hooks][:after_start] = @params
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Before Fork
|
|
3
|
+
url: /options/before_fork
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The **before_fork** hook runs once in the master process **before** any worker processes are spawned. Use it to preload resources, open shared connections, or otherwise prepare global state.
|
|
7
|
+
|
|
8
|
+
```ruby {filename=Itsi.rb}
|
|
9
|
+
before_fork do
|
|
10
|
+
# this runs in the master, once before forking
|
|
11
|
+
MyCache.connect!(url: ENV["CACHE_URL"])
|
|
12
|
+
end
|
|
13
|
+
```
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class BeforeFork < Option
|
|
5
|
+
insert_text <<~SNIPPET
|
|
6
|
+
before_fork do
|
|
7
|
+
${1:# code to run before worker forks}
|
|
8
|
+
end
|
|
9
|
+
SNIPPET
|
|
10
|
+
|
|
11
|
+
detail "Run code before worker forks"
|
|
12
|
+
|
|
13
|
+
schema do
|
|
14
|
+
(Type(Proc) & Required())
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def initialize(location, ¶ms)
|
|
18
|
+
super(location, params)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def build!
|
|
22
|
+
location.options[:hooks] ||= {}
|
|
23
|
+
location.options[:hooks][:before_fork] = @params
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Before Restart
|
|
3
|
+
url: /options/before_restart
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The **before_restart** hook runs once right before the server restarts after receiving a restart signal.
|
|
7
|
+
|
|
8
|
+
```ruby {filename=Itsi.rb}
|
|
9
|
+
before_restart do
|
|
10
|
+
# this runs once before restarting
|
|
11
|
+
end
|
|
12
|
+
```
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class BeforeRestart < Option
|
|
5
|
+
insert_text <<~SNIPPET
|
|
6
|
+
before_restart do
|
|
7
|
+
${1:# code to run before worker restarts}
|
|
8
|
+
end
|
|
9
|
+
SNIPPET
|
|
10
|
+
|
|
11
|
+
detail "Run code before worker restarts"
|
|
12
|
+
|
|
13
|
+
schema do
|
|
14
|
+
(Type(Proc) & Required())
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def initialize(location, ¶ms)
|
|
18
|
+
super(location, params)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def build!
|
|
22
|
+
location.options[:hooks] ||= {}
|
|
23
|
+
location.options[:hooks][:before_restart] = @params
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Before Shutdown
|
|
3
|
+
url: /options/before_shutdown
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The **before_shutdown** hook runs once in the master process **before** the process shuts down.
|
|
7
|
+
|
|
8
|
+
```ruby {filename=Itsi.rb}
|
|
9
|
+
before_shutdown do
|
|
10
|
+
# this runs in the master, once before shutdown
|
|
11
|
+
end
|
|
12
|
+
```
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class BeforeShutdown < Option
|
|
5
|
+
insert_text <<~SNIPPET
|
|
6
|
+
before_shutdown do
|
|
7
|
+
${1:# code to run before worker shuts down}
|
|
8
|
+
end
|
|
9
|
+
SNIPPET
|
|
10
|
+
|
|
11
|
+
detail "Run code before worker shuts down"
|
|
12
|
+
|
|
13
|
+
schema do
|
|
14
|
+
(Type(Proc) & Required())
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def initialize(location, ¶ms)
|
|
18
|
+
super(location, params)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def build!
|
|
22
|
+
location.options[:hooks] ||= {}
|
|
23
|
+
location.options[:hooks][:before_shutdown] = @params
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Include
|
|
3
|
+
url: /options/include
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the `include` option to load additional files to be evaluated within the current configuration context.
|
|
7
|
+
You can use this option to split a large configuration file into multiple smaller files.
|
|
8
|
+
|
|
9
|
+
Files required using `include` are also subject to auto-reloading, when using the [auto_reload_config](/options/auto_reload_config) option.
|
|
10
|
+
The path of the included file is evaluated relative to the current configuration file.
|
|
11
|
+
|
|
12
|
+
## Examples
|
|
13
|
+
```ruby {filename="Itsi.rb"}
|
|
14
|
+
include "middleware"
|
|
15
|
+
include "logging"
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
```ruby {filename="Itsi.rb"}
|
|
19
|
+
include "concurrency"
|
|
20
|
+
include "security"
|
|
21
|
+
```
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class Include < Option
|
|
5
|
+
insert_text "include \"${1|other_file|}\" # Include another file to be loaded within the current configuration"
|
|
6
|
+
|
|
7
|
+
detail "Include another file to be loaded within the current configuration"
|
|
8
|
+
|
|
9
|
+
schema do
|
|
10
|
+
Type(String) & Required()
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def build!
|
|
14
|
+
caller_location = caller_locations(2, 1).first.path
|
|
15
|
+
included_file = \
|
|
16
|
+
if caller_location =~ %r{lib/itsi/server}
|
|
17
|
+
File.expand_path("#{@params}.rb")
|
|
18
|
+
else
|
|
19
|
+
File.expand_path("#{@params}.rb", File.dirname(caller_location))
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
location.instance_eval do
|
|
23
|
+
@included ||= []
|
|
24
|
+
@included << included_file
|
|
25
|
+
|
|
26
|
+
if @auto_reloading
|
|
27
|
+
if ENV["BUNDLE_BIN_PATH"]
|
|
28
|
+
watch "#{included_file}", [%w[bundle exec itsi restart]]
|
|
29
|
+
else
|
|
30
|
+
watch "#{included_file}", [%w[itsi restart]]
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
code = IO.read(included_file)
|
|
36
|
+
location.instance_eval(code, included_file, 1)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Listen Backlog
|
|
3
|
+
url: /options/listen_backlog
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
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.
|
|
7
|
+
|
|
8
|
+
## Configuration
|
|
9
|
+
```ruby {filename=Itsi.rb}
|
|
10
|
+
listen_backlog 1024
|
|
11
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class ListenBacklog < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
listen_backlog ${1|1024,2048,4096|}
|
|
8
|
+
SNIPPET
|
|
9
|
+
|
|
10
|
+
detail "Specifies 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."
|
|
11
|
+
|
|
12
|
+
schema do
|
|
13
|
+
(Type(Integer) & Range(1..Float::INFINITY) & Required()).default(1024)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Log Format
|
|
3
|
+
url: /options/log_format
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The `log_format` option toggles between JSON and plain text logging formats. By default, it is set to plain-text. For logging structured data into an external system, it is usually recommended to use the `JSON` format.
|
|
7
|
+
|
|
8
|
+
## Configuration
|
|
9
|
+
```ruby {filename=Itsi.rb}
|
|
10
|
+
log_format :plain
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Environment Variables
|
|
14
|
+
You can also set the `ITSI_LOG_FORMAT` environment variable to `json` or `plain` to control
|
|
15
|
+
this. If both are set, the configuration takes precedence.
|
|
16
|
+
|
|
17
|
+
## ANSI Escape codes.
|
|
18
|
+
By default Itsi tries to determine whether or not to use ANSI escape codes based on the output [target](/options/log_target). If you need to override this behavior, you can set the `ITSI_LOG_ANSI` environment variable to `true` or `false`.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class LogFormat < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
log_format :${1|json,plain|}
|
|
8
|
+
SNIPPET
|
|
9
|
+
|
|
10
|
+
detail "This option configures the log format for the server (json/plain)."
|
|
11
|
+
|
|
12
|
+
schema do
|
|
13
|
+
(Enum([:json, :plain]) & Required()).default(:json)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Log Level
|
|
3
|
+
url: /options/log_level
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The `log_level` option allows you to control the verbosity of the logs. By default, it is set to `info`.
|
|
7
|
+
Valid values are `trace`, `debug`, `info`, `warn`, `error`, and `off`.
|
|
8
|
+
|
|
9
|
+
## Configuration
|
|
10
|
+
```ruby {filename=Itsi.rb}
|
|
11
|
+
log_level :debug
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Environment Variables
|
|
15
|
+
You can also set the `ITSI_LOG` environment variable to to control this.
|
|
16
|
+
If both are set, the configuration takes precedence.
|
|
17
|
+
|
|
18
|
+
### Syntax
|
|
19
|
+
|
|
20
|
+
**ITSI_LOG** uses [EnvFilter directive syntax](https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html#example-syntax).
|
|
21
|
+
|
|
22
|
+
E.g.
|
|
23
|
+
```bash
|
|
24
|
+
ITSI_LOG=warn # Set global log level
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
ITSI_LOG=info,middleware=debug # Set global log level, and override for all targets starting with middleware::*.
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
ITSI_LOG=warn,middleware::auth_jwt=debug,middleware=info #
|
|
34
|
+
```
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Itsi
|
|
2
|
+
class Server
|
|
3
|
+
module Config
|
|
4
|
+
class LogLevel < Option
|
|
5
|
+
|
|
6
|
+
insert_text <<~SNIPPET
|
|
7
|
+
log_level :${1|trace,debug,info,warn,error|}
|
|
8
|
+
|
|
9
|
+
SNIPPET
|
|
10
|
+
|
|
11
|
+
detail "This option configures the log level for the server."
|
|
12
|
+
|
|
13
|
+
schema do
|
|
14
|
+
(Enum([:trace, :debug, :info, :warn, :error]) & Required()).default(:info)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|