feat: session color reflects RPC connection health

- Green: connected and not paused (healthy)
- Gray: paused (intentional)
- Red: not paused but disconnected (crashed/broken)
- Yellow: paused but still connected (zombie)
This commit is contained in:
Levi Neely 2026-08-03 18:14:03 +02:00
parent 566aeddecc
commit 6210fccf30
1 changed files with 14 additions and 6 deletions

View File

@ -172,12 +172,17 @@ QString Ollie9pClient::sessionConnectionColor(const QString &sessionId) const
for (const QVariant &v : m_sessions) {
const QVariantMap s = v.toMap();
if (s.value("id").toString() != sessionId) continue;
// Paused sessions show gray (RPC connection intentionally stopped)
if (s.value("paused").toBool()) return "gray";
// Session maintains its own RPC connection, independent of agent count.
// For now, assume connected if not paused. Agent-level connection
// status is tracked separately for per-agent indicators.
return "green";
const bool paused = s.value("paused").toBool();
const bool connected = s.value("connected").toBool();
// Color logic:
// - Gray: paused (intentionally stopped)
// - Green: not paused AND connected
// - Red: not paused AND disconnected (crashed/broken)
// - Yellow: paused BUT still connected (zombie - shouldn't happen)
if (paused && connected) return "yellow"; // zombie
if (paused) return "gray"; // intentionally paused
if (connected) return "green"; // healthy
return "red"; // crashed/broken
}
return "gray";
}
@ -312,6 +317,9 @@ void Ollie9pClient::refreshSessions()
// Check if session is paused
QString pausedStr = QString::fromUtf8(run9p({"read", "session/" + sessionId + "/paused"})).trimmed();
session["paused"] = (pausedStr == "true");
// Check RPC connection status
QString connectedStr = QString::fromUtf8(run9p({"read", "session/" + sessionId + "/connected"})).trimmed();
session["connected"] = (connectedStr == "true");
QVariantList agents;
for (const QString &name : QString::fromUtf8(run9p({"ls", "session/" + sessionId + "/agent"})).trimmed().split('\n', Qt::SkipEmptyParts)) {
if (name == "new") continue;