diff --git a/src/fgai/monitor.py b/src/fgai/monitor.py index 8c5efcf..e8d7d4c 100644 --- a/src/fgai/monitor.py +++ b/src/fgai/monitor.py @@ -388,6 +388,11 @@ def cached_status_with_error(cache_path: str, error_status: dict[str, object]) - row.setdefault("raw_error", "") row.setdefault("aggregate_error", "") row.setdefault("error", row.get("aggregate_error") or row.get("raw_error") or "") + if row.get("aggregate_status") == "error" and not row.get("aggregate_error") and row.get("error"): + row["aggregate_error"] = str(row.get("error", "")) + if row.get("partial") and not row.get("raw_error") and row.get("error"): + row["raw_error"] = str(row.get("error", "")) + cached["status_schema"] = 2 cached["generated_at"] = int(time.time()) cached["stale"] = True cached["stale_reason"] = "live_mcp_error" diff --git a/tests/test_monitor.py b/tests/test_monitor.py index 9819d6c..ca4f6ab 100644 --- a/tests/test_monitor.py +++ b/tests/test_monitor.py @@ -119,7 +119,7 @@ class MonitorTests(unittest.TestCase): { "summary": {"total": 42}, "capabilities": {"graylog_mcp": {"status": "connected"}}, - "stream_coverage": [{"stream_name": "Firewall", "aggregate_status": "error"}], + "stream_coverage": [{"stream_name": "Firewall", "aggregate_status": "error", "error": "old aggregate error"}], "cross_source_correlations": [{"entity": "10.0.0.1"}], }, ) @@ -128,10 +128,11 @@ class MonitorTests(unittest.TestCase): self.assertIsNotNone(status) self.assertEqual(status["summary"]["total"], 42) + self.assertEqual(status["status_schema"], 2) self.assertTrue(status["stale"]) self.assertEqual(status["capabilities"]["graylog_mcp"]["status"], "error") self.assertTrue(status["status_cache"]["served_from_cache"]) - self.assertEqual(status["stream_coverage"][0]["aggregate_error"], "") + self.assertEqual(status["stream_coverage"][0]["aggregate_error"], "old aggregate error") self.assertEqual(status["stream_coverage"][0]["raw_error"], "")