CluPilotCloud/resources/views/livewire/admin
nexxo 665a0c4e08
tests / pest (push) Failing after 9m29s Details
tests / assets (push) Successful in 20s Details
tests / release (push) Has been skipped Details
Release v1.3.91 — die Host-Seite zeigt Last statt Ausstattung
Die Karte "Rechenleistung" zeigte keine Leistung. 12 Kerne und 63 GB sind die
Ausstattung des Blechs und ändern sich nie — sie standen aber im selben
Kartenraster wie "Zustand" und "Speicher", die beide leben. Wer die Seite
öffnete, um zu sehen, wie es dem Host geht, las dort eine Zahl, die das nie
sagen konnte.

An ihrer Stelle steht jetzt die Last: CPU und RAM als Stundenkurve, beide in
Prozent auf EINER Achse, dazu die aktuellen Werte als beschriftete Zahlen.

Die Geschichte kommt aus Proxmox' eigener Aufzeichnung
(/nodes/{node}/rrddata), nicht aus einem eigenen Sampler. Ein Sampler hieße
neue Tabelle, minütlicher Job, Aufräum-Job und ~1440 Zeilen je Host und Tag —
um weniger genau nachzubauen, was ohnehin auf der Platte liegt. Die RRD ist ab
der ersten Sekunde gefüllt, auch für die Stunde vor dem ersten Hinsehen, und
kann nicht von dem abweichen, was Proxmox' eigene Oberfläche zeigt.

Eine Lücke bleibt eine Lücke: ein Punkt ohne Messwert wird null, nie 0, und
spanGaps steht auf false. Dieselbe Regel wie in instance_metrics. Antwortet der
Host gar nicht, sagt die Tafel das in einem Satz, statt eine ruhige Stunde zu
zeichnen — auf dem Testhost live bestätigt.

Der Fehler, den das ans Licht gebracht hat
------------------------------------------

x-ui.chart steht überall unter wire:ignore, sonst zerstört Livewire das Canvas.
Ein Poll erreicht den Chart also nie. Dafür bekam das Bauteil ein optionales
update-on: es hört auf ein Fenster-Ereignis und tauscht die Daten IM
bestehenden Chart.js-Objekt.

Das lief nicht. Die Zahlen neben der Kurve wanderten, die Kurve nicht, und
chart.update() starb still im Legenden-Plugin:

    TypeError: Cannot set properties of undefined (setting 'fullSize')

Grund: die Chart.js-Instanz lag als Eigenschaft im Alpine-Objekt und wurde
damit reaktiv umhüllt. Chart.js' Plugin-Innenleben überlebt das Proxy nicht.
Gemessen statt geschlossen: dieselbe Instanz wirft über das Proxy und läuft
über Alpine.raw(). Sie liegt jetzt in der Closure.

Aufgefallen ist es nie, weil bis zum ersten Live-Chart kein einziger Chart in
diesem Repo je update() gerufen hat — konstruieren und Erstzeichnen gehen durch
die Hülle noch. tests/Feature/ChartLiveUpdateTest.php hält die Regel fest,
damit der nächste Live-Chart nicht denselben Nachmittag kostet.

Der Rest
--------

- Version lesbar: "Proxmox VE 9.2.6" statt pve-manager/9.2.6/7f8d…, mitten in
  der Bau-Kennung abgeschnitten. Die Kennung steht klein darunter. Eine
  unerwartete Form wird unverändert durchgereicht statt verschluckt.
- Vier Kleinkarten (Mgmt-IP, Node, Version, Instanzen) sind eine
  Ausstattungs-Tafel geworden. Die Instanzen-Anzahl steht in der Überschrift
  der Liste, die sie ohnehin zeigt.
- Der Übernahme-Fortschritt klappt zu, sobald sie durch ist. Fünfzehn
  abgehakte Schritte sind auf einem laufenden Host kein Dauerinhalt —
  aufklappbar über <details>, ohne JavaScript.
- PlanVersion::requiredTemplateVmids() ersetzt die dritte Kopie derselben
  Fensterlogik.
- BuildVmTemplate sagt nicht mehr "this takes 10–20 minutes". Das war eine
  Schätzung vor dem ersten Lauf; gemessen waren es unter zwei. Eine Konsole,
  die falsch vorhersagt, erzieht dazu, sie zu ignorieren.

