docs(konzept): Rate-Limit 100/min -> 600/min als Abweichung vermerkt
Ampel / ampel (push) Successful in 32s
Ampel / ampel (push) Successful in 32s
Regel B: keine stille Aenderung an einer KONZEPT-Vorgabe. Das Muss-Feature "Rate-Limiting pro Client-IP" bleibt, nur die Zahl aendert sich - mit der Rechnung, die zeigt warum: 100/min lag unter Rippys eigener Last (ein offener Tab braucht 111/min, ein Windows-Worker 12 dazu). Festgehalten durch test_grenze_deckt_die_eigene_last_ab, damit die Zahl nicht unbemerkt zurueck unter die Grundlast wandert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+17
-1
@@ -36,7 +36,7 @@ Ein modular aufgebautes System, das bei Disc-Einwurf automatisch den Typ erkennt
|
||||
| Multi-Disc-Set-Handling (Release-Group-Resolver) | ✔ M | | |
|
||||
| SQLite-Cache für API-Rate-Limits | ✔ M | | |
|
||||
| ~~JWT-Auth (Access 15min/Refresh 7 Tage)~~ — GESTRICHEN 24.07.2026, siehe §10 | | | |
|
||||
| Rate-Limiting (100/min pro Client-IP) | ✔ M | | |
|
||||
| Rate-Limiting pro Client-IP — ~~100/min~~ **600/min** (26.07.2026, siehe Abweichungen) | ✔ M | | |
|
||||
| Celery-Queue + Redis mit AOF-Persistence | ✔ M | | |
|
||||
| React-UI (statisch via Nginx) | ✔ M | | |
|
||||
| Proxmox LXC Template + Ansible Playbooks | ✔ M | | |
|
||||
@@ -183,6 +183,22 @@ Ein modular aufgebautes System, das bei Disc-Einwurf automatisch den Typ erkennt
|
||||
passlib/bcrypt-Abhängigkeit hat die CI-Ampel gebrochen. Rate-Limiting
|
||||
(pro IP) bleibt. Wer Rippy je nach außen öffnet, stellt einen
|
||||
Reverse-Proxy mit eigener Auth davor (z. B. Authelia/Caddy basicauth).
|
||||
- **26.07.2026 — Rate-Limit von 100/min auf 600/min:** Das Muss-Feature
|
||||
(„Rate-Limiting pro Client-IP") bleibt unverändert, nur die Zahl ändert sich.
|
||||
Begründung: 100/min lag UNTER Rippys eigener Last. Nachgerechnet an den
|
||||
Taktgebern im UI verursacht ein einziger offener Tab 111 Anfragen pro Minute
|
||||
(Dashboard 75 + Log-Kasten 24 + Laufwerks-Suche 12), ein installierter
|
||||
Windows-Worker weitere 12. Die Bremse griff also im Normalbetrieb permanent —
|
||||
97 Antworten mit HTTP 429 im nginx-Log —, und weil das UI einen abgewiesenen
|
||||
Abruf als „nichts da" verbuchte, leerte sich die Job-Liste im Sekundentakt.
|
||||
Genau das hat der Commander als „wird oft neu geladen" gemeldet. 600/min =
|
||||
10 Anfragen pro Sekunde: Luft für mehrere Tabs und Worker, während der Zweck
|
||||
der Bremse (ein Skript in einer Endlosschleife, Hunderte pro Sekunde) weiter
|
||||
erfüllt ist. Die Rechnung steht als Kommentar in `ratelimit.py` und ist durch
|
||||
`test_grenze_deckt_die_eigene_last_ab` festgehalten — wer die Zahl senkt, muss
|
||||
dort vorbei. Zweiter Teil derselben Reparatur: Hinter dem nginx ist
|
||||
`request.client.host` immer der Proxy, alle Clients teilten sich also EINEN
|
||||
Eimer; jetzt gilt `X-Real-IP`.
|
||||
- **25.07.2026 — 4K-UHD-Disc-Schlüssel: Rippy stellt Platz bereit, keine
|
||||
Schlüssel:** Das Muss-Feature „MakeMKV-Ripping (lossless)" bleibt
|
||||
unverändert; ergänzt wird nur ein **persistentes MakeMKV-Datenverzeichnis**
|
||||
|
||||
Reference in New Issue
Block a user