Watchdog-Heartbeat + LicenseLabrador-Lizenzpruefung eingebunden
Slices W-A/W-B/W-C und L-A aus UMSETZUNGSPLAN-Watchdog-LicenseLabrador-Integration. Watchdog (Dead-Man's-Switch, externer Server): - WatchdogHeartbeatService als BackgroundService + DI-Singleton; jeder Sendeversuch gekapselt, ein Ausfall des Watchdogs beeintraechtigt PolyTrader nie. - Eigene Implementierung statt Test-Client des Fremdprojekts: TLS-Pruefung bleibt aktiv, http:// nur fuer localhost (Agent-Token nicht im Klartext ins Netz). - Status aus dem App-Log abgeleitet (Error mit 5-Minuten-Sticky-Fenster, entprellt), Lifecycle-Events started/stopping. - Konfiguration in ServerSettings; Agent-Token [Browsable(false)] mit maskierter Eingabe + Statusanzeige, bei gesetztem Master-Key verschluesselt (enc:v1:). Lizenz (LicenseLabrador, Ed25519): - LicenseGate.RunStartupGate prueft beim Start; bei ungueltiger Lizenz wird die Modulliste leer gebaut, sodass nur die Core-Shell (Terminal/Einstellungen) startet. Bewusst kein Environment.Exit - ein Trading-Bot darf nicht mitten im Lauf hart sterben. TamperSuspected gilt als nicht nutzbar. - LicenseDialog (partial + .Designer.cs) fuer Start- und Verwalten-Modus, mit Hardware-ID zum Kopieren; Smoke-UI konstruiert beide Modi headless. - Master-Key wird jetzt VOR dem Host-Build geladen, da auch der Lizenzschluessel entschluesselt werden muss; derselbe TerminalLogger wird als Singleton weitergereicht, damit die Startmeldungen im Terminal-Fenster erscheinen. Der Lizenz-SDK-Client wird per Cross-Repo-Projektreferenz auf ..\..\LicenseLabrador eingebunden, damit SDK-Fixes ohne Kopie einfliessen. 484 Zeilen Tests fuer den Heartbeat; Suite gruen (438 Tests). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Generated
+31
-1
@@ -26,6 +26,9 @@ namespace PolyTraderSharp.Ui.Views
|
||||
btn_loadsettings = new ToolStripButton();
|
||||
btnGenMasterKey = new ToolStripButton();
|
||||
btnSetOpenRouterKey = new ToolStripButton();
|
||||
btnSetWatchdogToken = new ToolStripButton();
|
||||
btnTestWatchdog = new ToolStripButton();
|
||||
btnSetLicenseKey = new ToolStripButton();
|
||||
tabPage2 = new TabPage();
|
||||
pgAccount = new PropertyGrid();
|
||||
dgvAccounts = new DataGridView();
|
||||
@@ -74,7 +77,7 @@ namespace PolyTraderSharp.Ui.Views
|
||||
// toolStrip2
|
||||
//
|
||||
toolStrip2.ImageScalingSize = new Size(24, 24);
|
||||
toolStrip2.Items.AddRange(new ToolStripItem[] { btn_save, btn_loadsettings, btnGenMasterKey, btnSetOpenRouterKey });
|
||||
toolStrip2.Items.AddRange(new ToolStripItem[] { btn_save, btn_loadsettings, btnGenMasterKey, btnSetOpenRouterKey, btnSetWatchdogToken, btnTestWatchdog, btnSetLicenseKey });
|
||||
toolStrip2.Location = new Point(3, 3);
|
||||
toolStrip2.Name = "toolStrip2";
|
||||
toolStrip2.Size = new Size(1171, 34);
|
||||
@@ -112,6 +115,30 @@ namespace PolyTraderSharp.Ui.Views
|
||||
btnSetOpenRouterKey.Size = new Size(220, 29);
|
||||
btnSetOpenRouterKey.Text = "OpenRouter-Key setzen …";
|
||||
btnSetOpenRouterKey.ToolTipText = "Speichert den OpenRouter-API-Key für den Supervisor (gitignorierte Datei openrouter.key).";
|
||||
//
|
||||
// btnSetWatchdogToken
|
||||
//
|
||||
btnSetWatchdogToken.DisplayStyle = ToolStripItemDisplayStyle.Text;
|
||||
btnSetWatchdogToken.Name = "btnSetWatchdogToken";
|
||||
btnSetWatchdogToken.Size = new Size(220, 29);
|
||||
btnSetWatchdogToken.Text = "Watchdog-Token setzen …";
|
||||
btnSetWatchdogToken.ToolTipText = "Speichert den Watchdog-Agent-Token (maskierte Eingabe, bei gesetztem Master-Key verschlüsselt).";
|
||||
//
|
||||
// btnTestWatchdog
|
||||
//
|
||||
btnTestWatchdog.DisplayStyle = ToolStripItemDisplayStyle.Text;
|
||||
btnTestWatchdog.Name = "btnTestWatchdog";
|
||||
btnTestWatchdog.Size = new Size(210, 29);
|
||||
btnTestWatchdog.Text = "Test-Heartbeat senden";
|
||||
btnTestWatchdog.ToolTipText = "Sendet sofort einen Heartbeat an den konfigurierten Watchdog-Server und meldet das Ergebnis.";
|
||||
//
|
||||
// btnSetLicenseKey
|
||||
//
|
||||
btnSetLicenseKey.DisplayStyle = ToolStripItemDisplayStyle.Text;
|
||||
btnSetLicenseKey.Name = "btnSetLicenseKey";
|
||||
btnSetLicenseKey.Size = new Size(210, 29);
|
||||
btnSetLicenseKey.Text = "Lizenz prüfen / setzen …";
|
||||
btnSetLicenseKey.ToolTipText = "Öffnet den Lizenzdialog (Hardware-ID + Server-Validierung). Gültiger Schlüssel wird gespeichert (bei Master-Key verschlüsselt).";
|
||||
//
|
||||
// tabPage2
|
||||
//
|
||||
@@ -207,6 +234,9 @@ namespace PolyTraderSharp.Ui.Views
|
||||
private ToolStripButton btn_loadsettings;
|
||||
private ToolStripButton btnGenMasterKey;
|
||||
private ToolStripButton btnSetOpenRouterKey;
|
||||
private ToolStripButton btnSetWatchdogToken;
|
||||
private ToolStripButton btnTestWatchdog;
|
||||
private ToolStripButton btnSetLicenseKey;
|
||||
private ToolStrip toolStripAccounts;
|
||||
private ToolStripButton btnAccNew;
|
||||
private ToolStripButton btnAccDelete;
|
||||
|
||||
Reference in New Issue
Block a user