This commit is contained in:
Mateusz Gruszczyński committed 2026-10-06 10:16:16 +02:00
1 parent 32e6875980
commit cf25423dde
68 files changed
+2314 -422

No files matched your search

+181 -39
View File
@@ -10,6 +10,7 @@
<link href="/assets/style.css" rel="stylesheet" />
<script defer="" src="/assets/app.js"></script>
<script defer="" src="/assets/management.js"></script>
<script defer="" src="/assets/drafts.js"></script>
<script defer="" src="/assets/integrations.js"></script>
<script defer="" src="/assets/vhosts.js"></script>
<script defer="" src="/assets/web-server.js"></script>
@@ -71,8 +72,7 @@
id="file-logs-open" type="button">Stored logs</button><button class="quiet"
data-i18n="liveLogs" hidden="" id="logs-open" type="button">Live access logs</button>
</div>
</details><select aria-label="Language" class="language-select" data-i18n-aria="language"
id="language"></select><button class="quiet" data-i18n="about" id="about-open"
</details><button class="quiet" data-i18n="about" id="about-open"
type="button">About</button><button class="quiet" data-i18n="logout" hidden=""
id="logout">Lock</button>
</div>
@@ -117,24 +117,30 @@
</section>
<section class="panel" id="panel-overview">
<div class="stats-grid">
<article class="stat"><span data-i18n="requests">Requests</span><strong
id="metric-requests">0</strong><small id="request-rate">0 req/s</small></article>
<article class="stat"><span data-i18n="activeExchanges">Active exchanges</span><strong
id="metric-active">0</strong><small data-i18n="bodyLifetime">Full body lifetime</small>
<article class="stat" data-dashboard-widget="requests"><span
data-i18n="requests">Requests</span><strong id="metric-requests">0</strong><small
id="request-rate">0 req/s</small></article>
<article class="stat" data-dashboard-widget="active"><span data-i18n="activeExchanges">Active
exchanges</span><strong id="metric-active">0</strong><small
data-i18n="bodyLifetime">Full body lifetime</small>
</article>
<article class="stat"><span data-i18n="bandwidth">Payload transferred</span><strong
id="metric-bytes">0 B</strong><small class="payload-split"
<article class="stat" data-dashboard-widget="bandwidth"><span data-i18n="bandwidth">Payload
transferred</span><strong id="metric-bytes">0 B</strong><small class="payload-split"
id="metric-bytes-split"><span>↓ <b id="metric-bytes-down">0 B</b></span><span>↑ <b
id="metric-bytes-up">0 B</b></span></small>
</article>
<article class="stat"><span data-i18n="errors">Errors</span><strong
id="metric-errors">0</strong><small data-i18n="errorDescription">5xx / body /
<article class="stat" data-dashboard-widget="errors"><span
data-i18n="errors">Errors</span><strong id="metric-errors">0</strong><small
data-i18n="errorDescription">5xx / body /
cancelled</small></article>
<article class="stat"><span data-i18n="cacheHitRatio">Cache hit ratio</span><strong
id="metric-cache-ratio">-</strong><small id="cache-summary">-</small></article>
<article class="stat"><span data-i18n="processMemory">Process memory</span><strong
id="metric-rss">-</strong><small id="process-summary">-</small></article>
<article class="stat stat-with-action"><span data-i18n="wsActive">WebSocket
<article class="stat" data-dashboard-widget="cache"><span data-i18n="cacheHitRatio">Cache hit
ratio</span><strong id="metric-cache-ratio">-</strong><small
id="cache-summary">-</small></article>
<article class="stat" data-dashboard-widget="memory"><span data-i18n="processMemory">Process
memory</span><strong id="metric-rss">-</strong><small id="process-summary">-</small>
</article>
<article class="stat stat-with-action" data-dashboard-widget="websocket"><span
data-i18n="wsActive">WebSocket
tunnels</span><button class="quiet stat-corner-action" data-i18n="tunnelsOpen"
id="tunnels-open" type="button">Active tunnels</button><strong
id="metric-ws">0</strong><small
@@ -144,14 +150,16 @@
RFC 9220</span> <span id="metric-ws-h3">0</span><br><span
data-i18n="wsEstablished">Established</span>: <span
id="metric-ws-total">0</span></small></article>
<article class="stat"><span data-i18n="h2Requests">HTTP/2 requests</span><strong
id="metric-h2">0</strong><small><span data-i18n="h2ActiveConnections">Active H2
<article class="stat" data-dashboard-widget="http2"><span data-i18n="h2Requests">HTTP/2
requests</span><strong id="metric-h2">0</strong><small><span
data-i18n="h2ActiveConnections">Active H2
connections</span>: <span id="metric-h2-active">0</span></small></article>
<article class="stat"><span data-i18n="h3Requests">HTTP/3 requests</span><strong
id="metric-h3">0</strong></article>
<article class="stat"><span data-i18n="tlsFailures">TLS handshake errors</span><strong
id="metric-tls-errors">0</strong></article>
<article class="stat stat-chart"><span data-i18n="httpProtocolMix">HTTP protocol
<article class="stat" data-dashboard-widget="http3"><span data-i18n="h3Requests">HTTP/3
requests</span><strong id="metric-h3">0</strong></article>
<article class="stat" data-dashboard-widget="tls"><span data-i18n="tlsFailures">TLS handshake
errors</span><strong id="metric-tls-errors">0</strong></article>
<article class="stat stat-chart" data-dashboard-widget="http_protocol"><span
data-i18n="httpProtocolMix">HTTP protocol
mix</span><strong id="metric-http-proto-total">0.0/s</strong><svg
aria-label="HTTP protocol activity" data-i18n-aria="httpProtocolMix"
id="http-protocol-chart" role="img" viewBox="0 0 300 60">
@@ -166,7 +174,8 @@
id="metric-http-proto-h1">0.0/s</b></span><span class="legend-h2"><i></i>H2 <b
id="metric-http-proto-h2">0.0/s</b></span><span class="legend-h3"><i></i>H3 <b
id="metric-http-proto-h3">0.0/s</b></span></small></article>
<article class="stat stat-chart"><span data-i18n="wsProtocolMix">WebSocket protocol
<article class="stat stat-chart" data-dashboard-widget="websocket_protocol"><span
data-i18n="wsProtocolMix">WebSocket protocol
mix</span><strong id="metric-ws-proto-total">0</strong><svg
aria-label="WebSocket protocol activity" data-i18n-aria="wsProtocolMix"
id="ws-protocol-chart" role="img" viewBox="0 0 300 60">
@@ -1569,21 +1578,21 @@
response policies also have per-vhost controls.</p>
</div><button class="outline" data-i18n="security" id="settings-security-open"
type="button">Security</button><button class="quiet" data-i18n="vhosts"
id="settings-vhost-open" type="button">Vhosts</button><label
class="ui-preference-control"><span data-i18n="theme">Theme</span><select id="ui-theme">
<option data-i18n="themeDark" value="dark">Dark</option>
<option data-i18n="themeLight" value="light">Light</option>
</select></label><label class="ui-preference-control"><span data-i18n="density">Interface
density</span><select id="ui-density">
<option data-i18n="densityCompact" value="compact">Compact</option>
<option data-i18n="densityDense" value="dense">Dense</option>
<option data-i18n="densityComfortable" value="comfortable">Comfortable</option>
</select></label>
id="settings-vhost-open" type="button">Vhosts</button>
</div>
<div class="settings-filter-row">
<label class="settings-filter"><span class="small-label" data-i18n="settingsSearch">Find
settings</span><input autocomplete="off"
data-i18n-placeholder="settingsSearchPlaceholder" id="settings-search"
placeholder="Search settings..." type="search" /></label>
<span class="fine" id="settings-search-status" role="status"></span>
</div>
<nav aria-label="Settings" class="settings-tabs" id="settings-tabs" role="tablist"><button
aria-controls="settings-page-listeners" aria-selected="false" data-i18n="listeners"
data-settings-tab="listeners" id="settings-tab-listeners" role="tab" tabindex="-1"
type="button"></button><button aria-controls="settings-page-connections"
aria-controls="settings-page-appearance" aria-selected="false" data-i18n="appearance"
data-settings-tab="appearance" id="settings-tab-appearance" role="tab" tabindex="-1"
type="button"></button><button aria-controls="settings-page-listeners" aria-selected="false"
data-i18n="listeners" data-settings-tab="listeners" id="settings-tab-listeners" role="tab"
tabindex="-1" type="button"></button><button aria-controls="settings-page-connections"
aria-selected="false" data-i18n="httpConnections" data-settings-tab="connections"
id="settings-tab-connections" role="tab" tabindex="-1" type="button"></button><button
aria-controls="settings-page-docker-agents" aria-selected="false" data-i18n="dockerAgents"
@@ -1622,6 +1631,139 @@
data-settings-tab="security" id="settings-tab-security" role="tab" tabindex="-1"
type="button"></button></nav>
<div class="settings-pages" id="settings-pages">
<div aria-labelledby="settings-tab-appearance" class="settings-page"
data-settings-page="appearance" hidden="" id="settings-page-appearance" role="tabpanel">
<div class="card edit-form appearance-settings-card">
<div class="card-heading">
<div><span class="small-label" data-i18n="appearanceEyebrow">INTERFACE</span>
<h2 data-i18n="appearance">Appearance</h2>
</div>
</div>
<p class="fine" data-i18n="appearanceHelp">These preferences are saved for your
administrator account and follow you between sessions.</p>
<section class="appearance-section">
<div class="appearance-section-heading">
<div><span class="small-label"
data-i18n="appearanceInterfaceSection">INTERFACE</span>
<h3 data-i18n="appearanceInterfaceTitle">Interface</h3>
</div><button class="quiet appearance-section-reset"
data-appearance-reset="interface" data-i18n="resetSection"
type="button">Reset section</button>
</div>
<div class="appearance-settings-grid">
<label><span data-i18n="theme">Theme</span><select id="ui-theme">
<option data-i18n="themeDark" value="dark">Dark</option>
<option data-i18n="themeLight" value="light">Light</option>
</select></label>
<label><span data-i18n="language">Language</span><select aria-label="Language"
data-i18n-aria="language" id="language"></select></label>
<label class="appearance-scale-control"><span><span
data-i18n="interfaceScale">Interface scale</span>
<output id="ui-scale-value" for="ui-scale">100%</output></span>
<input id="ui-scale" max="125" min="70" step="5" type="range" value="100" />
<small class="fine" data-i18n="interfaceScaleHelp">Scale the entire
administration interface, including dialogs and overlays, without
changing browser zoom.</small></label>
<label><span data-i18n="timeFormat">Time format</span><select
id="ui-time-format">
<option data-i18n="timeFormat24" value="24h">24-hour</option>
<option data-i18n="timeFormat12" value="12h">12-hour</option>
</select></label>
<label><span data-i18n="buttonStyle">Button style</span><select
id="ui-button-style">
<option data-i18n="buttonStyleNormal" value="normal">Normal</option>
<option data-i18n="buttonStyleCompact" value="compact">Compact</option>
</select><small class="fine" data-i18n="buttonStyleHelp">Normal uses the
refreshed controls; Compact restores the smaller source-style buttons
across all actions and dialog tabs.</small></label>
</div>
</section>
<section class="appearance-section">
<div class="appearance-section-heading">
<div><span class="small-label" data-i18n="appearanceChartsSection">CHARTS</span>
<h3 data-i18n="chartStyle">Chart style</h3>
</div><button class="quiet appearance-section-reset"
data-appearance-reset="charts" data-i18n="resetSection" type="button">Reset
section</button>
</div>
<div class="appearance-settings-grid appearance-chart-settings">
<label><span data-i18n="chartStyle">Chart style</span><select
id="ui-chart-style">
<option data-i18n="chartStyleDefault" value="default">Default</option>
<option data-i18n="chartStyleSoft" value="soft">Soft</option>
<option data-i18n="chartStyleTechnical" value="technical">Technical
</option>
<option data-i18n="chartStyleHighContrast" value="high_contrast">High
contrast</option>
<option data-i18n="chartStyleNeon" value="neon">Neon</option>
<option data-i18n="chartStyleMonochrome" value="monochrome">Monochrome
</option>
<option data-i18n="chartStyleWarm" value="warm">Warm</option>
<option data-i18n="chartStyleCool" value="cool">Cool</option>
</select></label>
<div class="appearance-chart-preview" aria-hidden="true">
<svg viewBox="0 0 300 74" preserveAspectRatio="none">
<path class="chart-grid" d="M0 18H300 M0 37H300 M0 56H300"></path>
<polyline class="appearance-chart-primary"
points="0,58 48,42 92,50 138,25 182,35 228,16 300,29"></polyline>
<polyline class="appearance-chart-secondary"
points="0,63 48,56 92,38 138,45 182,27 228,37 300,19"></polyline>
</svg>
<span data-i18n="chartStylePreview">Preview</span>
</div>
</div>
<div class="chart-style-palette" id="chart-style-palette"
aria-label="Chart style palettes" data-i18n-aria="chartStylePalettes"></div>
</section>
<section class="appearance-section">
<div class="appearance-section-heading">
<div><span class="small-label" data-i18n="appearanceDataSection">TABLES /
LOGS</span>
<h3 data-i18n="tableDensity">Tables and logs density</h3>
</div><button class="quiet appearance-section-reset"
data-appearance-reset="tables" data-i18n="resetSection" type="button">Reset
section</button>
</div>
<div class="appearance-settings-grid">
<label><span data-i18n="tableDensity">Tables and logs density</span><select
id="ui-table-density">
<option data-i18n="densityNormal" value="normal">Normal</option>
<option data-i18n="densityCompact" value="compact">Compact</option>
<option data-i18n="densityUltra" value="ultra">Ultra compact</option>
</select><small class="fine" data-i18n="tableDensityHelp">Changes row height
and log spacing independently from interface scale.</small></label>
</div>
</section>
<section class="appearance-section">
<div class="appearance-section-heading">
<div><span class="small-label"
data-i18n="appearanceDashboardSection">DASHBOARD</span>
<h3 data-i18n="dashboardLayout">Dashboard layout</h3>
</div><button class="quiet appearance-section-reset"
data-appearance-reset="dashboard" data-i18n="resetSection"
type="button">Reset section</button>
</div>
<div class="appearance-settings-grid">
<label><span data-i18n="dashboardDensity">Dashboard density</span><select
id="ui-dashboard-density">
<option data-i18n="densityNormal" value="normal">Normal</option>
<option data-i18n="densityCompact" value="compact">Compact</option>
<option data-i18n="densityUltra" value="ultra">Ultra compact</option>
</select><small class="fine" data-i18n="dashboardDensityHelp">Controls
Overview telemetry card size without changing the rest of the
interface.</small></label>
<div class="dashboard-widget-settings"><span
data-i18n="dashboardWidgets">Overview cards</span><small class="fine"
data-i18n="dashboardWidgetsHelp">Show, hide and reorder the telemetry
cards at the top of Overview.</small>
<div class="dashboard-widget-list" id="dashboard-widget-list"></div>
</div>
</div>
</section>
<div class="appearance-actions"><button class="outline" data-i18n="appearanceReset"
id="appearance-reset" type="button">Reset appearance</button></div>
</div>
</div>
<div aria-labelledby="settings-tab-listeners" class="settings-page"
data-settings-page="listeners" hidden="" id="settings-page-listeners" role="tabpanel">
<form class="card edit-form" id="listeners-form">
@@ -1735,7 +1877,7 @@
<option data-i18n="serverCustom" value="custom">Replace / add custom value</option>
</select>
<label data-i18n="serverValue" for="server-value">Custom Server value</label><input
id="server-value" maxlength="256" placeholder="RustProxy/v0.26.2"
id="server-value" maxlength="256" placeholder="RustProxy/v0.26.3"
spellcheck="false" />
<h3 class="subheading" data-i18n="diagnosticHeaders">Diagnostic headers</h3>
<div class="switch-grid">
@@ -2534,7 +2676,7 @@
</section>
</div>
</section>
<footer class="page-footer"><span>RustProxy <b>0.26.2</b></span><span id="footer-status">API - /
<footer class="page-footer"><span>RustProxy <b>0.26.3</b></span><span id="footer-status">API - /
dropped: 0</span></footer>
</div>
</main>
@@ -3245,7 +3387,7 @@ max_execution_time = 30</code></pre>
<article class="card about-card">
<div class="about-product">
<span aria-hidden="true" class="brand-mark">r<span>/</span>p</span>
<div><span class="small-label">RustProxy</span><strong>0.26.2</strong></div>
<div><span class="small-label">RustProxy</span><strong>0.26.3</strong></div>
</div>
<dl class="about-meta">
<div>