feat: add profile ui and request telemetry

This commit is contained in:
2026-06-29 04:40:32 +08:00
parent 7f7f7e5147
commit 4605885262
15 changed files with 7273 additions and 1684 deletions
+19 -2
View File
@@ -287,7 +287,14 @@ async function run() {
const gateway = startGateway(configPath, logPath);
try {
await waitForHealth(`http://127.0.0.1:${gatewayPort}${config.health_path}`);
try {
await waitForHealth(`http://127.0.0.1:${gatewayPort}${config.health_path}`);
} catch (error) {
const output = gateway.getOutput();
throw new Error(
`${error?.message || error}\nstdout:\n${output.stdout || "(empty)"}\nstderr:\n${output.stderr || "(empty)"}`,
);
}
const modelsResponse = await fetch(`http://127.0.0.1:${gatewayPort}/v1/models`);
assert(modelsResponse.status === 200, `/v1/models 透传状态异常: ${modelsResponse.status}`);
@@ -323,15 +330,25 @@ async function run() {
);
}
const recoveredPayload = JSON.stringify({ test_fail_before_response_once: true });
const recoveredResponse = await fetch(`http://127.0.0.1:${gatewayPort}/responses`, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ test_fail_before_response_once: true }),
body: recoveredPayload,
});
const recoveredBody = await recoveredResponse.json();
assert(recoveredResponse.status === 200, `首次 fetch failed 后未自动恢复: ${recoveredResponse.status}`);
assert(recoveredBody?.retry_attempt === 2, "首次 fetch failed 后未命中第二次上游请求");
const requestsResponse = await fetch(`http://127.0.0.1:${gatewayPort}/__codex_retry_gateway/api/requests?limit=20`);
const requestsPayload = await requestsResponse.json();
const recoveredEntry = requestsPayload?.entries?.find((entry) => entry.path === "/responses" && entry.status_code === 200);
assert(requestsResponse.status === 200, `请求历史 API 状态异常: ${requestsResponse.status}`);
assert(
recoveredEntry?.request_body_bytes === Buffer.byteLength(recoveredPayload),
`请求体大小记录异常: ${recoveredEntry?.request_body_bytes}`,
);
for (const streamPath of [
"/responses",
"/v1/responses",