docs: Luecken in README und AGENTS.md schliessen
Abgleich der Doku gegen den Code ergab: - /admin/help und /customer fehlten in der Routen-Tabelle - Der Verzeichnisbaum zeigte nur die Screen-Ordner, nicht die Dateien auf Standort-Ebene (background.*, logo_<slot>.png, welcome.html) - gerade die sind aber bewusst Dateien und keine Ordner, weil jeder Unterordner als Screen interpretiert wird - Der Docker-Abschnitt erwaehnte weder das noetige --build noch die Log-Einstellungen (PYTHONUNBUFFERED, access-logfile), die fuer jede Fehlersuche die Grundlage sind AGENTS.md bekommt dazu einen Abschnitt "Betrieb / Diagnose". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -153,6 +153,13 @@ Standorte (sites) sind die oberste Organisationsebene und gruppieren Screens.
|
|||||||
- User-Dropdown im Header: zeigt E-Mail + Role-Badge, Menü mit Passwort ändern, MFA einrichten (mit "Aktiv"-Badge wenn MFA eingeschaltet), Userverwaltung (Admin), Abmelden.
|
- User-Dropdown im Header: zeigt E-Mail + Role-Badge, Menü mit Passwort ändern, MFA einrichten (mit "Aktiv"-Badge wenn MFA eingeschaltet), Userverwaltung (Admin), Abmelden.
|
||||||
- Info-Tab in Screen-Cards: zeigt Client-Info-Tabelle (IP, Browser, Auflösung, zuletzt gesehen) aus dem Heartbeat-JSON für den jeweiligen Screen
|
- Info-Tab in Screen-Cards: zeigt Client-Info-Tabelle (IP, Browser, Auflösung, zuletzt gesehen) aus dem Heartbeat-JSON für den jeweiligen Screen
|
||||||
|
|
||||||
|
## Betrieb / Diagnose
|
||||||
|
|
||||||
|
- `docker compose up -d` startet nur neu und **baut nicht**. Nach Code-Aenderungen `--build` verwenden, sonst laeuft weiter das alte Image - das hat bei der Fehlersuche mehrfach zu falschen Schluessen gefuehrt.
|
||||||
|
- Das Dockerfile setzt `PYTHONUNBUFFERED=1`. Ohne das puffert Python `stdout` blockweise (kein TTY) und **keine** `print()`-Ausgabe der App erscheint in `docker compose logs`. Tracebacks waren sichtbar, weil Flask sie ueber stderr schreibt - das machte den blinden Fleck schwer erkennbar.
|
||||||
|
- gunicorn laeuft mit `--access-logfile -`, protokolliert also jeden Request. Ohne das laesst sich nicht feststellen, ob eine Anfrage den Container ueberhaupt erreicht.
|
||||||
|
- `add_customer` protokolliert je Kundenfeld `Upload = <dateiname>` bzw. `Upload = keiner`. Ein geleertes `<input type="file">` - etwa nach einem Reload der Seite - sieht serverseitig sonst genauso aus wie "kein Logo hochgeladen".
|
||||||
|
|
||||||
## Repo Quirks
|
## Repo Quirks
|
||||||
|
|
||||||
- `media/` and media file extensions are gitignored.
|
- `media/` and media file extensions are gitignored.
|
||||||
|
|||||||
28
README.md
28
README.md
@@ -75,9 +75,12 @@ signage/
|
|||||||
├── history.json # Aktivitätsverlauf (Dashboard)
|
├── history.json # Aktivitätsverlauf (Dashboard)
|
||||||
├── media/
|
├── media/
|
||||||
│ ├── <site>/
|
│ ├── <site>/
|
||||||
│ │ ├── lobby/
|
│ │ ├── lobby/ # Screen-Ordner (jeder Unterordner = ein Screen!)
|
||||||
│ │ ├── casino/
|
│ │ ├── casino/
|
||||||
│ │ └── videosysteme/
|
│ │ ├── videosysteme/
|
||||||
|
│ │ ├── background.jpg # Hintergrundbild der Willkommensseite (optional)
|
||||||
|
│ │ ├── logo_1.png # hochgeladene Kundenlogos (Slot 1-3)
|
||||||
|
│ │ └── welcome.html # Standort-Kopie der Willkommensseite
|
||||||
│ └── priority/
|
│ └── priority/
|
||||||
├── templates/
|
├── templates/
|
||||||
│ ├── admin.html # Admin-Dashboard (Übersicht)
|
│ ├── admin.html # Admin-Dashboard (Übersicht)
|
||||||
@@ -175,6 +178,25 @@ docker compose up -d
|
|||||||
|
|
||||||
Server läuft auf `http://localhost:5005` (gunicorn mit 4 Workern, non-root User).
|
Server läuft auf `http://localhost:5005` (gunicorn mit 4 Workern, non-root User).
|
||||||
|
|
||||||
|
**Wichtig:** `docker compose up -d` startet nur neu, es baut nicht. Nach Code-Änderungen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose up -d --build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Logs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose logs -f signage
|
||||||
|
```
|
||||||
|
|
||||||
|
Der Container ist so eingestellt, dass dort alles Nötige ankommt:
|
||||||
|
|
||||||
|
- `ENV PYTHONUNBUFFERED=1` im Dockerfile – ohne das puffert Python `stdout` blockweise, sobald es kein Terminal ist, und sämtliche `print()`-Ausgaben der App bleiben unsichtbar.
|
||||||
|
- `gunicorn --access-logfile -` – protokolliert jeden Request. Ohne das ist nicht einmal erkennbar, ob eine Anfrage den Container überhaupt erreicht.
|
||||||
|
|
||||||
|
Beides fehlte anfangs und machte die Fehlersuche unnötig schwer.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Routen
|
## Routen
|
||||||
@@ -222,6 +244,8 @@ Server läuft auf `http://localhost:5005` (gunicorn mit 4 Workern, non-root User
|
|||||||
| `GET /media/<site>/<screen>/<file>` | Medien-Datei ausliefern |
|
| `GET /media/<site>/<screen>/<file>` | Medien-Datei ausliefern |
|
||||||
| `GET /media/priority/<file>` | Priority-Medien (global) |
|
| `GET /media/priority/<file>` | Priority-Medien (global) |
|
||||||
| `GET /media/<site>/logos/<file>` | Manuell hochgeladenes Kundenlogo |
|
| `GET /media/<site>/logos/<file>` | Manuell hochgeladenes Kundenlogo |
|
||||||
|
| `GET /admin/help` | Hilfeseite zur Bedienung |
|
||||||
|
| `GET /customer` | Alias für `/willkommen` |
|
||||||
| `GET /media/<site>/background/<filename>` | Hintergrundbild der Willkommensseite |
|
| `GET /media/<site>/background/<filename>` | Hintergrundbild der Willkommensseite |
|
||||||
|
|
||||||
### Heartbeat / Online-Status
|
### Heartbeat / Online-Status
|
||||||
|
|||||||
Reference in New Issue
Block a user