--- title: Rheinpegel Python WebApp emoji: 📚 colorFrom: purple colorTo: green sdk: docker pinned: false --- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference <<<<<<< HEAD # rheinpegel-python-app ======= # Rheinpegel App Eine moderne FastAPI-Anwendung, die den aktuellen Rheinpegel (Köln) abruft, zwischenspeichert und visuell aufbereitet. Die Anwendung kombiniert serverseitiges Polling mit einem reaktiven Frontend (AJAX, Countdown, Sparkline) und liefert zusätzlich Status- sowie Prometheus-Kennzahlen. ## Hauptfunktionen - **Asynchrones Polling** der offiziellen Quelle via `httpx` mit Timeout (8 s) und exponentiellem Backoff (4 Versuche). - **Automatische Format-Erkennung** für JSON oder XML und robuste Feldzuordnung. - **Trend-Berechnung** aus Rohdaten oder anhand der letzten Messwerte (Δ > 2 cm ⇒ ↑, Δ < −2 ⇒ ↓). - **Mehrstufiges Caching**: In-Memory-Ringpuffer (48 Werte) + JSON-Persistenz unter `data/cache.json`. - **Demo-Modus** bei Netzwerkfehlern oder via `?demo=1` mit synthetischen, plausiblen Messwerten. - **FastAPI + Jinja2** Dashboard mit responsive Karte, Warnstufen, Sparkline (Inline-SVG) sowie Auto-Refresh-Toggle und Countdown. - **Prometheus-Metriken**: letzte Latenz, Erfolgs-/Fehlerzähler, Datenalter und Health-Endpoint. ## Voraussetzungen - Python 3.11+ - Optional: [uv](https://github.com/astral-sh/uv) für schnelle virtuelle Umgebungen ## Installation & Setup ### Variante A: uv ```bash uv venv source .venv/bin/activate # Windows: .venv\Scripts\activate uv pip install -e . cp .env.example .env ``` ### Variante B: pip / venv ```bash python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate pip install --upgrade pip pip install -e . copy .env.example .env # Windows ``` > **Hinweis:** Die Umgebungsvariablen (.env) steuern u.a. den Polling-Intervall (`REFRESH_SECONDS`), die Quelle (`SOURCE_URL`) und die Zeitzone (`TZ`). ## Starten der Anwendung ```bash uvicorn app.main:app --reload # oder python -m app.main ``` Die Oberfläche ist anschließend unter http://127.0.0.1:8000 erreichbar. ## Wichtige Endpunkte | Route | Beschreibung | |-----------------|-------------------------------------------------| | `/` | Dashboard mit Live-Karte, Trend, Sparkline | | `/api/latest` | Neueste Messung (JSON) + komplette Historie | | `/api/history` | Maximal 48 Messpunkte aus dem Ringpuffer | | `/healthz` | 200 OK, wenn der Hintergrund-Task aktiv ist | | `/metrics` | Prometheus-kompatible Kennzahlen | ### Demo-Modus Alle Endpunkte akzeptieren `?demo=1`, um synthetische Daten zu liefern und das UI als „Demo“ zu markieren. ## Tests ```bash pytest ``` Die Tests decken das Parsing (JSON/XML) sowie zentrale FastAPI-Endpunkte ab. ## Docker ```bash docker build -t rheinpegel-app . docker run -p 8000:8000 --env-file .env rheinpegel-app ``` Oder via Compose: ```bash docker-compose up --build ``` Der Container läuft als Non-Root-User, besitzt einen Healthcheck (`/healthz`) und bindet `./data` für persistente Caches ein. ## Beispiel systemd Unit (optional) ```ini [Unit] Description=Rheinpegel App After=network.target [Service] User=www-data WorkingDirectory=/opt/rheinpegel-app EnvironmentFile=/opt/rheinpegel-app/.env ExecStart=/opt/rheinpegel-app/.venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000 Restart=always [Install] WantedBy=multi-user.target ``` ## Weiterentwicklung - UI-Optimierungen, z. B. zusätzliche Karten oder historische Auswertungen - Export in weitere Formate (CSV/ICS) - Alarm-Benachrichtigungen (E-Mail, Webhooks) basierend auf Warnstufen Viel Spaß beim Ausprobieren der Rheinpegel-App!