From f1e9375973fdd6b0f79ea6d0e2df54706603e2c1 Mon Sep 17 00:00:00 2001 From: AgentRun Codex Date: Mon, 13 Jul 2026 06:00:09 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3=20Monitor=20status=20?= =?UTF-8?q?=E5=B0=B1=E7=BB=AA=E9=80=80=E5=87=BA=E8=AF=AD=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/src/platform-db-monitor-reset.test.ts | 12 +++++++++++- scripts/src/platform-db.ts | 12 ++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/scripts/src/platform-db-monitor-reset.test.ts b/scripts/src/platform-db-monitor-reset.test.ts index cb5e72eb..c0e5504d 100644 --- a/scripts/src/platform-db-monitor-reset.test.ts +++ b/scripts/src/platform-db-monitor-reset.test.ts @@ -1,7 +1,7 @@ import { describe, expect, test } from "bun:test"; import { rootPath } from "./config"; import { readYamlRecord } from "./platform-infra-ops-library"; -import { monitorResetScript, monitorStatusScript, runPlatformDbCommand } from "./platform-db"; +import { monitorResetScript, monitorStatusScript, monitorStatusSucceeded, runPlatformDbCommand } from "./platform-db"; const configPath = "config/platform-db/postgres-nc01.yaml"; const parsed = readYamlRecord>(rootPath(configPath), "postgres-host-cluster"); @@ -57,4 +57,14 @@ describe("platform-db Monitor 专属空库入口", () => { expect(reset).toContain('[ "$rows" != "0" ]'); expect(reset).toContain('\"siblingDatabasesUnchanged\":true'); }); + + test("status ready=true 且远端退出 0 时成功", () => { + expect(monitorStatusSucceeded(0, { ok: true, ready: true, schemaReady: true, empty: true, businessRows: 0 })).toBe(true); + }); + + test("status ready=false 时失败,即使远端误返回退出 0", () => { + expect(monitorStatusSucceeded(0, { ok: false, ready: false, schemaReady: true, empty: false, businessRows: 1 })).toBe(false); + expect(monitorStatusSucceeded(0, { ok: true, ready: false, schemaReady: false, empty: false, businessRows: null })).toBe(false); + expect(monitorStatusSucceeded(1, { ok: false, ready: false })).toBe(false); + }); }); diff --git a/scripts/src/platform-db.ts b/scripts/src/platform-db.ts index 51734a14..96141acd 100644 --- a/scripts/src/platform-db.ts +++ b/scripts/src/platform-db.ts @@ -372,8 +372,11 @@ async function monitorCommand(config: UniDeskConfig, action: string, options: Pl const script = action === "status" ? monitorStatusScript(pg, target) : monitorResetScript(pg, target); const capture = await runSshCommandCapture(config, pg.node.route, ["sh"], script); const parsed = parseJsonOutput(capture.stdout); + const commandOk = action === "status" + ? monitorStatusSucceeded(capture.exitCode, parsed) + : capture.exitCode === 0 && parsed?.ok === true; return { - ok: capture.exitCode === 0 && parsed?.ok === true, + ok: commandOk, ...base, mutation: action === "reset", ...(action === "reset" ? { confirmed: true } : {}), @@ -382,6 +385,10 @@ async function monitorCommand(config: UniDeskConfig, action: string, options: Pl }; } +export function monitorStatusSucceeded(exitCode: number, parsed: Record | null): boolean { + return exitCode === 0 && parsed?.ok === true && parsed.ready === true; +} + function unsupported(args: string[]): Record { return { ok: false, @@ -1105,7 +1112,8 @@ fi empty=false ready=false if [ "$schema_ready" = true ] && [ "$business_rows" = "0" ]; then empty=true; ready=true; fi -printf '{"ok":true,"databaseExists":%s,"schemaReady":%s,"empty":%s,"ready":%s,"databaseOid":"%s","schemaVersion":"%s","businessRows":%s,"siblingDatabaseOids":"%s"}\n' "$([ -n "$database_oid" ] && printf true || printf false)" "$schema_ready" "$empty" "$ready" "$database_oid" "$schema_version_observed" "$([ -n "$business_rows" ] && printf '%s' "$business_rows" || printf null)" "$sibling_oids" +printf '{"ok":%s,"databaseExists":%s,"schemaReady":%s,"empty":%s,"ready":%s,"databaseOid":"%s","schemaVersion":"%s","businessRows":%s,"siblingDatabaseOids":"%s"}\n' "$ready" "$([ -n "$database_oid" ] && printf true || printf false)" "$schema_ready" "$empty" "$ready" "$database_oid" "$schema_version_observed" "$([ -n "$business_rows" ] && printf '%s' "$business_rows" || printf null)" "$sibling_oids" +if [ "$ready" != true ]; then exit 1; fi `; }