feat: Verlauf als CSV, Meldung bei Upload mit Drossel, Deckel auf dem Papierkorb

Abschnitt 3 aus docs/ideen.md, bis auf die Sicherungsziele.

VERLAUF ALS CSV. Der Export konnte nur den Bestand; wer nachrechnen wollte,
was ueber einen Zeitraum passiert ist, sass vor einer Tabelle, die nach 500
Zeilen umblaettert. Der Knopf sitzt in der Reiterleiste und holt den Verlauf,
DER GERADE OFFEN IST -- zwei Knoepfe nebeneinander waeren die Frage "welchen
von beiden?" an einer Stelle, wo die Antwort schon auf dem Bildschirm steht.

Semikolon und CRLF wie beim Bestands-Export; das war dort nachgemessen worden.
Gemessen an der ausgelieferten Datei: 5371 Zeilen, kein einziges nacktes LF.
Ohne Anmeldung 401 -- die Route liegt hinter dem Waechter, was nach dem
Sitzungs-Fehler von vorgestern ausdruecklich nachgeprueft wurde.

MELDUNG BEI UPLOAD -- die Drossel ist der eigentliche Inhalt. Jeder Upload
schiebt eine Frist von zwei Minuten nach hinten; erst nach der Ruhe geht EINE
Nachricht raus. Ohne das waere die Funktion ein Schaden: 900 Fahrzeugbilder
ergaeben 900 Nachrichten, Discord drosselt Webhooks, und wer danach eine echte
Meldung bekommt, sieht sie nicht mehr.

Gemessen: drei Uploads mit zehn Sekunden Abstand -> eine Meldung ueber drei
Dateien. Ein einzelner Upload -> eine Meldung ueber eine Datei.

Nur Token-Uploads, absichtlich. Was ueber das Dashboard hereinkommt, hat gerade
jemand selbst hochgeladen und bestaetigt bekommen. Zurueckholen aus dem
Papierkorb meldet gar nichts: das ist kein Neues, das ist ein Wiedergefundenes.

Und derselbe Fehler wie bei 'platte' lauerte schon wieder: die Liste der
Anlaesse steht im Server UND in der Oberflaeche, und der Server verwirft beim
Speichern alles, was in seiner Liste fehlt -- ein Kreuzchen, das sich setzen
laesst und beim naechsten Laden weg ist. Diesmal beide angefasst, in beiden
steht jetzt ein Verweis auf die andere. Nachgemessen: vier geschickt, vier
gespeichert.

DECKEL AUF DEM PAPIERKORB. 30 Tage UND 20 GB, was zuerst greift. Wer 200 GB
loescht, haelt sie sonst 30 Tage doppelt und merkt es erst, wenn die Platte
voll ist. Geraeumt wird das AELTESTE zuerst -- dessen Versehen waere am
ehesten schon aufgefallen.

Ueber PAPIERKORB_MAX_MB verstellbar, und das nicht aus Bequemlichkeit: ein
Deckel von 20 GB laesst sich nicht pruefen, ohne 20 GB zu loeschen. Mit
0.0002 MB nachgemessen -- vier Eintraege zu 422 Bytes, drei entfernt, uebrig
blieb der NEUESTE. Danach zurueck auf 20 GB, gemessen 21474836480.

NEBENBEI, DREIMAL DIESELBE SORTE FEHLER: "0.0 MB" fuer 422 Bytes, "0 KB" fuer
106 Bytes, "0.0 MB von 0.0 MB" beim Deckel. Es gab drei Byte-Formatierer, jeder
mit anderer Untergrenze. Jetzt einer in meldung.ts, von Bytes bis GB, exportiert
und von dash.ts mitbenutzt. Nachgemessen ueber alle Stufen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-12 08:25:50 +02:00
co-authored by Claude Opus 5
parent 6a49713821
commit bbb74138c8
10 changed files with 465 additions and 28 deletions
+44 -8
View File
@@ -98,14 +98,50 @@ einer Stunde Klickerei fünf Minuten.
## 3 · Wäre schön, drängt nicht
- **Verlauf als CSV**der Export kann heute nur Medien, nicht Ereignisse.
- **Meldung bei Upload** — Discord-Nachricht, wenn über einen Token etwas
Neues ankommt. Nützlich für Bildschirmfotos aus dem Spiel, sinnlos für einen
Serienlauf über 900 Fahrzeuge; bräuchte also eine Drossel.
- **Papierkorb mit Größendeckel** — heute nur 30 Tage. Wer 200 GB löscht, hat
sie 30 Tage lang doppelt. Bei 910 GB frei ist das keine Not.
- **Mehrere Sicherungsziele** — die Archive liegen auf derselben Platte wie die
Daten, die Kopie in der Nextcloud ist die einzige Trennung.
### ~~Verlauf als CSV~~gebaut am 12.08.2026
`GET /api/dash/verlauf/export`, wahlweise `?was=verwaltung`. Der Knopf sitzt in
der Reiterleiste und holt **den Verlauf, der gerade offen ist** — zwei Knöpfe
nebeneinander wären die Frage „welchen von beiden?" an einer Stelle, wo die
Antwort schon auf dem Bildschirm steht.
Semikolon und CRLF wie beim Bestands-Export, und aus demselben Grund: Excel in
deutscher Einstellung nimmt bei Komma alles in eine Spalte und bei nacktem LF
die halbe Datei in eine Zelle. Gemessen an der ausgelieferten Datei: 5364
Zeilen, 5364 CRLF, **kein einziges nacktes LF**.
### ~~Meldung bei Upload~~ — gebaut am 12.08.2026
Mit Drossel, und die ist der eigentliche Inhalt. Jeder Upload schiebt eine
Frist von zwei Minuten nach hinten; erst nach der Ruhe geht **eine** Nachricht
raus, mit Anzahl, Summe, Absendern und den ersten fünf Pfaden.
Ohne das wäre die Funktion ein Schaden statt eines Nutzens: 900 Fahrzeugbilder
ergäben 900 Nachrichten, Discord drosselt Webhooks, und wer danach eine echte
Meldung bekommt, sieht sie nicht mehr. Ein Serienlauf ergibt jetzt eine Zeile,
ein einzelnes Bildschirmfoto ergibt eine Zeile — beide sagen dasselbe, nur mit
anderen Zahlen.
Der Anlass heißt `upload` und ist **abschaltbar wie die anderen drei**. Die
Liste steht an zwei Stellen (Server und Oberfläche) — genau die Verdopplung,
die bei `platte` schon einmal ein Kreuzchen verschluckt hat; deshalb steht
jetzt in beiden ein Verweis auf die andere. Nachgemessen: vier geschickt, vier
gespeichert.
### ~~Papierkorb mit Größendeckel~~ — gebaut am 12.08.2026
20 GB. Beim Ausleeren wird erst nach Alter geräumt (30 Tage) und dann nach
Größe, **das Älteste zuerst** — dessen Versehen wäre am ehesten schon
aufgefallen. Die Grenze steht in der Antwort von `/api/dash/papierkorb`, damit
die Oberfläche sie nicht ein zweites Mal hinschreibt.
Bei 910 GB frei ist das heute keine Grenze, sondern eine Zusicherung: der
Papierkorb kann nicht mehr unbemerkt zur zweiten Ablage werden.
### Mehrere Sicherungsziele — offen
Die Archive liegen auf derselben Platte wie die Daten, die Kopie in der
Nextcloud ist die einzige Trennung.
---