Files
Predictalytics/docs/BETRIEB-Watchdog-Lizenz.md
T
RichardandClaude Fable 5 3a82397651 Watchdog-Heartbeat + LicenseLabrador-Lizenzgate im WinFormsHost
Bindet die beiden neuen Betriebsprojekte an:

- WatchdogHeartbeatService: periodischer POST /api/heartbeat an
  watchdog.mhdf.de (Dead-Man's-Switch), stopping-Event beim Beenden,
  Konfiguration ueber AppSettings-Kategorie "Watchdog". Fehler sind
  best effort und beeintraechtigen die App nie.
- LicenseGuard + LicenseDialog: Lizenzpruefung vor dem Start der
  MainForm, 12h-Revalidierung zur Laufzeit, Checksum-Haertung.
  Produkt-Slug/Endpoint/Public-Key sind einkompiliert.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 12:12:54 +02:00

3.4 KiB
Raw Blame History

Betrieb: Watchdog-Überwachung & LicenseLabrador-Lizenzierung

Beide Integrationen sitzen im Predictalytics.WinFormsHost (dem Produktiv-Host) und binden zwei eigenständige Schwester-Projekte an:

Projekt Pfad Rolle
Watchdog J:\Softwareprojekte\WatchDog PHP/MySQL-Server auf watchdog.mhdf.de, empfängt Heartbeats
LicenseLabrador J:\Softwareprojekte\LicenseLabrador PHP-Lizenzserver auf license.mhdf.de + C#-SDK

1. Watchdog (Dead-Man's-Switch)

Services/WatchdogHeartbeatService.cs sendet alle n Sekunden einen POST /api/heartbeat an den Watchdog. Bleiben die Heartbeats aus — weil die App abgestürzt ist oder die ganze Maschine weg ist — schlägt der Watchdog Alarm. Beim regulären Schließen geht ein POST /api/event mit kind=stopping raus, damit ein geplantes Beenden nicht als Crash alarmiert wird.

Wichtig: Ein Ausfall des Watchdogs darf Predictalytics nie beeinträchtigen. Alle Aufrufe sind best effort; der erste Fehlschlag wird als Warnung geloggt, Folgefehler nur noch auf Debug-Level (keine Log-Flut).

Konfiguration (PropertyGrid im Host, Kategorie „Watchdog")

Feld Default Bedeutung
Enabled true Heartbeats an/aus
Server URL https://watchdog.mhdf.de Basis-URL
API Key (leer) X-Watchdog-Key — Shared Key oder Agent-Token. Ohne Key passiert nichts.
Source predictalytics Monitor-Name im Dashboard (Auto-Registrierung beim ersten Beat)
Instance default falls mehrere Instanzen laufen
Interval (Sekunden) 60 Sende-Takt; Alarm nach ca. Intervall × 1,5 + 30 s

Der Key landet in der settings.json neben der Exe (nicht im Git).

PolyTrader-Maschine mit überwachen

Der Heartbeat aus Predictalytics deckt nur diesen Prozess ab. Damit auch die Maschine überwacht wird, auf der PolyTrader läuft, gehört dort zusätzlich der OS-Agent hin: WatchDog\agents\windows\watchdog-agent.ps1 als Scheduled Task (inkl. Shutdown-Hook), bzw. agents/linux/watchdog-agent.sh per systemd-Timer.


2. LicenseLabrador (Kopierschutz)

Services/LicenseGuard.cs prüft beim Start, ob eine nutzbare Lizenz vorliegt (Program.Main bricht sonst ab, bevor die MainForm überhaupt entsteht). Ohne gültige Lizenz erscheint Services/LicenseDialog.cs zur Key-Eingabe.

Produkt-Slug, Endpoint und der Ed25519-Public-Key sind bewusst einkompiliert und nicht konfigurierbar — ein einstellbarer Endpoint würde erlauben, die App auf einen gefälschten Lizenzserver zu zeigen.

  • Produkt-Slug: predictalytics
  • Offline-Gnadenfrist: 168 h (7 Tage) — danach ist Serverkontakt nötig
  • Revalidierung zur Laufzeit: alle 12 h; bei Widerruf/Ablauf beendet sich die App
  • Härtung: VerifyChecksum (HMAC über State + Key + Hardware-ID) gegen Memory-Patches; Nonce-Reflexion und Signaturprüfung übernimmt das SDK

Einmalige Server-Schritte

  1. Im Admin-Backend von license.mhdf.de das Produkt mit Slug predictalytics anlegen (ohne den Eintrag liefert der Server not_found).
  2. Lizenzschlüssel ausstellen und beim ersten Start im Dialog eingeben.
  3. Prüfen, dass der einkompilierte Public Key in LicenseGuard.PublicKeyBase64 dem signing.pub des Servers entspricht.

Deaktivierung bei PC-Wechsel

LicenseClient.DeactivateAsync() gibt die Aktivierung wieder frei. Aktuell nicht in der UI verdrahtet — bei Bedarf als Menüpunkt ergänzen.