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:
parent
566aeddecc
commit
6210fccf30
|
|
@ -172,12 +172,17 @@ QString Ollie9pClient::sessionConnectionColor(const QString &sessionId) const
|
||||||
for (const QVariant &v : m_sessions) {
|
for (const QVariant &v : m_sessions) {
|
||||||
const QVariantMap s = v.toMap();
|
const QVariantMap s = v.toMap();
|
||||||
if (s.value("id").toString() != sessionId) continue;
|
if (s.value("id").toString() != sessionId) continue;
|
||||||
// Paused sessions show gray (RPC connection intentionally stopped)
|
const bool paused = s.value("paused").toBool();
|
||||||
if (s.value("paused").toBool()) return "gray";
|
const bool connected = s.value("connected").toBool();
|
||||||
// Session maintains its own RPC connection, independent of agent count.
|
// Color logic:
|
||||||
// For now, assume connected if not paused. Agent-level connection
|
// - Gray: paused (intentionally stopped)
|
||||||
// status is tracked separately for per-agent indicators.
|
// - Green: not paused AND connected
|
||||||
return "green";
|
// - 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";
|
return "gray";
|
||||||
}
|
}
|
||||||
|
|
@ -312,6 +317,9 @@ void Ollie9pClient::refreshSessions()
|
||||||
// Check if session is paused
|
// Check if session is paused
|
||||||
QString pausedStr = QString::fromUtf8(run9p({"read", "session/" + sessionId + "/paused"})).trimmed();
|
QString pausedStr = QString::fromUtf8(run9p({"read", "session/" + sessionId + "/paused"})).trimmed();
|
||||||
session["paused"] = (pausedStr == "true");
|
session["paused"] = (pausedStr == "true");
|
||||||
|
// Check RPC connection status
|
||||||
|
QString connectedStr = QString::fromUtf8(run9p({"read", "session/" + sessionId + "/connected"})).trimmed();
|
||||||
|
session["connected"] = (connectedStr == "true");
|
||||||
QVariantList agents;
|
QVariantList agents;
|
||||||
for (const QString &name : QString::fromUtf8(run9p({"ls", "session/" + sessionId + "/agent"})).trimmed().split('\n', Qt::SkipEmptyParts)) {
|
for (const QString &name : QString::fromUtf8(run9p({"ls", "session/" + sessionId + "/agent"})).trimmed().split('\n', Qt::SkipEmptyParts)) {
|
||||||
if (name == "new") continue;
|
if (name == "new") continue;
|
||||||
|
|
|
||||||
Reference in New Issue