feat(cli): migrate child json recovery callers
This commit is contained in:
@@ -10,6 +10,7 @@ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "
|
||||
import { dirname, join } from "node:path";
|
||||
import { repoRoot, rootPath, type Config } from "../config";
|
||||
import { runCommand, type CommandResult } from "../command";
|
||||
import { resolveCliChildJsonCommandResult } from "../cli-child-json-recovery";
|
||||
import { startJob } from "../jobs";
|
||||
import { classifySshTcpPoolFailure } from "../ssh";
|
||||
import { HWLAB_NODE_CONTROL_PLANE_CONFIG_PATH, hwlabNodeControlPlaneInfraHelp, runHwlabNodeControlPlaneInfra } from "../hwlab-node-control-plane";
|
||||
@@ -30,7 +31,7 @@ import type { RenderedCliResult } from "../output";
|
||||
|
||||
import type { NodeWebProbeObserveAction, NodeWebProbeObserveOptions, WebObserveIndexEntry } from "./entry";
|
||||
import { runTransWorkspaceStdinScript } from "./public-exposure";
|
||||
import { parseJsonObject, record, shellQuote } from "./utils";
|
||||
import { record, shellQuote } from "./utils";
|
||||
import { isSafeWebObserveJobId, isSafeWebObserveStateDir, safeWebObserveSegment } from "./web-observe-scripts";
|
||||
import { webObserveShort, webObserveText } from "./web-probe-observe";
|
||||
|
||||
@@ -68,9 +69,14 @@ export function recoverWebObserveAnalyzeTurnDetails(options: NodeWebProbeObserve
|
||||
"console.log(JSON.stringify({ ok: true, rounds, turnColumns }));",
|
||||
"UNIDESK_WEB_OBSERVE_RECOVER_TURN_DETAILS",
|
||||
].join("\n");
|
||||
const recovered = parseJsonObject(runTransWorkspaceStdinScript(options.node, spec.workspace, recoverScript, Math.min(options.commandTimeoutSeconds, 30)).stdout);
|
||||
const recoveredRounds = Array.isArray(recovered.rounds) ? recovered.rounds : [];
|
||||
const recoveredColumns = Array.isArray(recovered.turnColumns) ? recovered.turnColumns : [];
|
||||
const recoverResult = runTransWorkspaceStdinScript(options.node, spec.workspace, recoverScript, Math.min(options.commandTimeoutSeconds, 30));
|
||||
const recovered = resolveCliChildJsonCommandResult({
|
||||
result: recoverResult,
|
||||
requestedStdoutType: "web-probe observe analyze turn-detail recovery JSON",
|
||||
acceptParsed: (value) => value.ok === true && (Array.isArray(value.rounds) || Array.isArray(value.turnColumns)),
|
||||
}).parsed;
|
||||
const recoveredRounds = Array.isArray(recovered?.rounds) ? recovered.rounds : [];
|
||||
const recoveredColumns = Array.isArray(recovered?.turnColumns) ? recovered.turnColumns : [];
|
||||
if (recoveredRounds.length === 0 && recoveredColumns.length === 0) return analysis;
|
||||
const nextMetrics = { ...(sampleMetrics ?? {}) };
|
||||
if (!hasRounds && recoveredRounds.length > 0) {
|
||||
@@ -1083,10 +1089,16 @@ export function discoverWebObserveIndexEntryOnTarget(id: string, node: string, l
|
||||
"NODE",
|
||||
].join("\n");
|
||||
const result = runTransWorkspaceStdinScript(node, spec.workspace, script, 55);
|
||||
const payload = parseJsonObject(result.stdout);
|
||||
const discovery = resolveCliChildJsonCommandResult({
|
||||
result,
|
||||
requestedStdoutType: "web-probe observe index discovery JSON",
|
||||
acceptParsed: (value) => value.ok === true && (value.found === true || value.found === false || value.ambiguous === true),
|
||||
});
|
||||
const payload = discovery.parsed;
|
||||
if (result.exitCode !== 0 || result.timedOut || payload?.ok !== true) {
|
||||
const reason = result.timedOut ? "timeout" : payload?.ambiguous === true ? "ambiguous" : `exit=${result.exitCode}`;
|
||||
throw new Error(`observer discovery failed (${reason}): ${result.stderr.trim().slice(-240) || result.stdout.trim().slice(-240)}`);
|
||||
const recovery = JSON.stringify(discovery.diagnostics).slice(0, 360);
|
||||
throw new Error(`observer discovery failed (${reason}): ${result.stderr.trim().slice(-240) || result.stdout.trim().slice(-240)} recovery=${recovery}`);
|
||||
}
|
||||
if (payload.found !== true) return null;
|
||||
const entry = record(payload.entry);
|
||||
|
||||
Reference in New Issue
Block a user