Files
mission-control-v2/deploy/morgenmeldung.sh
T
HitonabiandClaude Opus 5.5 5e9227c4a3 phase3+4: Homelab-Teil (Ausfuehrer, Ziele, Jetzt updaten mit Rueckweg) und Seite Homelab fuer alle Geraete
- deploy/homelab/ausfuehrer.py: laeuft als root auf dem Proxmox-Host, holt Auftraege beim Homelab-Teil
  ab (Pull, kein offener Port), feste Aktionsliste, prueft Etiketten selbst; Bericht gegen den echten
  Host erprobt (nur lesend). Kein Proxmox-Schluessel im Container noetig.
- services/homelab: Kanal mit gemeinsamem Geheimnis, App-Katalog, Inventar -> Ziele im gemeinsamen
  Modell (GitHub-Versionen, Webpruefung, alte Paketlisten = unklar), Jetzt updaten: Snapshot ->
  Update -> Pruefung -> bei Rot zurueck + dringende Meldung
- Waechter in der Rolle homelab: Ausfuehrer schweigt, Gaeste antworten nicht
- kern/github.py fuer beide Rollen (auch untagged Releases mit Version im Namen)
- Oberflaeche: Seite Homelab zeigt alle Geraete als Karten (KI-Box ueber /api/ziele, Homelab ueber
  /api/homelab/ziele) mit Stand, Rueckweg und Knopf samt Rueckfrage
- Einrichtung als Skripte (container-anlegen, ausrollen, ausfuehrer-einrichten, box-partner) — noch
  nicht ausgefuehrt, jeder Schritt braucht das User-OK
- frontend-bauen-box.sh: Frontend-Pruefung und Build auf der Box, wenn der PC keinen Speicher hat

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 18:39:59 +02:00

58 lines
2.6 KiB
Bash

#!/usr/bin/env bash
# Morgenmeldung (07:00, mc2-morgenmeldung.timer): schickt die nachts gesammelten Meldungen als
# EINE Telegram-Nachricht. notify.sh parkt zwischen 00:00 und 06:59 alles Nicht-Dringende in der
# Nacht-Warteschlange; ohne diesen Lauf käme es nie an (so geschehen vom 21.08. bis 24.09.2026).
#
# Scheitert Telegram dreimal, bleibt der Stapel liegen und kommt mit der nächsten Morgenmeldung —
# verloren geht nichts. Leere Warteschlange = keine Nachricht.
set -uo pipefail
QUEUE="${MC_NIGHT_QUEUE:-$HOME/.hermes/night-queue.txt}"
ARBEIT="$QUEUE.senden"
SRC_DIR="$(cd "$(dirname "$0")" && pwd)"
MAX_ZEICHEN="${MC_MORGENMELDUNG_MAX:-3500}" # Telegram erlaubt 4096 Zeichen je Nachricht
VERSUCHE="${MC_MORGENMELDUNG_VERSUCHE:-3}"
PAUSE="${MC_MORGENMELDUNG_PAUSE:-60}"
# Der Homelab-Teil schickt seine eigene Morgenmeldung (mc2-homelab-morgenmeldung.service).
BETREFF="${MC_MORGENMELDUNG_BETREFF:-[Morgenmeldung]}"
# Melde-Log begrenzen (wuchs seit Juli ungebremst): über 3 MB bleiben die letzten 2 MB.
# services/update_verlauf.py liest ohnehin nur das Ende, das reicht für Monate Update-Verlauf.
LOG="${MC_NOTIFY_LOG:-$HOME/mc2-notify.log}"
if [ -f "$LOG" ] && [ "$(stat -c %s "$LOG" 2>/dev/null || echo 0)" -gt 3000000 ]; then
tail -c 2000000 "$LOG" > "$LOG.kurz" && mv "$LOG.kurz" "$LOG"
fi
[ -s "$QUEUE" ] || [ -s "$ARBEIT" ] || exit 0
# Warteschlange übernehmen. mv ist atomar: Was notify.sh währenddessen anhängt, landet entweder
# noch im übernommenen Stapel oder in einer frischen Warteschlange. Ein Stapel, der beim letzten
# Mal nicht rausging, steht vorne.
if [ -s "$QUEUE" ]; then
mv "$QUEUE" "$QUEUE.uebernahme" && cat "$QUEUE.uebernahme" >> "$ARBEIT" && rm -f "$QUEUE.uebernahme"
fi
ANZAHL="$(grep -c '^- ' "$ARBEIT" || true)"
[ "$ANZAHL" = "1" ] && WORT="Meldung" || WORT="Meldungen"
TEXT="$(head -c "$MAX_ZEICHEN" "$ARBEIT")"
if [ "$(wc -c < "$ARBEIT")" -gt "$MAX_ZEICHEN" ]; then
TEXT="$TEXT
… gekürzt. Den vollen Stapel hat die Box unter ~/.hermes/night-queue.txt.zuletzt-gesendet."
fi
NACHRICHT="Guten Morgen, Commander. Heute Nacht gab es $ANZAHL $WORT:
$TEXT"
for ((i = 1; i <= VERSUCHE; i++)); do
# Als 07:00 senden (außerhalb der Nachtruhe); NO_ANNOUNCE, weil jede Meldung schon einzeln im
# Briefkasten liegt.
if MC_NOTIFY_STRICT=1 MC_NOTIFY_NO_ANNOUNCE=1 MC_NOTIFY_STUNDE=07 \
bash "$SRC_DIR/notify.sh" -s "$BETREFF" "$NACHRICHT"; then
mv -f "$ARBEIT" "$QUEUE.zuletzt-gesendet"
exit 0
fi
[ "$i" -lt "$VERSUCHE" ] && sleep "$PAUSE"
done
echo "Morgenmeldung: Telegram nicht erreichbar, $ANZAHL $WORT bleiben für den nächsten Lauf liegen." >&2
exit 1