

























@@ -1333,91 +1333,50 @@ describe("diagnostics-otel service", () => {
13331333expect(toolOptions?.startTime).toBeTypeOf("number");
13341334expect(toolCall?.[2]).toBeUndefined();
133513351336-expect(
1337-telemetryState.histograms.get("openclaw.model_call.duration_ms")?.record,
1338-).toHaveBeenCalledWith(
1339-80,
1340-expect.objectContaining({
1341-"openclaw.provider": "openai",
1342-"openclaw.model": "gpt-5.4",
1343-}),
1344-);
1345-expect(
1346-telemetryState.histograms.get("openclaw.model_call.request_bytes")?.record,
1347-).toHaveBeenCalledWith(
1348-1234,
1349-expect.objectContaining({
1350-"openclaw.provider": "openai",
1351-"openclaw.model": "gpt-5.4",
1352-}),
1353-);
1354-expect(
1355-telemetryState.histograms.get("openclaw.model_call.response_bytes")?.record,
1356-).toHaveBeenCalledWith(
1357-567,
1358-expect.objectContaining({
1359-"openclaw.provider": "openai",
1360-"openclaw.model": "gpt-5.4",
1361-}),
1362-);
1363-expect(
1364-telemetryState.histograms.get("openclaw.model_call.time_to_first_byte_ms")?.record,
1365-).toHaveBeenCalledWith(
1366-45,
1367-expect.objectContaining({
1368-"openclaw.provider": "openai",
1369-"openclaw.model": "gpt-5.4",
1370-}),
1371-);
1336+const modelCallDuration = lastHistogramRecord("openclaw.model_call.duration_ms");
1337+expect(modelCallDuration?.[0]).toBe(80);
1338+expect(modelCallDuration?.[1]?.["openclaw.provider"]).toBe("openai");
1339+expect(modelCallDuration?.[1]?.["openclaw.model"]).toBe("gpt-5.4");
1340+const requestBytes = lastHistogramRecord("openclaw.model_call.request_bytes");
1341+expect(requestBytes?.[0]).toBe(1234);
1342+expect(requestBytes?.[1]?.["openclaw.provider"]).toBe("openai");
1343+expect(requestBytes?.[1]?.["openclaw.model"]).toBe("gpt-5.4");
1344+const responseBytes = lastHistogramRecord("openclaw.model_call.response_bytes");
1345+expect(responseBytes?.[0]).toBe(567);
1346+expect(responseBytes?.[1]?.["openclaw.provider"]).toBe("openai");
1347+expect(responseBytes?.[1]?.["openclaw.model"]).toBe("gpt-5.4");
1348+const timeToFirstByte = lastHistogramRecord("openclaw.model_call.time_to_first_byte_ms");
1349+expect(timeToFirstByte?.[0]).toBe(45);
1350+expect(timeToFirstByte?.[1]?.["openclaw.provider"]).toBe("openai");
1351+expect(timeToFirstByte?.[1]?.["openclaw.model"]).toBe("gpt-5.4");
13721352const modelCallSpan = telemetryState.spans.find((span) => span.name === "openclaw.model.call");
1373-expect(modelCallSpan?.setAttributes).toHaveBeenCalledWith(
1374-expect.objectContaining({
1375-"openclaw.model_call.request_bytes": 1234,
1376-"openclaw.model_call.response_bytes": 567,
1377-"openclaw.model_call.time_to_first_byte_ms": 45,
1378-}),
1379-);
1380-expect(telemetryState.histograms.get("openclaw.run.duration_ms")?.record).toHaveBeenCalledWith(
1381-100,
1382-expect.not.objectContaining({
1383-"openclaw.runId": expect.anything(),
1384-}),
1385-);
1386-expect(
1387-telemetryState.histograms.get("openclaw.harness.duration_ms")?.record,
1388-).toHaveBeenCalledWith(
1389-90,
1390-expect.objectContaining({
1391-"openclaw.harness.id": "codex",
1392-"openclaw.harness.plugin": "codex-plugin",
1393-"openclaw.outcome": "completed",
1394-}),
1395-);
1396-expect(
1397-telemetryState.histograms.get("openclaw.harness.duration_ms")?.record,
1398-).toHaveBeenCalledWith(
1399-90,
1400-expect.not.objectContaining({
1401-"openclaw.runId": expect.anything(),
1402-"openclaw.sessionKey": expect.anything(),
1403-}),
1404-);
1405-expect(
1406-telemetryState.histograms.get("openclaw.tool.execution.duration_ms")?.record,
1407-).toHaveBeenCalledWith(
1408-20,
1409-expect.not.objectContaining({
1410-"openclaw.errorCode": expect.anything(),
1411-"openclaw.runId": expect.anything(),
1412-}),
1413-);
1353+const modelSpanAttributes = modelCallSpan?.setAttributes.mock.calls[0]?.[0] as
1354+| Record<string, unknown>
1355+| undefined;
1356+expect(modelSpanAttributes?.["openclaw.model_call.request_bytes"]).toBe(1234);
1357+expect(modelSpanAttributes?.["openclaw.model_call.response_bytes"]).toBe(567);
1358+expect(modelSpanAttributes?.["openclaw.model_call.time_to_first_byte_ms"]).toBe(45);
1359+const runDuration = lastHistogramRecord("openclaw.run.duration_ms");
1360+expect(runDuration?.[0]).toBe(100);
1361+expect(Object.hasOwn(runDuration?.[1] ?? {}, "openclaw.runId")).toBe(false);
1362+const harnessDuration = lastHistogramRecord("openclaw.harness.duration_ms");
1363+expect(harnessDuration?.[0]).toBe(90);
1364+expect(harnessDuration?.[1]?.["openclaw.harness.id"]).toBe("codex");
1365+expect(harnessDuration?.[1]?.["openclaw.harness.plugin"]).toBe("codex-plugin");
1366+expect(harnessDuration?.[1]?.["openclaw.outcome"]).toBe("completed");
1367+expect(Object.hasOwn(harnessDuration?.[1] ?? {}, "openclaw.runId")).toBe(false);
1368+expect(Object.hasOwn(harnessDuration?.[1] ?? {}, "openclaw.sessionKey")).toBe(false);
1369+const toolDuration = lastHistogramRecord("openclaw.tool.execution.duration_ms");
1370+expect(toolDuration?.[0]).toBe(20);
1371+expect(Object.hasOwn(toolDuration?.[1] ?? {}, "openclaw.errorCode")).toBe(false);
1372+expect(Object.hasOwn(toolDuration?.[1] ?? {}, "openclaw.runId")).toBe(false);
1414137314151374const toolSpan = telemetryState.spans.find((span) => span.name === "openclaw.tool.execution");
14161375expect(toolSpan?.setStatus).toHaveBeenCalledWith({
14171376code: 2,
14181377message: "TypeError",
14191378});
1420-expect(toolSpan?.end).toHaveBeenCalledWith(expect.any(Number));
1379+expect(toolSpan?.end.mock.calls[0]?.[0]).toBeTypeOf("number");
14211380expect(telemetryState.tracer.setSpanContext).not.toHaveBeenCalled();
14221381await service.stop?.(ctx);
14231382});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。