diff --git a/scripts/src/hwlab-node-impl.ts b/scripts/src/hwlab-node-impl.ts index 93ffab52..72b9d14e 100644 --- a/scripts/src/hwlab-node-impl.ts +++ b/scripts/src/hwlab-node-impl.ts @@ -8401,15 +8401,22 @@ ${tlsLines} @api path /health* /auth* /v1* /json-rpc* /openapi* /docs* /swagg } function runTransScript(node: string, script: string, input: string, timeoutSeconds: number): CommandResult { - return runCommand([transPath(), `${node}:k3s`, "sh", "--", script], repoRoot, { input, timeoutMs: timeoutSeconds * 1000 }); + return runCommand([transPath(), `${node}:k3s`, "sh", "--", script], repoRoot, { input, timeoutMs: timeoutSeconds * 1000, env: internalTransCaptureEnv() }); } function runTransHostScript(node: string, script: string, input: string, timeoutSeconds: number): CommandResult { - return runCommand([transPath(), node, "sh", "--", script], repoRoot, { input, timeoutMs: timeoutSeconds * 1000 }); + return runCommand([transPath(), node, "sh", "--", script], repoRoot, { input, timeoutMs: timeoutSeconds * 1000, env: internalTransCaptureEnv() }); } function runTransWorkspaceStdinScript(node: string, workspace: string, script: string, timeoutSeconds: number): CommandResult { - return runCommand([transPath(), `${node}:${workspace}`, "sh"], repoRoot, { input: script, timeoutMs: timeoutSeconds * 1000 }); + return runCommand([transPath(), `${node}:${workspace}`, "sh"], repoRoot, { input: script, timeoutMs: timeoutSeconds * 1000, env: internalTransCaptureEnv() }); +} + +function internalTransCaptureEnv(): NodeJS.ProcessEnv { + return { + ...process.env, + UNIDESK_SSH_STDOUT_STREAM_MAX_BYTES: "16777216", + }; } function runObsoleteSecretCleanup(options: NodeSecretOptions, spec: RuntimeSecretSpec): Record { diff --git a/scripts/src/platform-infra-observability.ts b/scripts/src/platform-infra-observability.ts index f769bd69..b8fbcb21 100644 --- a/scripts/src/platform-infra-observability.ts +++ b/scripts/src/platform-infra-observability.ts @@ -877,19 +877,19 @@ function renderTraceResult(response: Record): RenderedCliResult if (errorSpans.length === 0) { lines.push("-"); } else { - lines.push("SERVICE DURATION_MS NAME"); + lines.push("SERVICE DURATION_MS NAME DETAIL"); for (const item of errorSpans.slice(0, 8)) { const row = recordValue(item); - lines.push(`${pad(truncate(textValue(row.service) || "-", 23), 23)} ${pad(textValue(row.durationMs) || "-", 12)} ${truncate(textValue(row.name) || "-", 80)}`); + lines.push(`${pad(truncate(textValue(row.service) || "-", 23), 23)} ${pad(textValue(row.durationMs) || "-", 12)} ${pad(truncate(textValue(row.name) || "-", 40), 40)} ${truncate(traceSpanDetail(row), 96)}`); } } if (matchedSpans.length > 0) { lines.push(""); lines.push("MATCHED_SPANS"); - lines.push("SERVICE DURATION_MS NAME"); + lines.push("SERVICE DURATION_MS NAME DETAIL"); for (const item of matchedSpans.slice(0, 8)) { const row = recordValue(item); - lines.push(`${pad(truncate(textValue(row.service) || "-", 23), 23)} ${pad(textValue(row.durationMs) || "-", 12)} ${truncate(textValue(row.name) || "-", 80)}`); + lines.push(`${pad(truncate(textValue(row.service) || "-", 23), 23)} ${pad(textValue(row.durationMs) || "-", 12)} ${pad(truncate(textValue(row.name) || "-", 40), 40)} ${truncate(traceSpanDetail(row), 96)}`); } } lines.push(""); @@ -904,6 +904,36 @@ function renderTraceResult(response: Record): RenderedCliResult }; } +function traceSpanDetail(span: Record): string { + const attrs = recordValue(span.attributes); + const parts: string[] = []; + for (const key of [ + "failureKind", + "message", + "eventType", + "toolName", + "exitCode", + "durationMs", + "waitingFor", + "lastEventLabel", + "idleMs", + "idleSeconds", + "idleThresholdMs", + "lastEventAgeMs", + "terminalStatus", + "http.method", + "http.route", + "http.status_code", + "runId", + "commandId", + "runnerJobId", + ]) { + const value = textValue(attrs[key]); + if (value) parts.push(`${key}=${value}`); + } + return parts.join(" ") || "-"; +} + function recordValue(value: unknown): Record { return typeof value === "object" && value !== null && !Array.isArray(value) ? value as Record : {}; } @@ -1547,6 +1577,8 @@ IMPORTANT_ATTRS = [ "returnedEvents", "sinceSeq", "afterSeq", "limit", "fromSeq", "toSeq", "totalEvents", "hasMore", "fullTraceLoaded", "rawEventCount", "maxSeq", "traceLastSeq", "endSeq", "commandFiltered", + "waitingFor", "lastEventLabel", "idleMs", "idleSeconds", "idleThresholdMs", + "lastEventAgeMs", "toolName", "exitCode", "durationMs", "command", "error", "error.message", "exception.type", "exception.message", "valuesPrinted", ] @@ -1789,6 +1821,8 @@ IMPORTANT_ATTRS = [ "returnedEvents", "sinceSeq", "afterSeq", "limit", "fromSeq", "toSeq", "totalEvents", "hasMore", "fullTraceLoaded", "rawEventCount", "maxSeq", "traceLastSeq", "endSeq", "commandFiltered", + "waitingFor", "lastEventLabel", "idleMs", "idleSeconds", "idleThresholdMs", + "lastEventAgeMs", "toolName", "exitCode", "durationMs", "command", "error", "error.message", "exception.type", "exception.message", "valuesPrinted", ] @@ -2102,6 +2136,8 @@ IMPORTANT_ATTRS = [ "maxSeq", "traceLastSeq", "endSeq", "commandFiltered", "seq", "eventSeq", "sourceSeq", "sourceLatestSeq", "latestSeq", "lastSeq", "sourceEventCount", "projectedSeq", "lastProjectedSeq", + "waitingFor", "lastEventLabel", "idleMs", "idleSeconds", "idleThresholdMs", + "lastEventAgeMs", "toolName", "exitCode", "durationMs", "command", "status", "turnStatus", "error", "error.message", "exception.type", "exception.message", "valuesPrinted", ]