Files
CrumbCodex-v.0.0/waldmitte/tools/cf_tools.md
Krümel Branko 83df9de035 🌲 CrumbCodex v0.0 - Genesis
12 Monate Crumbforest-Wachstum, sortiert nach Waldlogik.

Struktur:
- 454 Dokumente in 7 organischen Ebenen
- Lichtung → Waldrand → Waldmitte → Wurzeln → Krone → Unterholz → Samen
- INDEX.md für jede Ebene (eigene Stimme)
- WALDKARTE.md (Master-Navigation)
- crumbcodex.md (Das Versprechen zwischen Krümel & Bits)
- lichtung/willkommen.md (Nullfeld-Einstieg für Kinder)

Philosophie:
- Waldlogik statt Ordnerlogik
- Tiefe, Licht, Wurzeln - wie ein echter Wald
- Schutz für Krümel, Tiefe für Gräber, Poesie für Atmende

Repos verbunden:
- OZM-Keks-Handbuch-v1 (Das Wissen)
- Crumb-Core-v.1 (Das Herz) - 194.164.194.191
- crumbmissions (Das Spiel)

Wuuuhuuuuu! 🦉
2025-12-26 16:50:52 +01:00

269 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: cf_tools
slug: cf_tools
lang: de
summary: Kurzbeschreibung hier.
tags: [Crumbforest]
---
# cf_tools
Kurzer Einstiegstext.
## Notizen
- Punkt 1
- Punkt 2
## FAQ
Q: Worum geht es?
A: …
# CF Tools — Kurz-Doku (Stand heute)
**Ziel:** Kleine, robuste Shell-Hilfen rund um unseren Snapshot-Collector unter `/var/cf`.
Fokus: Übersicht behalten, Qualität prüfen, aufräumen ohne den Live-Betrieb zu stören.
---
## Verzeichnis-Layout
```
/var/cf
├── snapshots/ # Bilder, nach Layer/Device
│ └── L1/
│ └── SVGA_ESP01/
│ ├── 1758995431.jpg
│ └── ...
└── index/ # flache Indizes je Device (optional)
└── L1-SVGA_ESP01.txt
```
---
## Voraussetzungen
* Debian/Raspberry Pi OS (arm64) oder ähnlich
* Bash, coreutils, findutils
* `jq` (für JSON-Ausgabe): `sudo apt-get install -y jq`
* **Optional:** `inotify-tools` für Live-Follow: `sudo apt-get install -y inotify-tools`
---
## Installation
```bash
# Datei ablegen & ausführbar machen:
sudo tee /usr/local/bin/cf-tools.sh >/dev/null <<'SH'
# (hier steht dein cf-tools.sh Inhalt)
SH
sudo chmod +x /usr/local/bin/cf-tools.sh
# Bequemer Kurzbefehl:
sudo ln -sf /usr/local/bin/cf-tools.sh /usr/local/bin/cf-tools
```
> Standardpfade sind im Script fix: `ROOT=/var/cf`, `SNAPS=$ROOT/snapshots`, `INDEX=$ROOT/index`.
---
## Schnellstart
```bash
# Letzte 60 Minuten Bilder pro Device zählen (Layer L1):
cf-tools recent L1 60
# Top-5 Talker im 60-Minuten-Fenster:
cf-tools top L1 60 5
# Kennzahlen eines Geräts (Text):
cf-tools device L1 SVGA_ESP04
# Kennzahlen als JSON (ideal für Monitoring):
cf-tools device-json L1 SVGA_ESP04 | jq
# Letzte Datei (voller Pfad):
cf-tools last-file L1 SVGA_ESP10
# Doppelte Layer/Device-Pfade finden:
cf-tools dupe-ids
```
---
## Kommandoreferenz
### Basics
* `cf-tools recent [LAYER] [min]`
Zählt pro Device die Dateien der letzten *min* Minuten (Default: `L1`, `60`).
* `cf-tools top [LAYER] [min] [N]`
Sortiert nach Anzahl, zeigt Top-N (Default: `L1`, `60`, `5`).
* `cf-tools device LAYER DEVICE`
Einzeilige Kennzahlen: **TOTAL**, **SIZE**, **AGE_S**, **RECENT_60m**, **LAST**.
* `cf-tools device-json LAYER DEVICE`
Gleiches als JSON (für Prom/Logs/API-Verbrauch).
* `cf-tools last-file LAYER DEVICE`
Gibt den Pfad der jüngsten Datei zurück.
* `cf-tools dupe-ids`
Zeigt doppelte Paare `LAYER/DEVICE` (z. B. Tippfehler oder doppelt geflashte IDs).
### Maintenance
* `cf-tools prune-empty`
Leere Verzeichnisse entfernen.
* `cf-tools rebuild-index`
Baut `index/LAYER-DEVICE.txt` aus Dateinamen/Mtime neu.
* `cf-tools fix-perms`
Setzt Besitz **sysop:sysop** und `2775` rekursiv auf `/var/cf`.
### Misc
* `cf-tools gallery-url LAYER DEVICE`
Linksnack zur Mini-Gallery des Collectors.
* `cf-tools follow LAYER DEVICE` *(optional, braucht inotify-tools)*
Live-Anzeige neuer Dateien (nur Dateinamen; sicher für Produktion).
* `cf-tools purge LAYER DEVICE [older_min]`
**Vorsichtig**: Löscht Dateien älter als *older_min* Minuten (Default: 60).
---
## Beispiele (typische Checks)
**1) Wer sendet gerade regelmäßig?**
```bash
cf-tools top L1 10 10
```
**2) Ist ein bestimmtes Device frisch?**
```bash
cf-tools device L1 SVGA_ESP07
# ... AGE_S=3 RECENT_60m=355 -> OK
```
**3) Monitoring-Hook (JSON)**
```bash
cf-tools device-json L1 SVGA_ESP05 | jq -r '.age_s'
# → Zahl in Sekunden (z.B. für Alarm, falls > 60)
```
**4) Nach Cleanup leere Ordner entfernen**
```bash
cf-tools prune-empty
```
**5) Rechte nach Restore reparieren**
```bash
cf-tools fix-perms
```
---
## Zusammenspiel mit unseren Diensten
* **Collector (FastAPI)** schreibt Bilder nach `/var/cf/snapshots/<Layer>/<Device>/...`
* **Retention (systemd timer)** hält das Volumen sauber (z. B. `>7 Tage` löschen)
* **Doctor (manuell/cron)**: Health-Report über alle Devices (Durchsatz, Stale, Disk)
> `cf-tools` ergänzt das Trio: schnelle Sichtbarkeit, Ad-hoc-Wartung, Skript-Hooks.
---
## Optional: kleine Automatisierungen
**Top-Talker minütlich in ein Log (Beispiel)**
```bash
sudo tee /usr/local/bin/cf-top-minute.sh >/dev/null <<'BASH'
#!/usr/bin/env bash
set -euo pipefail
stamp=$(date '+%F %T')
echo "[$stamp]" >> /var/log/cf-top.log
cf-tools top L1 10 10 >> /var/log/cf-top.log
echo >> /var/log/cf-top.log
BASH
sudo chmod +x /usr/local/bin/cf-top-minute.sh
```
`/etc/systemd/system/cf-top-minute.timer`
```ini
[Unit]
Description=CF Top Minute Timer
[Timer]
OnCalendar=*:*:00
Unit=cf-top-minute.service
Persistent=true
[Install]
WantedBy=timers.target
```
`/etc/systemd/system/cf-top-minute.service`
```ini
[Unit]
Description=CF Top Minute
[Service]
Type=oneshot
ExecStart=/usr/local/bin/cf-top-minute.sh
```
Aktivieren:
```bash
sudo systemctl daemon-reload
sudo systemctl enable --now cf-top-minute.timer
```
---
## Best Practices
* **NTP aktiv:** saubere Timestamps → schöne Dateinamen & zuverlässige „Age“-Checks.
* **IDs eindeutig:** pro ESP eindeutige `DEVICE_ID`; Duplikate mit `dupe-ids` aufspüren.
* **Retention früh festlegen:** z. B. 48 h für Rohbilder; Alarme & Pose-Snippets länger.
* **Rechte konsistent:** nach manuellen Kopieraktionen `cf-tools fix-perms`.
* **Stille Geräte** im Blick: `AGE_S`/`RECENT_60m` per JSON ins Monitoring aufnehmen.
---
## Troubleshooting (kurz)
* **Ordner existiert nicht:** `not found: /var/cf/snapshots/L1/XYZ`
→ Device/Layer-Name prüfen (Groß/Klein), ESP-Konfig, Collector-Logs.
* **AGE_S sehr groß / RECENT_60m = 0:**
→ ESP online? WLAN/MQTT/Collector erreichbar? `cf-doctor.sh` laufen lassen.
* **Viele leere Ordner:**
`cf-tools prune-empty`
* **Index veraltet:**
`cf-tools rebuild-index`
---
## Roadmap (wenn wir Lust haben)
* `cf-tools summary` (kompakter Gesamtstatus aller Devices)
* `cf-tools stale [min]` (nur Ausreißer listen)
* `cf-tools to-archive` (Stundenclips vorbereiten, Übergabe an ffmpeg-Job)
* Export als Prometheus-Textformat
---
**Thats it.**
Schlank, CLI-freundlich, gut skriptbar und nah dran am, was wir **wirklich** täglich brauchen.