Grafana: map zooms to the route; plain hyphens in titles

- "Where the car was" fits the route again: in Grafana's fit view the
  zoom value is the maximum zoom, and 6 held it at country level. Now
  15 with 10 % padding. Checked by rendering the Live dashboard with a
  simulated 10 km drive.
- Dashboard titles use "-" instead of an em dash: "MG4 - Live",
  "MG4 - Consumption", "MG4 - Charging".
- SPECS.md: Grafana keeps its state in SQLite on its PVC, which is why
  it runs as one replica with Recreate; high availability needs
  PostgreSQL or MySQL first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QLJfZQZeAKAwSqViTmLzki
This commit is contained in:
2026-10-17 21:59:17 +02:00
co-authored by Claude Opus 5.5
parent cee0eaeab3
commit f3de272c69
4 changed files with 12 additions and 4 deletions
+7
View File
@@ -56,6 +56,13 @@ car ──live telemetry───▶ car.k8s.stinnesbeck.com (Go) ──▶ ABRP
(`ALLOWED_HOSTS`). For git.stinnesbeck.com it needs the host on the allowlist, and the (`ALLOWED_HOSTS`). For git.stinnesbeck.com it needs the host on the allowlist, and the
response parsing checked against that server's releases API. Release assets must be named response parsing checked against that server's releases API. Release assets must be named
`NilsMG4-unstable-<version>.apk` with a `.sha256` sidecar (`build-car` writes both). `NilsMG4-unstable-<version>.apk` with a `.sha256` sidecar (`build-car` writes both).
- [ ] **Grafana high availability needs another database.** Grafana keeps its own state (users,
sessions, preferences, provisioned-dashboard records, alerting state) in SQLite at
`/var/lib/grafana/grafana.db` on the `grafana-data` PVC. That is fine for one replica, and is
why `k8s/grafana.yaml` uses `replicas: 1` and the `Recreate` strategy: only one Grafana may
write the file. To run more than one replica, first move Grafana to PostgreSQL or MySQL
(`GF_DATABASE_TYPE`, `GF_DATABASE_HOST`, …); the replicas then share that database instead
of a volume. The car data itself is in InfluxDB and unaffected.
- [ ] **Telemetry queue survives restarts.** Unsent live samples are kept in memory only. - [ ] **Telemetry queue survives restarts.** Unsent live samples are kept in memory only.
- [ ] **Translate the rest.** The docs (`CHANGELOG.md`, `OTA.md`'s - [ ] **Translate the rest.** The docs (`CHANGELOG.md`, `OTA.md`'s
message table, comments in `mise.toml`/`app/build.gradle`) are still Turkish or French. message table, comments in `mise.toml`/`app/build.gradle`) are still Turkish or French.
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"uid": "mg4-charging", "uid": "mg4-charging",
"title": "MG4 — Charging", "title": "MG4 - Charging",
"description": "DC charging sessions metered by the car. Prices in euro, as entered in the car's Charging tab.", "description": "DC charging sessions metered by the car. Prices in euro, as entered in the car's Charging tab.",
"tags": [ "tags": [
"mg4" "mg4"
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"uid": "mg4-consumption", "uid": "mg4-consumption",
"title": "MG4 — Consumption", "title": "MG4 - Consumption",
"description": "Daily consumption, summed from the chunks the car sends while driving.", "description": "Daily consumption, summed from the chunks the car sends while driving.",
"tags": [ "tags": [
"mg4" "mg4"
+3 -2
View File
@@ -1,6 +1,6 @@
{ {
"uid": "mg4-live", "uid": "mg4-live",
"title": "MG4 — Live", "title": "MG4 - Live",
"description": "Live telemetry from the car, as stored before it is forwarded to ABRP.", "description": "Live telemetry from the car, as stored before it is forwarded to ABRP.",
"tags": [ "tags": [
"mg4" "mg4"
@@ -488,7 +488,8 @@
"id": "fit", "id": "fit",
"lat": 0, "lat": 0,
"lon": 0, "lon": 0,
"zoom": 6, "zoom": 15,
"padding": 10,
"allLayers": true "allLayers": true
}, },
"controls": { "controls": {