Skip to content

Add node heatmaps to the overview and node lists - #504

Merged
Kerrycek merged 1 commit into
mainfrom
codex/node-heatmaps
Sep 24, 2026
Merged

Kerrycek merged 1 commit into
mainfrom
codex/node-heatmaps

Conversation

@Kerrycek

Copy link
Copy Markdown
Owner

English

The legacy overview provides a heatmap action after cgroups, but the new UI has no equivalent. Add a labeled Heatmap button to the public node table/cards and the member/admin node lists. It opens a large responsive dialog (fullscreen on mobile) with the existing live Goresheat page, CPU/disk description, a persistent Close button and an Open in new tab fallback.

The integration reads the existing public webui/goresheat_url SystemConfig setting. It uses the exact node FQDN path and legacy eligibility: type node or storage, maintenance_lock=no. No hardcoded service host or new backend endpoint. External charts load only after clicking; closing removes the iframe. Missing, failed or unsafe configuration leaves the node list usable without heatmap actions. URLs must be HTTPS and contain no credentials; no application token is added to chart URLs and iframe referrers are suppressed.

Implementation includes an opt-in XL size for the existing Modal and a viewport height token, plus Czech/English labels. No existing modal size changes.

Validation:

  • Typecheck, repository lint, i18n audit and production build passed.
  • 27 unit tests passed (URL/eligibility validation, node normalization and public overview).
  • 22 fixture Playwright checks passed across node heatmaps, existing node filters and public overview on Chromium desktop/mobile; final heatmap-only suite including unavailable configuration passed 16/16.
  • Browser coverage includes cs/en public/member/admin entrypoints, lazy frame loading, actual frame navigation to a synthetic endpoint, eligibility, exact configured URL, close/Escape, focus return and viewport bounds. New main cases are tagged for PR smoke.
  • Inspected screenshots of both lists and the mobile dialog. These use synthetic fixture data, not production telemetry or live VM evidence.
  • Read-only inspection of legacy page_index.php, goresheat.js, plugin config and SystemConfig API. Current Goresheat page returned HTTP 200 without X-Frame-Options/frame-ancestors restrictions. Its live WebSocket charts were not exercised by these fixture tests.

Risk: rendering still depends on the configured external Goresheat service and its framing policy. A direct external link remains available. No API mutation, migration, merge or deployment included.

Česky

Doplňuje chybějící heatmapy ze starého UI. Tlačítko Heatmapa je napravo od cgroups ve veřejném přehledu a mezi akcemi v seznamu nodů člena/admina; na mobilu v kartách. Otevírá velké okno s grafy, na mobilu přes celou obrazovku, s odkazem do nové karty a dostupným zavřením.

Používá stávající veřejnou konfiguraci webui/goresheat_url, skutečné FQDN nodu a stejné podmínky jako staré UI: výpočetní/storage node bez zámku údržby. Grafy se načítají až na vyžádání a po zavření se iframe odstraní. Chybějící konfigurace ani její chyba nezablokuje seznam. Jen HTTPS adresy bez přihlašovacích údajů; bez tokenu aplikace v odkazu.

Ověřeno: typecheck, lint, překlady, build, 27 unit testů, 22 širších desktop/mobile Playwright kontrol a následně finální sada heatmap 16/16 včetně chybějící/nedostupné konfigurace. České/anglické UI, anonym/člen/admin, URL, zavření, fokus a responzivní okno; vizuálně zkontrolované screenshoty. Jde o fixture testy, ne live VM ani produkční telemetrii. Goresheat ověřen read-only přes HTTP; jeho živé WebSocket grafy testy nenahrazují.

Bez změny backendu či nasazení. Dostupnost grafů závisí na službě Goresheat; záložní odkaz do samostatné karty zůstává k dispozici.

Use the public Goresheat setting and per-node FQDN links from the legacy
UI. Open charts on demand in a responsive dialog from public, member and
admin node lists while preserving node-type and maintenance eligibility.
@Kerrycek
Kerrycek merged commit e136799 into main Sep 24, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant