fix(web-probe): report recent observe window

This commit is contained in:
Codex
2026-06-22 00:51:56 +00:00
parent 99f1658091
commit 4bed2421b6
2 changed files with 139 additions and 14 deletions
+43
View File
@@ -7475,6 +7475,7 @@ function runNodeWebProbeObserveAnalyze(options: NodeWebProbeObserveOptions, spec
"const slimSlowApi = (item) => { const v = objectOrNull(item) || {}; return { path: clip(v.path ?? v.route, 96), route: clip(v.route ?? v.path, 96), sampleCount: v.sampleCount ?? null, p95Ms: v.p95Ms ?? v.p95 ?? null, maxMs: v.maxMs ?? v.max ?? null, overFiveSecondCount: v.overFiveSecondCount ?? null }; };",
"const slimFinding = (item) => { const v = objectOrNull(item) || {}; return { kind: clip(v.kind ?? v.code, 48), code: clip(v.code ?? v.kind, 48), severity: clip(v.severity ?? v.level, 24), level: clip(v.level ?? v.severity, 24), count: v.count ?? v.sampleCount ?? null, sampleCount: v.sampleCount ?? v.count ?? null, summary: clip(v.summary ?? v.message, 180), message: clip(v.message ?? v.summary, 180) }; };",
"const slimDomGroup = (item) => { const v = objectOrNull(item) || {}; return { count: v.count ?? null, firstAt: v.firstAt ?? null, lastAt: v.lastAt ?? null, text: clip(v.text ?? v.preview, 180) }; };",
"const slimNetworkGroup = (item) => { const v = objectOrNull(item) || {}; return { count: v.count ?? null, method: clip(v.method, 12), status: v.status ?? null, path: clip(v.path, 96), firstAt: v.firstAt ?? null, lastAt: v.lastAt ?? null, promptIndexes: Array.isArray(v.promptIndexes) ? v.promptIndexes.slice(0, 6) : [], failureKinds: Array.isArray(v.failureKinds) ? v.failureKinds.slice(0, 4).map((x) => clip(x, 48)) : [] }; };",
"const slimDomSample = (item) => { const v = objectOrNull(item) || {}; return { seq: v.seq ?? null, ts: v.ts ?? null, source: clip(v.source, 32), diagnosticCode: clip(v.diagnosticCode, 48), traceId: clip(v.traceId, 64), httpStatus: v.httpStatus ?? null, idleSeconds: v.idleSeconds ?? null, waitingFor: clip(v.waitingFor, 48), lastEventLabel: clip(v.lastEventLabel, 80), text: clip(v.text ?? v.preview, 180) }; };",
"const slimConsoleGroup = (item) => { const v = objectOrNull(item) || {}; return { count: v.count ?? null, type: clip(v.type, 24), status: v.status ?? null, path: clip(v.path, 96), lastAt: v.lastAt ?? v.firstAt ?? null, firstAt: v.firstAt ?? null, traceIds: Array.isArray(v.traceIds) ? v.traceIds.slice(0, 3).map((x) => clip(x, 64)) : [] }; };",
"const slimConsoleSample = (item) => { const v = objectOrNull(item) || {}; return { ts: v.ts ?? null, type: clip(v.type, 24), status: v.status ?? null, path: clip(v.path, 96), traceId: clip(v.traceId, 64), text: clip(v.text, 180) }; };",
@@ -7502,12 +7503,16 @@ function runNodeWebProbeObserveAnalyze(options: NodeWebProbeObserveOptions, spec
"const compact = source ? {",
" ok: analyzerExit === 0 && source.ok !== false,",
" counts: source.counts ?? null,",
" analysisWindow: objectOrNull(source.analysisWindow),",
" archiveSummary: objectOrNull(source.archiveSummary),",
" sampleMetrics: metrics,",
" runtimeAlerts,",
" pagePerformance,",
" promptNetwork,",
" pagePerformanceSlowApi: takeHead(source.pagePerformanceSlowApi, 5).map(slimSlowApi),",
" findings: takeHead(source.findings, 8).map(slimFinding),",
" httpErrorGroups: takeHead(source.httpErrorGroups, 8).map(slimNetworkGroup),",
" requestFailedGroups: takeHead(source.requestFailedGroups, 8).map(slimNetworkGroup),",
" domDiagnosticGroups: takeHead(source.domDiagnosticGroups, 5).map(slimDomGroup),",
" domDiagnosticSamples: takeHead(source.domDiagnosticSamples, 5).map(slimDomSample),",
" consoleAlertGroups: takeHead(source.consoleAlertGroups, 5).map(slimConsoleGroup),",
@@ -7571,6 +7576,8 @@ function renderWebObserveAnalyzeTable(value: Record<string, unknown>): string {
const analyzer = record(analysis?.analyzer);
const result = record(value.result);
const counts = record(analysis?.counts);
const analysisWindow = record(analysis?.analysisWindow);
const archiveSummary = record(analysis?.archiveSummary);
const sampleMetrics = record(analysis?.sampleMetrics);
const runtimeAlerts = record(analysis?.runtimeAlerts);
const pagePerformance = record(analysis?.pagePerformance);
@@ -7581,6 +7588,8 @@ function renderWebObserveAnalyzeTable(value: Record<string, unknown>): string {
const turnColumnCount = Array.isArray(sampleMetrics?.turnColumns) ? sampleMetrics.turnColumns.length : sampleMetrics?.turnColumns;
const slowApis = Array.isArray(analysis?.pagePerformanceSlowApi) ? analysis.pagePerformanceSlowApi.map(record).filter((item): item is Record<string, unknown> => item !== null).slice(0, 8) : [];
const findings = Array.isArray(analysis?.findings) ? analysis.findings.map(record).filter((item): item is Record<string, unknown> => item !== null).slice(0, 8) : [];
const httpErrorGroups = Array.isArray(analysis?.httpErrorGroups) ? analysis.httpErrorGroups.map(record).filter((item): item is Record<string, unknown> => item !== null).slice(0, 8) : [];
const requestFailedGroups = Array.isArray(analysis?.requestFailedGroups) ? analysis.requestFailedGroups.map(record).filter((item): item is Record<string, unknown> => item !== null).slice(0, 8) : [];
const domDiagnostics = Array.isArray(analysis?.domDiagnosticGroups) ? analysis.domDiagnosticGroups.map(record).filter((item): item is Record<string, unknown> => item !== null).slice(0, 5) : [];
const domDiagnosticSamples = Array.isArray(analysis?.domDiagnosticSamples) ? analysis.domDiagnosticSamples.map(record).filter((item): item is Record<string, unknown> => item !== null).slice(0, 8) : [];
const consoleAlertGroups = Array.isArray(analysis?.consoleAlertGroups) ? analysis.consoleAlertGroups.map(record).filter((item): item is Record<string, unknown> => item !== null).slice(0, 8) : [];
@@ -7635,6 +7644,22 @@ function renderWebObserveAnalyzeTable(value: Record<string, unknown>): string {
webObserveText(item.allowedIncreaseSeconds),
webObserveShort(webObserveText(item.traceId), 24),
]);
const httpErrorRows = httpErrorGroups.map((item) => [
webObserveText(item.count),
webObserveText(item.method),
webObserveText(item.status),
webObserveShort(webObserveText(item.path), 52),
webObserveShort(webObserveText(item.lastAt ?? item.firstAt), 24),
webObserveShort(webObserveArray(item.failureKinds).join(",") || "-", 40),
]);
const requestFailedRows = requestFailedGroups.map((item) => [
webObserveText(item.count),
webObserveText(item.method),
webObserveText(item.status),
webObserveShort(webObserveText(item.path), 52),
webObserveShort(webObserveText(item.lastAt ?? item.firstAt), 24),
webObserveShort(webObserveArray(item.failureKinds).join(",") || "-", 40),
]);
const lines = [
`hwlab nodes web-probe observe analyze (${webObserveText(value.status)})`,
"",
@@ -7665,6 +7690,18 @@ function renderWebObserveAnalyzeTable(value: Record<string, unknown>): string {
webObserveText(counts?.artifacts),
]]),
"",
"Analysis window:",
webObserveTable(["WINDOW", "FROM", "TO", "SAMPLES", "NETWORK", "CONSOLE", "ARCHIVE_SAMPLES", "ARCHIVE_RED"], [[
webObserveText(analysisWindow?.name ?? "recent-5m"),
webObserveShort(webObserveText(analysisWindow?.fromAt), 24),
webObserveShort(webObserveText(analysisWindow?.toAt), 24),
webObserveText(analysisWindow?.samples),
webObserveText(analysisWindow?.network),
webObserveText(analysisWindow?.console),
webObserveText(record(archiveSummary?.sampleMetrics)?.sampleCount ?? counts?.samples),
webObserveText(archiveSummary?.redFindingCount),
]]),
"",
"Reports:",
webObserveTable(["KIND", "PATH", "SHA256"], [
["json", webObserveShort(webObserveText(analysis?.reportJsonPath), 96), webObserveShort(webObserveText(analysis?.reportJsonSha256), 24)],
@@ -7717,6 +7754,12 @@ function renderWebObserveAnalyzeTable(value: Record<string, unknown>): string {
webObserveText(promptNetwork?.promptSegments),
]]),
"",
"HTTP error groups:",
webObserveTable(["COUNT", "METHOD", "STATUS", "PATH", "LAST", "FAILURE"], httpErrorRows.length > 0 ? httpErrorRows : [["-", "-", "-", "-", "-", "-"]]),
"",
"Request failed groups:",
webObserveTable(["COUNT", "METHOD", "STATUS", "PATH", "LAST", "FAILURE"], requestFailedRows.length > 0 ? requestFailedRows : [["-", "-", "-", "-", "-", "-"]]),
"",
"Slow API (>5s):",
webObserveTable(["PATH", "SAMPLES", "P95", "MAX", "OVER5S"], slowApis.length > 0 ? slowApis.map((item) => [
webObserveShort(webObserveText(item.path ?? item.route), 52),