This commit is contained in:
Mateusz Gruszczyński committed 2026-10-13 21:29:57 +02:00
1 parent bb025dcf44
commit b0f211555a
74 files changed
+6089 -556

No files matched your search

+665 -112
View File
@@ -8,12 +8,10 @@
<title>RustProxy / Control room</title>
<link href="/favicon.svg" rel="icon" />
<link href="/assets/style___RUSTPROXY_ASSET_ID__.css" rel="stylesheet" />
<!-- One ordered JS payload: no race between module fetches and session/config API. -->
<script defer="" src="/assets/app___RUSTPROXY_ASSET_ID__.js"></script>
</head>
<body>
<!-- Visible even when the dashboard JavaScript fails to initialize. -->
<div class="app-startup" id="app-startup" role="status" aria-live="polite">
<div class="app-startup-card">
<div class="app-startup-brand" aria-hidden="true">r<span>/</span>p</div>
@@ -121,12 +119,30 @@
<h1 id="page-title">Traffic, in focus.</h1>
<button class="quiet overview-refresh" data-i18n="refreshNow" id="overview-refresh"
type="button" hidden>Refresh now</button>
<button class="quiet overview-layout-open" data-i18n="overviewLayoutEditorOpen"
id="overview-layout-open" type="button" hidden>Arrange cards visually</button>
<button class="outline" id="overview-layout-unlock" type="button" hidden
data-i18n="overviewLayoutUnlock" aria-pressed="false">Unlock layout</button>
<div class="overview-inline-actions" id="overview-inline-actions" hidden>
<button class="primary" id="overview-inline-save" type="button"
data-i18n="overviewLayoutInlineSave">Save and lock</button>
<button class="quiet" id="overview-inline-cancel" type="button"
data-i18n="overviewLayoutInlineCancel">Cancel changes</button>
</div>
</div>
<p class="lead" id="page-description"></p>
</div>
</section>
<section class="panel" id="panel-overview">
<div class="stats-grid">
<p class="fine overview-inline-hint" id="overview-inline-hint" role="status" aria-live="polite"
hidden data-i18n="overviewLayoutInlineHint">Layout unlocked: reorder blocks within size groups,
hide with × and save or cancel.</p>
<details class="overview-inline-hidden" id="overview-inline-hidden" hidden>
<summary><span data-i18n="overviewLayoutInlineHidden">Hidden blocks</span> <span
id="overview-inline-hidden-count"></span></summary>
<div class="overview-inline-hidden-list" id="overview-inline-hidden-list"></div>
</details>
<div class="stats-grid dashboard-overview-grid" id="dashboard-overview-grid">
<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>
@@ -234,9 +250,457 @@
<small id="stream-dashboard-health-detail" data-i18n="streamWidgetUnavailable">No stream
data</small>
</article>
</div>
<div class="overview-grid">
<article class="card activity-card">
<article class="stat" data-dashboard-widget="backend_health" hidden>
<span data-i18n="backendWidgetHealth">Backend health</span><strong
id="backend-dashboard-health">-</strong>
<small id="backend-dashboard-health-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="backend_activity" hidden>
<span data-i18n="backendWidgetActivity">Active backend requests</span><strong
id="backend-dashboard-activity">-</strong>
<svg data-i18n-aria="backendWidgetActivity" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line proto-h1-line" id="backend-dashboard-active-line"
points="0,55 300,55"></polyline>
</svg><small id="backend-dashboard-activity-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="backend_errors" hidden>
<span data-i18n="backendWidgetErrors">Backend errors</span><strong
id="backend-dashboard-errors">-</strong>
<svg data-i18n-aria="backendWidgetErrors" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line proto-h3-line" id="backend-dashboard-error-line"
points="0,55 300,55"></polyline>
</svg><small id="backend-dashboard-errors-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="backend_latency" hidden>
<span data-i18n="backendWidgetLatency">Health probe RTT</span><strong
id="backend-dashboard-latency">-</strong>
<svg data-i18n-aria="backendWidgetLatency" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line proto-h2-line" id="backend-dashboard-latency-line"
points="0,55 300,55"></polyline>
</svg><small id="backend-dashboard-latency-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="backend_traffic" hidden>
<span data-i18n="backendWidgetTraffic">Backend traffic</span><strong
id="backend-dashboard-traffic">-</strong>
<svg data-i18n-aria="backendWidgetTraffic" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line stream-chart-rx" id="backend-dashboard-in-line"
points="0,55 300,55"></polyline>
<polyline class="diagnostic-line stream-chart-tx" id="backend-dashboard-out-line"
points="0,55 300,55"></polyline>
</svg><small class="stat-chart-legend stream-traffic-legend">
<span class="legend-rx"><i></i>IN <b id="backend-dashboard-in-rate">-</b></span>
<span class="legend-tx"><i></i>OUT <b id="backend-dashboard-out-rate">-</b></span>
</small>
</article>
<article class="stat" data-dashboard-widget="backend_protocols" hidden>
<span data-i18n="backendWidgetProtocols">Configured backend modes</span><strong
id="backend-dashboard-protocols">-</strong>
<div class="backend-mode-bar" role="img" data-i18n-aria="backendWidgetProtocols">
<span class="backend-mode-h1" id="backend-mode-h1"></span>
<span class="backend-mode-auto" id="backend-mode-auto"></span>
<span class="backend-mode-compat" id="backend-mode-compat"></span>
<span class="backend-mode-h2" id="backend-mode-h2"></span>
</div><small id="backend-dashboard-protocols-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="backend_requests" hidden>
<span data-i18n="backendWidgetRequests">Backend request rate</span><strong
id="backend-dashboard-requests">-</strong>
<svg data-i18n-aria="backendWidgetRequests" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line proto-h1-line" id="backend-dashboard-request-line"
points="0,55 300,55"></polyline>
</svg><small id="backend-dashboard-requests-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="backend_capacity" hidden>
<span data-i18n="backendWidgetCapacity">Backend capacity</span><strong
id="backend-dashboard-capacity">-</strong>
<svg data-i18n-aria="backendWidgetCapacity" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line proto-h2-line" id="backend-dashboard-capacity-line"
points="0,55 300,55"></polyline>
</svg><small id="backend-dashboard-capacity-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="backend_http5xx" hidden>
<span data-i18n="backendWidgetHttp5xx">backendWidgetHttp5xx</span><strong
id="backend-dashboard-http5xx">-</strong>
<svg data-i18n-aria="backendWidgetHttp5xx" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line proto-h2-line" id="backend-dashboard-5xx-line"
points="0,55 300,55"></polyline>
</svg><small id="backend-dashboard-http5xx-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="backend_timeouts" hidden>
<span data-i18n="backendWidgetTimeouts">backendWidgetTimeouts</span><strong
id="backend-dashboard-timeouts">-</strong>
<svg data-i18n-aria="backendWidgetTimeouts" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line proto-h2-line" id="backend-dashboard-timeout-line"
points="0,55 300,55"></polyline>
</svg><small id="backend-dashboard-timeouts-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="backend_network" hidden>
<span data-i18n="backendWidgetNetwork">backendWidgetNetwork</span><strong
id="backend-dashboard-network">-</strong>
<svg data-i18n-aria="backendWidgetNetwork" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line proto-h2-line" id="backend-dashboard-network-line"
points="0,55 300,55"></polyline>
</svg><small id="backend-dashboard-network-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="backend_retries" hidden>
<span data-i18n="backendWidgetRetries">backendWidgetRetries</span><strong
id="backend-dashboard-retries">-</strong>
<svg data-i18n-aria="backendWidgetRetries" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line proto-h2-line" id="backend-dashboard-retry-line"
points="0,55 300,55"></polyline>
</svg><small id="backend-dashboard-retries-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="backend_queue" hidden>
<span data-i18n="backendWidgetQueue">backendWidgetQueue</span><strong
id="backend-dashboard-queue">-</strong>
<svg data-i18n-aria="backendWidgetQueue" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line proto-h2-line" id="backend-dashboard-queue-line"
points="0,55 300,55"></polyline>
</svg><small id="backend-dashboard-queue-detail">-</small>
</article>
<article class="stat" data-dashboard-widget="backend_rotations" hidden>
<span data-i18n="backendWidgetRotations">Backend client pool rotations</span><strong
id="backend-dashboard-rotations">-</strong>
<small id="backend-dashboard-rotations-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_process_cpu" hidden>
<span data-i18n="overviewExtraProcessCpu">overviewExtraProcessCpu</span><strong
id="overview-extra-extra_process_cpu">-</strong>
<svg data-i18n-aria="overviewExtraProcessCpu" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_process_cpu-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_process_cpu-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_process_rss" hidden>
<span data-i18n="overviewExtraProcessRss">overviewExtraProcessRss</span><strong
id="overview-extra-extra_process_rss">-</strong>
<svg data-i18n-aria="overviewExtraProcessRss" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_process_rss-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_process_rss-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_process_fds" hidden>
<span data-i18n="overviewExtraProcessFds">overviewExtraProcessFds</span><strong
id="overview-extra-extra_process_fds">-</strong>
<svg data-i18n-aria="overviewExtraProcessFds" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_process_fds-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_process_fds-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_open_connections" hidden>
<span data-i18n="overviewExtraOpenConnections">overviewExtraOpenConnections</span><strong
id="overview-extra-extra_open_connections">-</strong>
<svg data-i18n-aria="overviewExtraOpenConnections" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_open_connections-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_open_connections-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_websocket_active" hidden>
<span data-i18n="overviewExtraWebsocketActive">overviewExtraWebsocketActive</span><strong
id="overview-extra-extra_websocket_active">-</strong>
<svg data-i18n-aria="overviewExtraWebsocketActive" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_websocket_active-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_websocket_active-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_tls_error_rate" hidden>
<span data-i18n="overviewExtraTlsErrorRate">overviewExtraTlsErrorRate</span><strong
id="overview-extra-extra_tls_error_rate">-</strong>
<svg data-i18n-aria="overviewExtraTlsErrorRate" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_tls_error_rate-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_tls_error_rate-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_request_error_rate" hidden>
<span data-i18n="overviewExtraRequestErrorRate">overviewExtraRequestErrorRate</span><strong
id="overview-extra-extra_request_error_rate">-</strong>
<svg data-i18n-aria="overviewExtraRequestErrorRate" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_request_error_rate-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_request_error_rate-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_cache_hit_rate" hidden>
<span data-i18n="overviewExtraCacheHitRate">overviewExtraCacheHitRate</span><strong
id="overview-extra-extra_cache_hit_rate">-</strong>
<svg data-i18n-aria="overviewExtraCacheHitRate" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_cache_hit_rate-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_cache_hit_rate-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_cache_memory" hidden>
<span data-i18n="overviewExtraCacheMemory">overviewExtraCacheMemory</span><strong
id="overview-extra-extra_cache_memory">-</strong>
<svg data-i18n-aria="overviewExtraCacheMemory" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_cache_memory-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_cache_memory-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_h2_share" hidden>
<span data-i18n="overviewExtraH2Share">overviewExtraH2Share</span><strong
id="overview-extra-extra_h2_share">-</strong>
<svg data-i18n-aria="overviewExtraH2Share" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_h2_share-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_h2_share-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_response_latency" hidden>
<span data-i18n="overviewExtraResponseLatency">overviewExtraResponseLatency</span><strong
id="overview-extra-extra_response_latency">-</strong>
<svg data-i18n-aria="overviewExtraResponseLatency" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_response_latency-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_response_latency-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_backend_unhealthy" hidden>
<span data-i18n="overviewExtraBackendUnhealthy">overviewExtraBackendUnhealthy</span><strong
id="overview-extra-extra_backend_unhealthy">-</strong>
<svg data-i18n-aria="overviewExtraBackendUnhealthy" role="img" viewBox="0 0 300 60">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_backend_unhealthy-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_backend_unhealthy-detail">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_total_rps" hidden>
<span data-i18n="overviewExtraTotalRps">HTTP requests / s</span><strong
id="overview-extra-extra_total_rps">-</strong>
<svg viewBox="0 0 300 60" role="img" aria-label="HTTP requests / s">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_total_rps-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_total_rps-detail"
data-i18n="overviewExtraRecentSamples">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_active_exchanges" hidden>
<span data-i18n="overviewExtraActiveExchanges">Active HTTP exchanges</span><strong
id="overview-extra-extra_active_exchanges">-</strong>
<svg viewBox="0 0 300 60" role="img" aria-label="Active HTTP exchanges">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_active_exchanges-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_active_exchanges-detail"
data-i18n="overviewExtraRecentSamples">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_h1_share" hidden>
<span data-i18n="overviewExtraH1Share">HTTP/1.1 share</span><strong
id="overview-extra-extra_h1_share">-</strong>
<svg viewBox="0 0 300 60" role="img" aria-label="HTTP/1.1 share">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_h1_share-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_h1_share-detail"
data-i18n="overviewExtraRecentSamples">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_h3_share" hidden>
<span data-i18n="overviewExtraH3Share">HTTP/3 share</span><strong
id="overview-extra-extra_h3_share">-</strong>
<svg viewBox="0 0 300 60" role="img" aria-label="HTTP/3 share">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_h3_share-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_h3_share-detail"
data-i18n="overviewExtraRecentSamples">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_cache_miss_rate" hidden>
<span data-i18n="overviewExtraCacheMissRate">Cache misses / s</span><strong
id="overview-extra-extra_cache_miss_rate">-</strong>
<svg viewBox="0 0 300 60" role="img" aria-label="Cache misses / s">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_cache_miss_rate-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_cache_miss_rate-detail"
data-i18n="overviewExtraRecentSamples">-</small>
</article>
<article class="stat stat-chart" data-dashboard-widget="extra_backend_active" hidden>
<span data-i18n="overviewExtraBackendActive">In-flight backend requests</span><strong
id="overview-extra-extra_backend_active">-</strong>
<svg viewBox="0 0 300 60" role="img" aria-label="In-flight backend requests">
<path class="chart-grid" d="M0 15H300 M0 30H300 M0 45H300"></path>
<polyline class="diagnostic-line" id="overview-extra-extra_backend_active-line"
points="0,55 300,55"></polyline>
</svg><small id="overview-extra-extra_backend_active-detail"
data-i18n="overviewExtraRecentSamples">-</small>
</article>
<article class="card overview-wide-chart" data-dashboard-widget="wide_protocol_rates" hidden>
<div class="card-heading">
<h2 data-i18n="overviewWideProtocolRates">HTTP/1.1 · HTTP/2 · HTTP/3 traffic</h2>
<span class="overview-wide-summary"
id="overview-wide-wide_protocol_rates-summary">-</span>
</div>
<svg class="overview-wide-svg" viewBox="0 0 600 150" role="img"
aria-label="HTTP/1.1 · HTTP/2 · HTTP/3 traffic">
<path class="chart-grid" d="M0 37H600 M0 75H600 M0 113H600"></path>
<path class="overview-wide-series overview-wide-series-0"
id="overview-wide-wide_protocol_rates-h1-line" d=""></path>
<path class="overview-wide-series overview-wide-series-1"
id="overview-wide-wide_protocol_rates-h2-line" d=""></path>
<path class="overview-wide-series overview-wide-series-2"
id="overview-wide-wide_protocol_rates-h3-line" d=""></path>
</svg>
<div class="overview-wide-legend">
<span><i class="overview-wide-key-0"></i><span>H1</span><b
id="overview-wide-wide_protocol_rates-h1-value">-</b></span>
<span><i class="overview-wide-key-1"></i><span>H2</span><b
id="overview-wide-wide_protocol_rates-h2-value">-</b></span>
<span><i class="overview-wide-key-2"></i><span>H3</span><b
id="overview-wide-wide_protocol_rates-h3-value">-</b></span>
</div>
</article>
<article class="card overview-wide-chart" data-dashboard-widget="wide_cpu" hidden>
<div class="card-heading">
<h2 data-i18n="overviewWideCpu">System and process CPU</h2>
<span class="overview-wide-summary" id="overview-wide-wide_cpu-summary">-</span>
</div>
<svg class="overview-wide-svg" viewBox="0 0 600 150" role="img"
aria-label="System and process CPU">
<path class="chart-grid" d="M0 37H600 M0 75H600 M0 113H600"></path>
<path class="overview-wide-series overview-wide-series-0"
id="overview-wide-wide_cpu-system-line" d=""></path>
<path class="overview-wide-series overview-wide-series-1"
id="overview-wide-wide_cpu-process-line" d=""></path>
</svg>
<div class="overview-wide-legend">
<span><i class="overview-wide-key-0"></i><span
data-i18n="overviewWideSystem">System</span><b
id="overview-wide-wide_cpu-system-value">-</b></span>
<span><i class="overview-wide-key-1"></i><span
data-i18n="overviewWideProcess">Process</span><b
id="overview-wide-wide_cpu-process-value">-</b></span>
</div>
</article>
<article class="card overview-wide-chart" data-dashboard-widget="wide_memory" hidden>
<div class="card-heading">
<h2 data-i18n="overviewWideMemory">Process RAM and cache memory</h2>
<span class="overview-wide-summary" id="overview-wide-wide_memory-summary">-</span>
</div>
<svg class="overview-wide-svg" viewBox="0 0 600 150" role="img"
aria-label="Process RAM and cache memory">
<path class="chart-grid" d="M0 37H600 M0 75H600 M0 113H600"></path>
<path class="overview-wide-series overview-wide-series-0"
id="overview-wide-wide_memory-process-line" d=""></path>
<path class="overview-wide-series overview-wide-series-1"
id="overview-wide-wide_memory-cache-line" d=""></path>
</svg>
<div class="overview-wide-legend">
<span><i class="overview-wide-key-0"></i><span
data-i18n="overviewWideProcess">Process</span><b
id="overview-wide-wide_memory-process-value">-</b></span>
<span><i class="overview-wide-key-1"></i><span
data-i18n="overviewWideCache">Cache</span><b
id="overview-wide-wide_memory-cache-value">-</b></span>
</div>
</article>
<article class="card overview-wide-chart" data-dashboard-widget="wide_cache_activity" hidden>
<div class="card-heading">
<h2 data-i18n="overviewWideCacheActivity">Cache hits / misses per second</h2>
<span class="overview-wide-summary"
id="overview-wide-wide_cache_activity-summary">-</span>
</div>
<svg class="overview-wide-svg" viewBox="0 0 600 150" role="img"
aria-label="Cache hits / misses per second">
<path class="chart-grid" d="M0 37H600 M0 75H600 M0 113H600"></path>
<path class="overview-wide-series overview-wide-series-0"
id="overview-wide-wide_cache_activity-hits-line" d=""></path>
<path class="overview-wide-series overview-wide-series-1"
id="overview-wide-wide_cache_activity-misses-line" d=""></path>
</svg>
<div class="overview-wide-legend">
<span><i class="overview-wide-key-0"></i><span data-i18n="overviewWideHits">HIT</span><b
id="overview-wide-wide_cache_activity-hits-value">-</b></span>
<span><i class="overview-wide-key-1"></i><span
data-i18n="overviewWideMisses">MISS</span><b
id="overview-wide-wide_cache_activity-misses-value">-</b></span>
</div>
</article>
<article class="card overview-wide-chart" data-dashboard-widget="wide_connections" hidden>
<div class="card-heading">
<h2 data-i18n="overviewWideConnections">Connections and WebSocket tunnels</h2>
<span class="overview-wide-summary" id="overview-wide-wide_connections-summary">-</span>
</div>
<svg class="overview-wide-svg" viewBox="0 0 600 150" role="img"
aria-label="Connections and WebSocket tunnels">
<path class="chart-grid" d="M0 37H600 M0 75H600 M0 113H600"></path>
<path class="overview-wide-series overview-wide-series-0"
id="overview-wide-wide_connections-open-line" d=""></path>
<path class="overview-wide-series overview-wide-series-1"
id="overview-wide-wide_connections-websockets-line" d=""></path>
</svg>
<div class="overview-wide-legend">
<span><i class="overview-wide-key-0"></i><span
data-i18n="overviewWideOpen">Connections</span><b
id="overview-wide-wide_connections-open-value">-</b></span>
<span><i class="overview-wide-key-1"></i><span
data-i18n="overviewWideWebsockets">WebSockets</span><b
id="overview-wide-wide_connections-websockets-value">-</b></span>
</div>
</article>
<article class="card overview-wide-chart" data-dashboard-widget="wide_backend_health" hidden>
<div class="card-heading">
<h2 data-i18n="overviewWideBackendHealth">Backend availability over time</h2>
<span class="overview-wide-summary"
id="overview-wide-wide_backend_health-summary">-</span>
</div>
<svg class="overview-wide-svg" viewBox="0 0 600 150" role="img"
aria-label="Backend availability over time">
<path class="chart-grid" d="M0 37H600 M0 75H600 M0 113H600"></path>
<path class="overview-wide-series overview-wide-series-0"
id="overview-wide-wide_backend_health-up-line" d=""></path>
<path class="overview-wide-series overview-wide-series-1"
id="overview-wide-wide_backend_health-down-line" d=""></path>
</svg>
<div class="overview-wide-legend">
<span><i class="overview-wide-key-0"></i><span
data-i18n="overviewWideHealthy">Healthy</span><b
id="overview-wide-wide_backend_health-up-value">-</b></span>
<span><i class="overview-wide-key-1"></i><span
data-i18n="overviewWideUnhealthy">Unhealthy</span><b
id="overview-wide-wide_backend_health-down-value">-</b></span>
</div>
</article>
<article class="card overview-wide-chart" data-dashboard-widget="wide_latency" hidden>
<div class="card-heading">
<h2 data-i18n="overviewWideLatency">Response and backend probe latency</h2>
<span class="overview-wide-summary" id="overview-wide-wide_latency-summary">-</span>
</div>
<svg class="overview-wide-svg" viewBox="0 0 600 150" role="img"
aria-label="Response and backend probe latency">
<path class="chart-grid" d="M0 37H600 M0 75H600 M0 113H600"></path>
<path class="overview-wide-series overview-wide-series-0"
id="overview-wide-wide_latency-response-line" d=""></path>
<path class="overview-wide-series overview-wide-series-1"
id="overview-wide-wide_latency-probe-line" d=""></path>
</svg>
<div class="overview-wide-legend">
<span><i class="overview-wide-key-0"></i><span
data-i18n="overviewWideResponse">HTTP</span><b
id="overview-wide-wide_latency-response-value">-</b></span>
<span><i class="overview-wide-key-1"></i><span
data-i18n="overviewWideProbe">Probes</span><b
id="overview-wide-wide_latency-probe-value">-</b></span>
</div>
</article>
<article class="card activity-card" data-dashboard-widget="traffic_chart">
<div class="card-heading">
<div><span class="small-label" data-i18n="liveTraffic">LIVE TRAFFIC</span>
<h2 data-i18n="requestsPerSecond">Requests per second</h2>
@@ -269,7 +733,7 @@
<div class="chart-footer"><span data-i18n="lastMinute">Recent samples / resets on
reload</span><span id="chart-peak">peak 0 req/s</span></div>
</article>
<article class="card system-card">
<article class="card system-card" data-dashboard-widget="system_chart">
<div class="card-heading">
<div><span class="small-label" data-i18n="systemLoad">SYSTEM LOAD</span>
<h2><span id="system-cpu">-</span> <small>CPU</small></h2>
@@ -289,7 +753,7 @@
<div class="chart-footer"><span data-i18n="systemUptime">System uptime</span><span
id="system-uptime">-</span></div>
</article>
<article class="card connection-card">
<article class="card connection-card" data-dashboard-widget="connection_chart">
<div class="card-heading">
<div><span class="small-label" data-i18n="connectionActivity">CONNECTION ACTIVITY</span>
<h2><span id="connection-current">0</span> <small data-i18n="connections">Open
@@ -312,9 +776,7 @@
<div class="chart-footer"><span><span data-i18n="backends">Backends</span>: <b
id="connection-backends">0</b></span></div>
</article>
</div>
<div class="diagnostics-grid">
<article class="card">
<article class="card" data-dashboard-widget="cache_diagnostics">
<div class="mini-heading">
<h3 data-i18n="cacheOverview">RAM cache</h3><span class="pill" id="cache-state">-</span>
</div>
@@ -409,7 +871,7 @@
</div>
</div>
</article>
<article class="card">
<article class="card" data-dashboard-widget="process_diagnostics">
<div class="mini-heading">
<h3 data-i18n="processDiagnostics">Process</h3>
<div class="mini-heading-actions">
@@ -521,7 +983,7 @@
</div>
</div>
</article>
<article class="card">
<article class="card" data-dashboard-widget="network_diagnostics">
<div class="mini-heading">
<h3 data-i18n="networkDiagnostics">Network and responses</h3><span class="meta"
data-i18n="hostScope">OS scope</span>
@@ -581,106 +1043,117 @@
</div>
</div>
</article>
</div>
<article class="card pool-card" id="backend-diagnostics-card">
<div class="card-heading backend-card-heading">
<h2 data-i18n="vhHealthTitle">Backends</h2>
<div class="backend-table-tools">
<label class="sr-only" data-i18n="backendSearch" for="pool-search">Search
backends</label>
<input autocomplete="off" data-i18n-aria="backendSearch"
data-i18n-placeholder="backendSearchPlaceholder" id="pool-search" type="search" />
<label class="backend-sort-control"><span data-i18n="backendSortBy">Sort
by</span><select data-i18n-aria="backendSortBy" id="pool-sort">
<option data-i18n="vhVhost" value="vhost">Vhost</option>
<option data-i18n="backend" value="backend">Backend</option>
<option data-i18n="status" value="status">Status</option>
<option data-i18n="vhActive" value="active">Active</option>
<option data-i18n="vhRequests" value="requests">Requests</option>
<option data-i18n="vhErrors" value="errors">Errors</option>
<option data-i18n="vhLatency" value="latency">Latency</option>
<option data-i18n="vhTraffic" value="traffic">Traffic/s</option>
<option data-i18n="vhClientGeneration" value="generation">Client gen.</option>
<option data-i18n="vhGenerationRequests" value="generationRequests">Gen.
requests</option>
<option data-i18n="vhGenerationAge" value="generationAge">Gen. age</option>
<option data-i18n="vhClientRotations" value="rotations">Rotations</option>
<option data-i18n="vhLastFailure" value="lastFailure">Last failure</option>
<option data-i18n="vhLastRecovery" value="lastRecovery">Last recovery</option>
</select></label>
<button class="quiet backend-sort-direction" data-i18n-aria="backendSortAscending"
id="pool-sort-direction" type="button">↑</button>
<details class="backend-column-picker">
<summary class="quiet" data-i18n="backendColumns">Columns</summary>
<div class="backend-column-options">
<label class="check"><input checked data-pool-column-toggle="vhost"
type="checkbox" /><span data-i18n="vhVhost">Vhost</span></label>
<label class="check"><input checked data-pool-column-toggle="backend"
type="checkbox" /><span data-i18n="backend">Backend</span></label>
<label class="check"><input checked data-pool-column-toggle="status"
type="checkbox" /><span data-i18n="status">Status</span></label>
<label class="check"><input checked data-pool-column-toggle="active"
type="checkbox" /><span data-i18n="vhActive">Active</span></label>
<label class="check"><input checked data-pool-column-toggle="requests"
type="checkbox" /><span data-i18n="vhRequests">Requests</span></label>
<label class="check"><input checked data-pool-column-toggle="errors"
type="checkbox" /><span data-i18n="vhErrors">Errors</span></label>
<label class="check"><input checked data-pool-column-toggle="latency"
type="checkbox" /><span data-i18n="vhLatency">Latency</span></label>
<label class="check"><input checked data-pool-column-toggle="traffic"
type="checkbox" /><span data-i18n="vhTraffic">Traffic/s</span></label>
<label class="check"><input checked data-pool-column-toggle="generation"
type="checkbox" /><span data-i18n="vhClientGeneration">Client
gen.</span></label>
<label class="check"><input checked data-pool-column-toggle="generationRequests"
type="checkbox" /><span data-i18n="vhGenerationRequests">Gen.
requests</span></label>
<label class="check"><input checked data-pool-column-toggle="generationAge"
type="checkbox" /><span data-i18n="vhGenerationAge">Gen.
age</span></label>
<label class="check"><input checked data-pool-column-toggle="rotations"
type="checkbox" /><span
data-i18n="vhClientRotations">Rotations</span></label>
<label class="check"><input checked data-pool-column-toggle="lastFailure"
type="checkbox" /><span data-i18n="vhLastFailure">Last
failure</span></label>
<label class="check"><input checked data-pool-column-toggle="lastRecovery"
type="checkbox" /><span data-i18n="vhLastRecovery">Last
recovery</span></label>
</div>
</details>
<button class="quiet" data-i18n="vhManage" id="pool-open" type="button">Manage
vhosts</button>
<article class="card pool-card" id="backend-diagnostics-card"
data-dashboard-widget="backend_table">
<div class="card-heading backend-card-heading">
<h2 data-i18n="vhHealthTitle">Backends</h2>
<div class="backend-table-tools">
<label class="sr-only" data-i18n="backendSearch" for="pool-search">Search
backends</label>
<input autocomplete="off" data-i18n-aria="backendSearch"
data-i18n-placeholder="backendSearchPlaceholder" id="pool-search"
type="search" />
<label class="backend-sort-control"><span data-i18n="backendSortBy">Sort
by</span><select data-i18n-aria="backendSortBy" id="pool-sort">
<option data-i18n="vhVhost" value="vhost">Vhost</option>
<option data-i18n="backend" value="backend">Backend</option>
<option data-i18n="status" value="status">Status</option>
<option data-i18n="vhActive" value="active">Active</option>
<option data-i18n="vhRequests" value="requests">Requests</option>
<option data-i18n="vhErrors" value="errors">Errors</option>
<option data-i18n="vhLatency" value="latency">Latency</option>
<option data-i18n="vhTraffic" value="traffic">Traffic/s</option>
<option data-i18n="vhClientGeneration" value="generation">Client gen.
</option>
<option data-i18n="vhGenerationRequests" value="generationRequests">Gen.
requests</option>
<option data-i18n="vhGenerationAge" value="generationAge">Gen. age</option>
<option data-i18n="vhClientRotations" value="rotations">Rotations</option>
<option data-i18n="vhLastFailure" value="lastFailure">Last failure</option>
<option data-i18n="vhLastRecovery" value="lastRecovery">Last recovery
</option>
</select></label>
<button class="quiet backend-sort-direction" data-i18n-aria="backendSortAscending"
id="pool-sort-direction" type="button">↑</button>
<details class="backend-column-picker">
<summary class="quiet" data-i18n="backendColumns">Columns</summary>
<div class="backend-column-options">
<label class="check"><input checked data-pool-column-toggle="vhost"
type="checkbox" /><span data-i18n="vhVhost">Vhost</span></label>
<label class="check"><input checked data-pool-column-toggle="backend"
type="checkbox" /><span data-i18n="backend">Backend</span></label>
<label class="check"><input checked data-pool-column-toggle="status"
type="checkbox" /><span data-i18n="status">Status</span></label>
<label class="check"><input checked data-pool-column-toggle="active"
type="checkbox" /><span data-i18n="vhActive">Active</span></label>
<label class="check"><input checked data-pool-column-toggle="requests"
type="checkbox" /><span
data-i18n="vhRequests">Requests</span></label>
<label class="check"><input checked data-pool-column-toggle="errors"
type="checkbox" /><span data-i18n="vhErrors">Errors</span></label>
<label class="check"><input checked data-pool-column-toggle="latency"
type="checkbox" /><span data-i18n="vhLatency">Latency</span></label>
<label class="check"><input checked data-pool-column-toggle="traffic"
type="checkbox" /><span
data-i18n="vhTraffic">Traffic/s</span></label>
<label class="check"><input checked data-pool-column-toggle="generation"
type="checkbox" /><span data-i18n="vhClientGeneration">Client
gen.</span></label>
<label class="check"><input checked
data-pool-column-toggle="generationRequests" type="checkbox" /><span
data-i18n="vhGenerationRequests">Gen.
requests</span></label>
<label class="check"><input checked data-pool-column-toggle="generationAge"
type="checkbox" /><span data-i18n="vhGenerationAge">Gen.
age</span></label>
<label class="check"><input checked data-pool-column-toggle="rotations"
type="checkbox" /><span
data-i18n="vhClientRotations">Rotations</span></label>
<label class="check"><input checked data-pool-column-toggle="lastFailure"
type="checkbox" /><span data-i18n="vhLastFailure">Last
failure</span></label>
<label class="check"><input checked data-pool-column-toggle="lastRecovery"
type="checkbox" /><span data-i18n="vhLastRecovery">Last
recovery</span></label>
</div>
</details>
<button class="quiet" data-i18n="vhManage" id="pool-open" type="button">Manage
vhosts</button>
</div>
</div>
</div>
<div class="table-scroll">
<table class="pool-table">
<thead>
<tr>
<th data-i18n="vhVhost" data-pool-column="vhost">Vhost</th>
<th data-i18n="backend" data-pool-column="backend">Backend</th>
<th data-i18n="status" data-pool-column="status">Status</th>
<th data-i18n="vhActive" data-pool-column="active">Active</th>
<th data-i18n="vhRequests" data-pool-column="requests">Requests</th>
<th data-i18n="vhErrors" data-pool-column="errors">Errors</th>
<th data-i18n="vhLatency" data-pool-column="latency">Latency</th>
<th data-i18n="vhTraffic" data-pool-column="traffic">Traffic/s</th>
<th data-i18n="vhClientGeneration" data-pool-column="generation">Client gen.
</th>
<th data-i18n="vhGenerationRequests" data-pool-column="generationRequests">Gen.
requests</th>
<th data-i18n="vhGenerationAge" data-pool-column="generationAge">Gen. age</th>
<th data-i18n="vhClientRotations" data-pool-column="rotations">Rotations</th>
<th data-i18n="vhLastFailure" data-pool-column="lastFailure">Last failure</th>
<th data-i18n="vhLastRecovery" data-pool-column="lastRecovery">Last recovery
</th>
</tr>
</thead>
<tbody id="pool-rows"></tbody>
</table>
</div>
<p class="fine" data-i18n="vhHealthEmpty" id="pool-empty">No backend diagnostics yet.</p>
</article>
<div class="table-scroll">
<table class="pool-table">
<thead>
<tr>
<th data-i18n="vhVhost" data-pool-column="vhost">Vhost</th>
<th data-i18n="backend" data-pool-column="backend">Backend</th>
<th data-i18n="status" data-pool-column="status">Status</th>
<th data-i18n="vhActive" data-pool-column="active">Active</th>
<th data-i18n="vhRequests" data-pool-column="requests">Requests</th>
<th data-i18n="vhErrors" data-pool-column="errors">Errors</th>
<th data-i18n="vhLatency" data-pool-column="latency">Latency</th>
<th data-i18n="vhTraffic" data-pool-column="traffic">Traffic/s</th>
<th data-i18n="vhClientGeneration" data-pool-column="generation">Client gen.
</th>
<th data-i18n="vhGenerationRequests" data-pool-column="generationRequests">
Gen.
requests</th>
<th data-i18n="vhGenerationAge" data-pool-column="generationAge">Gen. age
</th>
<th data-i18n="vhClientRotations" data-pool-column="rotations">Rotations
</th>
<th data-i18n="vhLastFailure" data-pool-column="lastFailure">Last failure
</th>
<th data-i18n="vhLastRecovery" data-pool-column="lastRecovery">Last recovery
</th>
</tr>
</thead>
<tbody id="pool-rows"></tbody>
</table>
</div>
<p class="fine" data-i18n="vhHealthEmpty" id="pool-empty">No backend diagnostics yet.</p>
</article>
</div>
</section>
<section class="panel" hidden="" id="panel-vhosts">
<p class="notice fine" data-i18n="vhIntro">Each vhost owns its bound IPs, paths and backends.
@@ -1899,7 +2372,10 @@
<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="themeUltraDark" value="ultra_dark">Ultra dark ·
near-black</option>
<option data-i18n="themeLight" value="light">Light</option>
<option data-i18n="themeCream" value="cream">Warm cream</option>
</select></label>
<label><span data-i18n="language">Language</span><select aria-label="Language"
data-i18n-aria="language" id="language"></select></label>
@@ -1922,6 +2398,18 @@
</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>
<label><span data-i18n="cornerStyle">Corner rounding</span><select
id="ui-corner-style">
<option data-i18n="cornerStyleDefault" value="default">Original
(theme-independent)</option>
<option data-i18n="cornerStyleSquare" value="square">Square</option>
<option data-i18n="cornerStyleSubtle" value="subtle">Subtle</option>
<option data-i18n="cornerStyleRounded" value="rounded">Rounded</option>
<option data-i18n="cornerStyleExtra" value="extra">Extra rounded
</option>
</select><small class="fine" data-i18n="cornerStyleHelp">Controls corners
throughout the interface independently of the theme. Original keeps the
previous geometry.</small></label>
</div>
</section>
<section class="appearance-section">
@@ -2002,6 +2490,10 @@
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>
<button class="outline dashboard-layout-open-settings" type="button"
id="overview-layout-open-settings"
data-i18n="overviewLayoutEditorOpenSettings">Visual layout
editor</button>
<div class="dashboard-widget-list" id="dashboard-widget-list"></div>
<small class="fine" data-i18n="streamWidgetSettingsHelp">Stream cards are
opt-in and only change Dashboard presentation, not Stream routing or
@@ -3328,6 +3820,67 @@
type="button">Cancel</button></div>
</form>
</dialog>
<dialog aria-labelledby="overview-layout-dialog-title" aria-modal="true" class="audit-dialog overview-layout-dialog"
id="overview-layout-dialog">
<div class="window-heading">
<div><span class="small-label" data-i18n="dashboardWidgets">Overview cards</span>
<h2 id="overview-layout-dialog-title" data-i18n="overviewLayoutEditorTitle">Arrange Overview cards</h2>
</div>
</div>
<div class="overview-layout-body">
<p class="fine" data-i18n="overviewLayoutEditorHelp">Drag visible cards to change their order. Changes are
saved only when you select Save.</p>
<section aria-labelledby="overview-layout-visible-title">
<h3 id="overview-layout-visible-title" data-i18n="overviewLayoutEditorVisible">Visible cards</h3>
<div class="overview-layout-grid" id="overview-layout-visible" role="list"></div>
</section>
<section aria-labelledby="overview-layout-hidden-title">
<div class="overview-layout-section-heading">
<h3 id="overview-layout-hidden-title" data-i18n="overviewLayoutEditorHidden">Hidden cards</h3>
<div class="overview-layout-filters">
<select id="overview-layout-type-filter" data-i18n-aria="overviewLayoutTypeFilter"
aria-label="Filter blocks by type">
<option value="all" data-i18n="overviewBlockTypeAll">All block types</option>
<option value="value" data-i18n="overviewBlockTypeValue">Number</option>
<option value="value_chart" data-i18n="overviewBlockTypeValueChart">Number + chart</option>
<option value="chart" data-i18n="overviewBlockTypeChart">Chart</option>
<option value="panel" data-i18n="overviewBlockTypePanel">Diagnostics panel</option>
<option value="table" data-i18n="overviewBlockTypeTable">Table</option>
</select>
<input id="overview-layout-search" type="search"
data-i18n-placeholder="overviewLayoutEditorSearch" aria-label="Find hidden card"
data-i18n-aria="overviewLayoutEditorSearch" autocomplete="off" />
</div>
</div>
<div class="overview-layout-hidden-list" id="overview-layout-hidden" role="list"></div>
</section>
</div>
<div class="overview-layout-footer">
<p id="overview-layout-message" role="alert" aria-live="polite"></p>
<button class="quiet" id="overview-layout-default" type="button"
data-i18n="overviewLayoutDefaultPreview">Default view</button>
<button class="outline" id="overview-layout-reset" type="button" data-i18n="overviewLayoutReset">Reset
layout</button>
<button class="quiet" id="overview-layout-cancel" type="button"
data-i18n="overviewLayoutEditorCancel">Cancel</button>
<button class="primary" id="overview-layout-save" type="button" data-i18n="overviewLayoutEditorSave">Save
layout</button>
</div>
</dialog>
<dialog aria-labelledby="overview-reset-confirm-title" aria-modal="true" class="audit-dialog overview-reset-confirm"
id="overview-reset-confirm">
<div class="window-heading">
<h2 id="overview-reset-confirm-title" data-i18n="overviewLayoutResetTitle">Reset dashboard layout?</h2>
</div>
<p data-i18n="overviewLayoutResetConfirm">This restores the default order and visibility of all Overview blocks.
Other settings remain unchanged.</p>
<div class="overview-layout-footer">
<button class="quiet" id="overview-reset-cancel" type="button"
data-i18n="overviewLayoutEditorCancel">Cancel</button>
<button class="primary" id="overview-reset-apply" type="button" data-i18n="overviewLayoutResetApply">Reset
and save</button>
</div>
</dialog>
<dialog aria-labelledby="tunnels-dialog-title" class="audit-dialog" id="tunnels-dialog">
<div class="window-heading">
<div><span class="small-label">WEBSOCKET / CONNECT</span>