fix(aggregator): Envelope aus Peer-Responses entpacken vor Weiterleitung

callPeer speicherte den rohen HTTP-Response-Body ({"data": {...}, "error":
null}) in PeerResult.Data. Der lokale Pfad serialisiert dagegen die Struct
direkt ohne Envelope. Im UI führte das auf Peer-Nodes zu
`r.data.load_avg_1 = undefined` → TypeError: Cannot read properties of
undefined (reading 'toFixed') → Cluster-Seite nicht ladbar.

Fix: Envelope-Feld `data` extrahieren; fallback auf rohen Body wenn kein
gültiger Envelope.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Debian
2026-05-29 17:52:25 +02:00
parent de28523708
commit 6bb1c5c6d3
5 changed files with 17 additions and 5 deletions

View File

@@ -151,7 +151,19 @@ func (a *Aggregator) callPeer(ctx context.Context, p models.HANode, path string)
return res
}
res.OK = true
res.Data = body
// Agent-Endpoints liefern die Standard-API-Envelope zurück
// ({"data": {...}, "error": null, "message": "ok"}). Wir entpacken
// das `data`-Feld so dass der Aufrufer direkt die Nutzlast bekommt —
// konsistent mit dem Lokal-Pfad (der marshalt die Struct direkt ohne
// Envelope).
var env struct {
Data json.RawMessage `json:"data"`
}
if err := json.Unmarshal(body, &env); err == nil && len(env.Data) > 0 {
res.Data = env.Data
} else {
res.Data = body
}
res.Duration = time.Since(start).Milliseconds()
return res
}