Geprüft: 2281 Tests grün, Pint sauber, Codex ohne Befund. Die Farbwahl gegen
den Validator gerechnet (ΔE 28,3 protan / 39,2 normal; der Akzent liegt unter
3:1 gegen die Fläche, deshalb tragen beide Reihen sichtbare Beschriftung). Im
Browser: null Konsolenfehler über einen vollen Poll-Zyklus, und die Kurve
wandert auf dem echten Poll ohne Neuladen — mit eingespielten Messwerten
belegt, weil die Testhosts in TEST-NET liegen und nie antworten.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-01 10:24:21 +02:00
..
capacity.blade.php Take the order, park it, and say when it will be delivered 2026-07-29 18:50:46 +02:00
check-result.blade.php Pruefergebnis als Modal statt am Seitenende 2026-07-31 21:36:43 +02:00
close-dunning-case.blade.php Mahnwesen: Einstellungen und die zwei Eingriffe von Hand 2026-07-31 22:43:52 +02:00
confirm-delete-datacenter.blade.php One definition of the navigation, and the country instead of the building 2026-07-27 16:09:39 +02:00
confirm-delete-incident.blade.php Let an incident be deleted, and start measuring whether the hosts answer 2026-07-29 15:16:48 +02:00
confirm-delete-plan-draft.blade.php feat(admin): a console for creating, pricing and scheduling plans 2026-07-26 12:41:51 +02:00
confirm-delete-vpn-peer.blade.php feat(admin): VPN access management with live peer state 2026-07-25 21:38:12 +02:00
confirm-disable-two-factor.blade.php Replace native confirm() dialogs with the app's own modal pattern 2026-07-28 19:34:27 +02:00
confirm-end-other-sessions.blade.php Show where an account is signed in, and let it sign the other places out 2026-07-28 23:38:17 +02:00
confirm-forget-secret.blade.php Replace native confirm() dialogs with the app's own modal pattern 2026-07-28 19:34:27 +02:00
confirm-generate-ssh-key.blade.php Hetzner-Cloud-DNS, Bereitschaftsseite aus sich heraus behebbar 2026-07-31 19:50:01 +02:00
confirm-publish-dpa.blade.php Deliver the processing agreement, and hold the proof it was accepted 2026-07-30 16:56:57 +02:00
confirm-reissue-vpn-peer.blade.php Replace native confirm() dialogs with the app's own modal pattern 2026-07-28 19:34:27 +02:00
confirm-remove-host.blade.php One definition of the navigation, and the country instead of the building 2026-07-27 16:09:39 +02:00
confirm-restart-instance.blade.php Restart a machine, enforce the quota that was sold, end a route that ended 2026-07-29 18:28:28 +02:00
confirm-save-env.blade.php Add a raw .env editor to the Integrations page, with a net under it 2026-07-29 01:51:27 +02:00
confirm-save-secret.blade.php Replace native confirm() dialogs with the app's own modal pattern 2026-07-28 19:34:27 +02:00
confirm-switch-mode.blade.php Put the switch where it governs, and say when it is thrown 2026-07-30 15:09:38 +02:00
confirm-sync-catalogue.blade.php Hetzner-Cloud-DNS, Bereitschaftsseite aus sich heraus behebbar 2026-07-31 19:50:01 +02:00
customer-detail.blade.php Let an operator correct a customer's details 2026-07-29 23:18:46 +02:00
customers.blade.php Ask whether they are a consumer, and let one change their mind 2026-07-29 21:06:06 +02:00
datacenters.blade.php Let a datacenter code be corrected while nothing depends on it, and say which building 2026-07-28 22:25:21 +02:00
edit-customer.blade.php Take the address by field, fix the customer type, ask why they leave 2026-07-30 16:41:32 +02:00
edit-datacenter.blade.php R24: a modal is never taller than the screen 2026-07-29 23:33:57 +02:00
edit-export-target.blade.php R24: a modal is never taller than the screen 2026-07-29 23:33:57 +02:00
edit-invoice-series.blade.php R24: a modal is never taller than the screen 2026-07-29 23:33:57 +02:00
edit-mail-template.blade.php R24: a modal is never taller than the screen 2026-07-29 23:33:57 +02:00
edit-plan-family.blade.php R24: a modal is never taller than the screen 2026-07-29 23:33:57 +02:00
extend-dunning-deadline.blade.php Mahnwesen: Einstellungen und die zwei Eingriffe von Hand 2026-07-31 22:43:52 +02:00
finance.blade.php Quote what a person pays, and tab the settings page 2026-07-29 19:18:10 +02:00
grant-plan.blade.php R24: a modal is never taller than the screen 2026-07-29 23:33:57 +02:00
host-create.blade.php Rebuild Add host as a page with one job, and let downloads through the gate 2026-07-30 21:51:30 +02:00
host-detail.blade.php Release v1.3.91 — die Host-Seite zeigt Last statt Ausstattung 2026-08-01 10:24:21 +02:00
hosts.blade.php Rebuild Add host as a page with one job, and let downloads through the gate 2026-07-30 21:51:30 +02:00
inbox.blade.php Read the mailbox password where it actually is, and let the console test it 2026-07-30 13:12:29 +02:00
incidents.blade.php Let an incident be deleted, and start measuring whether the hosts answer 2026-07-29 15:16:48 +02:00
instance-admin-access.blade.php R24: a modal is never taller than the screen 2026-07-29 23:33:57 +02:00
instances.blade.php Restart a machine, enforce the quota that was sold, end a route that ended 2026-07-29 18:28:28 +02:00
integrations.blade.php Testergebnis erscheint am Feld statt am Seitenende; DNS-Token bekommt einen Testknopf 2026-07-31 21:26:14 +02:00
invoices.blade.php Write an invoice for work that came off no price list 2026-07-29 20:12:26 +02:00
mail-log.blade.php Keep a register of what was sent, and answer the customer from here 2026-07-29 21:02:36 +02:00
mail-preview.blade.php Accept terms instead of a start date, and fix the sender no server accepts 2026-07-30 15:22:35 +02:00
mail-templates.blade.php Say that a click landed, and make moving one actually move it 2026-07-29 23:06:30 +02:00
mail.blade.php Hetzner-Cloud-DNS, Bereitschaftsseite aus sich heraus behebbar 2026-07-31 19:50:01 +02:00
maintenance.blade.php Show times on the operator's clock, keep storing them in UTC 2026-07-27 17:32:21 +02:00
new-invoice.blade.php Write an invoice for work that came off no price list 2026-07-29 20:12:26 +02:00
overview.blade.php Keep a register of what was sent, and answer the customer from here 2026-07-29 21:02:36 +02:00
payment-problems.blade.php Mahnwesen: Einstellungen und die zwei Eingriffe von Hand 2026-07-31 22:43:52 +02:00
plan-versions.blade.php Sell the year as well as the month, and say what it saves 2026-07-30 15:44:35 +02:00
plans.blade.php Let the owner mark one plan as recommended, from the console 2026-07-29 14:22:22 +02:00
processing-agreements.blade.php Store the agreement where the web process can actually read it 2026-07-30 17:19:39 +02:00
provisioning.blade.php Match the panel to the approved template, measured rather than assumed 2026-07-27 17:08:05 +02:00
proxy-hosts.blade.php Fill the hostname page from the installation, not from a blank form 2026-07-31 00:53:12 +02:00
readiness.blade.php Hetzner-Cloud-DNS, Bereitschaftsseite aus sich heraus behebbar 2026-07-31 19:50:01 +02:00
record-withdrawal.blade.php Charge the price the website shows, and hand a withdrawal back in full 2026-07-29 22:42:02 +02:00
reissue-takeover.blade.php Release v1.3.82 — Übernahme-Befehlszeile neu ausstellen 2026-08-01 01:00:53 +02:00
resolve-failed-checkout.blade.php R20: Begruendung im Modal, und der Waechter sieht jetzt auch Listenzeilen 2026-07-31 22:09:05 +02:00
revenue.blade.php Match the panel to the approved template, measured rather than assumed 2026-07-27 17:08:05 +02:00
roles.blade.php Rollen: aufklappbare Karten, gruppierte Rechte, Knopf im Raster 2026-07-31 22:39:46 +02:00
settings.blade.php Passwortrichtlinie einstellbar, doppelte Anmelde-Mail behoben 2026-07-31 20:53:19 +02:00
two-factor-setup.blade.php Quote what a person pays, and tab the settings page 2026-07-29 19:18:10 +02:00
vpn-config-access.blade.php R24: a modal is never taller than the screen 2026-07-29 23:33:57 +02:00
vpn.blade.php Release v1.3.84 — VPN-Zugänge nach Personen und Hosts getrennt 2026-08-01 02:34:15 +02:00