fix: 收敛 OTel validate 默认输出
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user