Archaeo commited on
Commit
53e9cae
·
verified ·
1 Parent(s): 15d848a

Update README.md

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