fix: 收敛 OTel validate 默认输出

This commit is contained in:
Codex
2026-07-10 06:40:34 +02:00
parent da2da4ce67
commit 0e8f79277f
@@ -205,7 +205,7 @@ function recordList(value: unknown): Record<string, unknown>[] {
: [];
}
export async function validate(config: UniDeskConfig, options: CommonOptions): Promise<Record<string, unknown>> {
export async function validate(config: UniDeskConfig, options: CommonOptions): Promise<Record<string, unknown> | RenderedCliResult> {
const observability = readObservabilityConfig();
const target = resolveTarget(observability, options.targetId);
const result = await capture(config, target.route, ["sh"], statusScript(observability, target, options.full, true));
@@ -217,8 +217,19 @@ export async function validate(config: UniDeskConfig, options: CommonOptions): P
: null;
const validationTraceId = typeof validationTrace?.traceId === "string" ? validationTrace.traceId : null;
const validationTraceOk = validationTrace?.ok === true;
const ok = result.exitCode === 0 && ready && validationTraceOk;
if (!options.full && !options.raw) {
return renderValidateTable({
ok,
target,
summary,
validationTrace,
validationTraceId,
remote: parsed === null ? compactCapture(result, { full: false }) : null,
});
}
return {
ok: result.exitCode === 0 && ready && validationTraceOk,
ok,
action: "platform-infra-observability-validate",
mutation: false,
target: targetSummary(target),
@@ -235,3 +246,60 @@ export async function validate(config: UniDeskConfig, options: CommonOptions): P
remote: options.raw ? parsed : compactStatus(parsed, options.full) ?? compactCapture(result, { full: true }),
};
}
function renderValidateTable(input: {
ok: boolean;
target: ObservabilityTarget;
summary: Record<string, unknown> | null;
validationTrace: Record<string, unknown> | null;
validationTraceId: string | null;
remote: Record<string, unknown> | null;
}): RenderedCliResult {
const ingest = input.validationTrace === null ? null : asRecord(input.validationTrace.ingest);
const query = input.validationTrace === null ? null : asRecord(input.validationTrace.query);
const lines = [
`platform-infra observability validate (${input.ok ? "ok" : "not-ok"})`,
"",
`target=${input.target.id} namespace=${input.target.namespace} ready=${textValue(input.summary?.ready)} route=${input.target.route}`,
"",
"Runtime:",
formatTable(["DEPLOYMENTS", "SERVICES", "PODS", "PROBES"], [[
String(recordList(input.summary?.deployments).length),
String(Array.isArray(input.summary?.services) ? input.summary.services.length : 0),
String(recordList(input.summary?.pods).length),
String(recordList(input.summary?.probes).length),
]]),
"",
"Validation trace:",
formatTable(["TRACE", "STAGE", "INGEST", "QUERY", "VALUES_PRINTED"], [[
shortenEnd(input.validationTraceId ?? "-", 32),
textValue(input.validationTrace?.stage),
textValue(ingest?.ok),
textValue(query?.ok),
textValue(input.validationTrace?.valuesPrinted),
]]),
];
if (input.remote !== null) {
lines.push("", "Remote:");
lines.push(` ${shortenEnd(JSON.stringify(input.remote), 240)}`);
}
lines.push("", "Next:");
if (input.validationTraceId !== null) {
lines.push(` bun scripts/cli.ts platform-infra observability trace --target ${input.target.id} --trace-id ${input.validationTraceId}`);
}
lines.push(` bun scripts/cli.ts platform-infra observability status --target ${input.target.id}`);
lines.push("", "Disclosure:");
lines.push(" default view is a bounded validation table; use --full for compact JSON or --raw for backend/parser debugging.");
return {
ok: input.ok,
command: "platform-infra observability validate",
contentType: "text/plain",
renderedText: lines.join("\n"),
};
}
function asRecord(value: unknown): Record<string, unknown> | null {
return typeof value === "object" && value !== null && !Array.isArray(value)
? value as Record<string, unknown>
: null;
}