Archaeo commited on
Commit
e7dbb79
·
verified ·
1 Parent(s): c44fa4d

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +118 -0
README.md CHANGED
@@ -8,3 +8,121 @@ pinned: false
8
  ---
9
 
10
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  ---
9
 
10
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
11
+
12
+ <<<<<<< HEAD
13
+ # rheinpegel-python-app
14
+ =======
15
+ # Rheinpegel App
16
+
17
+ 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.
18
+
19
+ ## Hauptfunktionen
20
+
21
+ - **Asynchrones Polling** der offiziellen Quelle via `httpx` mit Timeout (8&nbsp;s) und exponentiellem Backoff (4 Versuche).
22
+ - **Automatische Format-Erkennung** für JSON oder XML und robuste Feldzuordnung.
23
+ - **Trend-Berechnung** aus Rohdaten oder anhand der letzten Messwerte (Δ > 2 cm ⇒ ↑, Δ < −2 ⇒ ↓).
24
+ - **Mehrstufiges Caching**: In-Memory-Ringpuffer (48 Werte) + JSON-Persistenz unter `data/cache.json`.
25
+ - **Demo-Modus** bei Netzwerkfehlern oder via `?demo=1` mit synthetischen, plausiblen Messwerten.
26
+ - **FastAPI + Jinja2** Dashboard mit responsive Karte, Warnstufen, Sparkline (Inline-SVG) sowie Auto-Refresh-Toggle und Countdown.
27
+ - **Prometheus-Metriken**: letzte Latenz, Erfolgs-/Fehlerzähler, Datenalter und Health-Endpoint.
28
+
29
+ ## Voraussetzungen
30
+
31
+ - Python 3.11+
32
+ - Optional: [uv](https://github.com/astral-sh/uv) für schnelle virtuelle Umgebungen
33
+
34
+ ## Installation & Setup
35
+
36
+ ### Variante A: uv
37
+
38
+ ```bash
39
+ uv venv
40
+ source .venv/bin/activate # Windows: .venv\Scripts\activate
41
+ uv pip install -e .
42
+ cp .env.example .env
43
+ ```
44
+
45
+ ### Variante B: pip / venv
46
+
47
+ ```bash
48
+ python -m venv .venv
49
+ source .venv/bin/activate # Windows: .venv\Scripts\activate
50
+ pip install --upgrade pip
51
+ pip install -e .
52
+ copy .env.example .env # Windows
53
+ ```
54
+
55
+ > **Hinweis:** Die Umgebungsvariablen (.env) steuern u.a. den Polling-Intervall (`REFRESH_SECONDS`), die Quelle (`SOURCE_URL`) und die Zeitzone (`TZ`).
56
+
57
+ ## Starten der Anwendung
58
+
59
+ ```bash
60
+ uvicorn app.main:app --reload
61
+ # oder
62
+ python -m app.main
63
+ ```
64
+
65
+ Die Oberfläche ist anschließend unter http://127.0.0.1:8000 erreichbar.
66
+
67
+ ## Wichtige Endpunkte
68
+
69
+ | Route | Beschreibung |
70
+ |-----------------|-------------------------------------------------|
71
+ | `/` | Dashboard mit Live-Karte, Trend, Sparkline |
72
+ | `/api/latest` | Neueste Messung (JSON) + komplette Historie |
73
+ | `/api/history` | Maximal 48 Messpunkte aus dem Ringpuffer |
74
+ | `/healthz` | 200 OK, wenn der Hintergrund-Task aktiv ist |
75
+ | `/metrics` | Prometheus-kompatible Kennzahlen |
76
+
77
+ ### Demo-Modus
78
+
79
+ Alle Endpunkte akzeptieren `?demo=1`, um synthetische Daten zu liefern und das UI als „Demo“ zu markieren.
80
+
81
+ ## Tests
82
+
83
+ ```bash
84
+ pytest
85
+ ```
86
+
87
+ Die Tests decken das Parsing (JSON/XML) sowie zentrale FastAPI-Endpunkte ab.
88
+
89
+ ## Docker
90
+
91
+ ```bash
92
+ docker build -t rheinpegel-app .
93
+ docker run -p 8000:8000 --env-file .env rheinpegel-app
94
+ ```
95
+
96
+ Oder via Compose:
97
+
98
+ ```bash
99
+ docker-compose up --build
100
+ ```
101
+
102
+ Der Container läuft als Non-Root-User, besitzt einen Healthcheck (`/healthz`) und bindet `./data` für persistente Caches ein.
103
+
104
+ ## Beispiel systemd Unit (optional)
105
+
106
+ ```ini
107
+ [Unit]
108
+ Description=Rheinpegel App
109
+ After=network.target
110
+
111
+ [Service]
112
+ User=www-data
113
+ WorkingDirectory=/opt/rheinpegel-app
114
+ EnvironmentFile=/opt/rheinpegel-app/.env
115
+ ExecStart=/opt/rheinpegel-app/.venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
116
+ Restart=always
117
+
118
+ [Install]
119
+ WantedBy=multi-user.target
120
+ ```
121
+
122
+ ## Weiterentwicklung
123
+
124
+ - UI-Optimierungen, z. B. zusätzliche Karten oder historische Auswertungen
125
+ - Export in weitere Formate (CSV/ICS)
126
+ - Alarm-Benachrichtigungen (E-Mail, Webhooks) basierend auf Warnstufen
127
+
128
+ Viel Spaß beim Ausprobieren der Rheinpegel-App!