v0.32.6_fix2

This commit is contained in:
Mateusz Gruszczyński committed 2026-10-14 11:51:37 +02:00
1 parent e1ac899ec0
commit fc8711d4d8
39 files changed
+695 -232

No files matched your search

+2 -2
View File
@@ -94,7 +94,7 @@ framework extraction failures are not guaranteed to have that JSON shape.
`status.streams` contains `active`, `desired`, `restart_required` and a `metrics` map keyed by startup-active stream ID. Stream counters include active/total/completed sessions, rejects, errors, RX/TX bytes and UDP packet counts; the dashboard derives rates from byte-counter deltas.
| `GET /api/logs` | Recent bounded access entries, ring capacity and contention-drop count |
| `GET /api/audit` | Last 100 audit entries; database retention is 10,000 |
| `GET /api/events` | SSE `snapshot` events containing status and logs |
| `GET /api/events` | SSE `snapshot` events containing status and logs; the compact status includes `live_system` for CPU/RSS/network charts |
| `GET /metrics` | Prometheus text exposition |
| `GET /api/metrics` | Alias of `/metrics` |
@@ -102,7 +102,7 @@ Except for health and authentication/bootstrap routes, these endpoints require a
session. These administrative previews are not anonymous. The separate configurable
exporter uses its own CIDRs and optional bearer token; see the scrape section below.
SSE has eight viewer slots, generates a snapshot every 1/2/5/10 seconds per authenticated client (via `?interval=`, default 2)
SSE has eight viewer slots, generates a snapshot every 1/2/3/5/10 seconds per authenticated client (via `?interval=`, default 3)
and rechecks session validity. It does not queue an unlimited per-viewer event log
or guarantee replay. The browser falls back to compact status/log polling only after SSE fails and stops polling after its recovery. Invalid SSE intervals are rejected with 422. An active dashboard renews
idle activity, not the absolute session deadline.
+2 -2
View File
@@ -44,14 +44,14 @@ The existing **Generate / rotate token** form still creates new Key IDs (and ret
| Preference | Default | Allowed seconds |
|---|---:|---|
| `refresh.live_enabled` | `true` | `true`, `false` |
| `refresh.overview_seconds` | 2 | 1, 2, 5, 10 |
| `refresh.overview_seconds` | 3 | 1, 2, 3, 5, 10 |
| `refresh.traffic_seconds` | 5 | 0, 3, 5, 10, 30 |
| `refresh.cache_seconds` | 5 | 0, 3, 5, 10, 30 |
| `refresh.system_info_seconds` | 60 | 0, 15, 30, 60, 300 |
`live_enabled=false` disables automatic SSE **and all polling**, including system information. `0` disables only that source's automatic polling. Overview and System information have **Refresh now** buttons; Traffic and Cache retain their own buttons, filters, charts and pagination. The per-view Auto checkboxes for Traffic/Cache/Transform and the Docker live switch remain independent opt-outs, and none changes another administrator's preferences. **Reset section** restores refresh defaults without changing theme or unrelated preferences.
The main `/api/events?interval=N` connection (allowlisted 1/2/5/10, default 2 seconds) carries compact live status plus the existing bounded log snapshot. The server checks the session on every event and retains its heartbeat, viewer cap and normal disconnect cleanup. On an SSE error the browser polls `/api/status?view=live` and `/api/logs` until snapshots resume, not concurrently during healthy streaming. The old full `/api/status` response is kept for API clients and initial diagnostics. The separate authenticated `/api/system-info` reuses cached diagnostics and ACME metadata, never runs diagnostic subprocesses per request, and is fetched automatically only for Overview or the relevant Settings pages. A hidden browser tab pauses the channel and all automatic polling; returning revalidates its session before normal operation. All interval changes take effect immediately, without reloading or changing any server-global cadence.
The main `/api/events?interval=N` connection (allowlisted 1/2/3/5/10, default 3 seconds) carries compact live status, cached CPU/RSS/aggregate and per-interface network chart samples from the server's existing background OS collector, plus the existing bounded log snapshot. The server checks the session on every event and retains its heartbeat, viewer cap and normal disconnect cleanup. On an SSE error the browser polls `/api/status?view=live` and `/api/logs` until snapshots resume, not concurrently during healthy streaming. The old full `/api/status` response is kept for API clients and initial diagnostics. Process/System detail values still update only after the separate authenticated `/api/system-info` read at `refresh.system_info_seconds`, while CPU/RSS and network **charts** follow the Overview live cadence (3 seconds by default). The `/api/system-info` endpoint reuses cached diagnostics and ACME metadata, never runs diagnostic subprocesses per request, and is fetched automatically only for Overview or the relevant Settings pages. A hidden browser tab pauses the channel and all automatic polling; returning revalidates its session before normal operation. All interval changes take effect immediately, without reloading or changing any server-global cadence.
## System information (0.30.1)
+48
View File
@@ -1,5 +1,53 @@
# Verification report - RustProxy 0.32.6
## 0.32.6 development follow-up — live diagnostic charts / mobile scroll
- The existing server diagnostics collector samples OS and process metrics in
the background, with a 2-second idle delay between collection passes
(sampling work can add time). Compact live status / SSE now
exposes its **cached** `live_system` (sample timestamp, host/process CPU,
process RSS, aggregate RX/TX rates and interface rates), without invoking a
new OS measurement or fetching `/api/system-info` on each live event.
- Live Overview charts use the administrator's `overview_seconds` (default **3**,
accepted 1/2/3/5/10, including existing persisted 2-second preferences).
Process/System *detail text* still updates only with the configured
`system_info_seconds` (default **60**). Network chart RX/TX now reflects
recently sampled interface rates rather than 60-second-old repeated values.
- Disabled the nested `overflow:auto` network-interface list on narrow
Overview containers. Stable SVG/text DOM remains in place, to reduce
unexpected WebKit touch/momentum scroll anchoring. This is a mitigation;
the exact source of the iOS 27 jump remains unverified on physical Safari.
- Protocol badge Origin uses the same control radius as the adjacent policy
pills for custom presets, and the same 0px baseline for the default preset;
observed green/unknown neutral colors are unchanged.
- `live_diagnostics_0326_browser.py`: real diagnostic renderer with 35 live
updates verifies fast chart data and slow Process details, no chart DOM
replacement or scroll movement, no extra sample from a slow-system-only
refresh, touch-sized network list and both custom/default badge radii.
`mobile_protocol_0326_browser.py` covers all custom radii at six widths.
- Prior source/UI tests: all pre-Cargo checks passed; compilation and Rust
integration tests not run (Cargo absent). The Chromium fixture does **not**
establish Safari/iOS 27 acceptance.
## 0.32.6 development follow-up — suspended rate charts
- Added `src/admin/web/app/rate-sampling.js` to the authenticated Rust
administration bundle. The shared policy records tab background/pagehide
epochs and ignores intervals longer than three configured refresh periods
(at least 10 seconds). It validates counter monotonicity and declines
counter-derived rates across the gap, preserving existing history.
- Updated Cache HIT/MISS/BYPASS, Transform metrics, Overview HTTP/protocol/
cache-outcome deltas, optional small/wide rate and share charts, HTTP
backend monitor, Stream traffic and Vhost/Stream detailed charts. Fresh
absolute CPU/RAM/system observations and independent system-info reads
retain their previous behavior. Visible missing rates show `-`, not `0/s`.
- Added `tools/checks/rate_pause_0326_ui_test.mjs`: real Cache/Transform
chart functions with a simulated DOM and clock. Tests normal idle 0/s,
long gaps, short hide/show, pagehide/BFCache, counter resets, sample
continuity and 30-second refresh support. This is not a live Safari test.
- **Pending:** Cargo checks/compilation, real server/SSE data, mobile Safari
tab suspension and BFCache tests.
## 0.32.6 development follow-up — badge grouping and chart cadence
- Moved each observed upstream HTTP protocol badge into its Vhost's existing