

























@@ -1280,6 +1280,86 @@ describe("stuck session diagnostics threshold", () => {
12801280);
12811281});
128212821283+it("does not count the active processing message as queued liveness backlog", () => {
1284+const warnSpy = vi.spyOn(diagnosticLogger, "warn").mockImplementation(() => undefined);
1285+1286+startDiagnosticHeartbeat(
1287+{
1288+diagnostics: {
1289+enabled: true,
1290+},
1291+},
1292+{
1293+emitMemorySample: createEmitMemorySampleMock(),
1294+sampleLiveness: () => ({
1295+reasons: ["event_loop_delay"],
1296+intervalMs: 30_000,
1297+eventLoopDelayP99Ms: 53.6,
1298+eventLoopDelayMaxMs: 2_761.9,
1299+eventLoopUtilization: 0.785,
1300+cpuCoreRatio: 0.378,
1301+}),
1302+},
1303+);
1304+1305+logMessageQueued({ sessionId: "s1", sessionKey: "main", source: "discord" });
1306+logSessionStateChange({ sessionId: "s1", sessionKey: "main", state: "processing" });
1307+vi.advanceTimersByTime(30_000);
1308+1309+expectNoLoggerMessageContaining(warnSpy, "liveness warning:");
1310+requireMatchingRecord(
1311+getDiagnosticStabilitySnapshot({ limit: 10 }).events,
1312+{
1313+type: "diagnostic.liveness.warning",
1314+level: "info",
1315+active: 1,
1316+waiting: 0,
1317+queued: 0,
1318+},
1319+"active processing liveness stability event",
1320+);
1321+});
1322+1323+it("counts messages queued behind already active work as liveness backlog", () => {
1324+const warnSpy = vi.spyOn(diagnosticLogger, "warn").mockImplementation(() => undefined);
1325+1326+startDiagnosticHeartbeat(
1327+{
1328+diagnostics: {
1329+enabled: true,
1330+},
1331+},
1332+{
1333+emitMemorySample: createEmitMemorySampleMock(),
1334+sampleLiveness: () => ({
1335+reasons: ["event_loop_delay"],
1336+intervalMs: 30_000,
1337+eventLoopDelayP99Ms: 53.6,
1338+eventLoopDelayMaxMs: 2_761.9,
1339+eventLoopUtilization: 0.785,
1340+cpuCoreRatio: 0.378,
1341+}),
1342+},
1343+);
1344+1345+logSessionStateChange({ sessionId: "s1", sessionKey: "main", state: "processing" });
1346+logMessageQueued({ sessionId: "s1", sessionKey: "main", source: "discord" });
1347+vi.advanceTimersByTime(30_000);
1348+1349+expectLoggerMessageContaining(warnSpy, "liveness warning:");
1350+requireMatchingRecord(
1351+getDiagnosticStabilitySnapshot({ limit: 10 }).events,
1352+{
1353+type: "diagnostic.liveness.warning",
1354+level: "warning",
1355+active: 1,
1356+waiting: 0,
1357+queued: 1,
1358+},
1359+"queued backlog liveness stability event",
1360+);
1361+});
1362+12831363it("does not let idle liveness samples suppress later active-work warnings", () => {
12841364const warnSpy = vi.spyOn(diagnosticLogger, "warn").mockImplementation(() => undefined);
12851365此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。