mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-19 09:28:37 +00:00
refactor(cli): share daemon action reporting
This commit is contained in:
@@ -16,40 +16,12 @@ import { resolveGatewayService } from "../../daemon/service.js";
|
|||||||
import { resolveGatewayAuth } from "../../gateway/auth.js";
|
import { resolveGatewayAuth } from "../../gateway/auth.js";
|
||||||
import { defaultRuntime } from "../../runtime.js";
|
import { defaultRuntime } from "../../runtime.js";
|
||||||
import { formatCliCommand } from "../command-format.js";
|
import { formatCliCommand } from "../command-format.js";
|
||||||
import { buildDaemonServiceSnapshot, createNullWriter, emitDaemonActionJson } from "./response.js";
|
import { buildDaemonServiceSnapshot, createDaemonActionContext } from "./response.js";
|
||||||
import { parsePort } from "./shared.js";
|
import { parsePort } from "./shared.js";
|
||||||
|
|
||||||
export async function runDaemonInstall(opts: DaemonInstallOptions) {
|
export async function runDaemonInstall(opts: DaemonInstallOptions) {
|
||||||
const json = Boolean(opts.json);
|
const json = Boolean(opts.json);
|
||||||
const warnings: string[] = [];
|
const { stdout, warnings, emit, fail } = createDaemonActionContext({ action: "install", json });
|
||||||
const stdout = json ? createNullWriter() : process.stdout;
|
|
||||||
const emit = (payload: {
|
|
||||||
ok: boolean;
|
|
||||||
result?: string;
|
|
||||||
message?: string;
|
|
||||||
error?: string;
|
|
||||||
service?: {
|
|
||||||
label: string;
|
|
||||||
loaded: boolean;
|
|
||||||
loadedText: string;
|
|
||||||
notLoadedText: string;
|
|
||||||
};
|
|
||||||
hints?: string[];
|
|
||||||
warnings?: string[];
|
|
||||||
}) => {
|
|
||||||
if (!json) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
emitDaemonActionJson({ action: "install", ...payload });
|
|
||||||
};
|
|
||||||
const fail = (message: string) => {
|
|
||||||
if (json) {
|
|
||||||
emit({ ok: false, error: message, warnings: warnings.length ? warnings : undefined });
|
|
||||||
} else {
|
|
||||||
defaultRuntime.error(message);
|
|
||||||
}
|
|
||||||
defaultRuntime.exit(1);
|
|
||||||
};
|
|
||||||
|
|
||||||
if (resolveIsNixMode(process.env)) {
|
if (resolveIsNixMode(process.env)) {
|
||||||
fail("Nix mode detected; service install is disabled.");
|
fail("Nix mode detected; service install is disabled.");
|
||||||
@@ -88,7 +60,6 @@ export async function runDaemonInstall(opts: DaemonInstallOptions) {
|
|||||||
result: "already-installed",
|
result: "already-installed",
|
||||||
message: `Gateway service already ${service.loadedText}.`,
|
message: `Gateway service already ${service.loadedText}.`,
|
||||||
service: buildDaemonServiceSnapshot(service, loaded),
|
service: buildDaemonServiceSnapshot(service, loaded),
|
||||||
warnings: warnings.length ? warnings : undefined,
|
|
||||||
});
|
});
|
||||||
if (!json) {
|
if (!json) {
|
||||||
defaultRuntime.log(`Gateway service already ${service.loadedText}.`);
|
defaultRuntime.log(`Gateway service already ${service.loadedText}.`);
|
||||||
|
|||||||
@@ -40,3 +40,42 @@ export function createNullWriter(): Writable {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function createDaemonActionContext(params: { action: DaemonAction; json: boolean }): {
|
||||||
|
stdout: Writable;
|
||||||
|
warnings: string[];
|
||||||
|
emit: (payload: Omit<DaemonActionResponse, "action">) => void;
|
||||||
|
fail: (message: string, hints?: string[]) => void;
|
||||||
|
} {
|
||||||
|
const warnings: string[] = [];
|
||||||
|
const stdout = params.json ? createNullWriter() : process.stdout;
|
||||||
|
const emit = (payload: Omit<DaemonActionResponse, "action">) => {
|
||||||
|
if (!params.json) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
emitDaemonActionJson({
|
||||||
|
action: params.action,
|
||||||
|
...payload,
|
||||||
|
warnings: payload.warnings ?? (warnings.length ? warnings : undefined),
|
||||||
|
});
|
||||||
|
};
|
||||||
|
const fail = (message: string, hints?: string[]) => {
|
||||||
|
if (params.json) {
|
||||||
|
emit({
|
||||||
|
ok: false,
|
||||||
|
error: message,
|
||||||
|
hints,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
defaultRuntime.error(message);
|
||||||
|
if (hints?.length) {
|
||||||
|
for (const hint of hints) {
|
||||||
|
defaultRuntime.log(`Tip: ${hint}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
defaultRuntime.exit(1);
|
||||||
|
};
|
||||||
|
|
||||||
|
return { stdout, warnings, emit, fail };
|
||||||
|
}
|
||||||
|
|||||||
@@ -22,11 +22,7 @@ import {
|
|||||||
runServiceStop,
|
runServiceStop,
|
||||||
runServiceUninstall,
|
runServiceUninstall,
|
||||||
} from "../daemon-cli/lifecycle-core.js";
|
} from "../daemon-cli/lifecycle-core.js";
|
||||||
import {
|
import { buildDaemonServiceSnapshot, createDaemonActionContext } from "../daemon-cli/response.js";
|
||||||
buildDaemonServiceSnapshot,
|
|
||||||
createNullWriter,
|
|
||||||
emitDaemonActionJson,
|
|
||||||
} from "../daemon-cli/response.js";
|
|
||||||
import { formatRuntimeStatus, parsePort } from "../daemon-cli/shared.js";
|
import { formatRuntimeStatus, parsePort } from "../daemon-cli/shared.js";
|
||||||
|
|
||||||
type NodeDaemonInstallOptions = {
|
type NodeDaemonInstallOptions = {
|
||||||
@@ -100,45 +96,7 @@ function resolveNodeDefaults(
|
|||||||
|
|
||||||
export async function runNodeDaemonInstall(opts: NodeDaemonInstallOptions) {
|
export async function runNodeDaemonInstall(opts: NodeDaemonInstallOptions) {
|
||||||
const json = Boolean(opts.json);
|
const json = Boolean(opts.json);
|
||||||
const warnings: string[] = [];
|
const { stdout, warnings, emit, fail } = createDaemonActionContext({ action: "install", json });
|
||||||
const stdout = json ? createNullWriter() : process.stdout;
|
|
||||||
const emit = (payload: {
|
|
||||||
ok: boolean;
|
|
||||||
result?: string;
|
|
||||||
message?: string;
|
|
||||||
error?: string;
|
|
||||||
service?: {
|
|
||||||
label: string;
|
|
||||||
loaded: boolean;
|
|
||||||
loadedText: string;
|
|
||||||
notLoadedText: string;
|
|
||||||
};
|
|
||||||
hints?: string[];
|
|
||||||
warnings?: string[];
|
|
||||||
}) => {
|
|
||||||
if (!json) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
emitDaemonActionJson({ action: "install", ...payload });
|
|
||||||
};
|
|
||||||
const fail = (message: string, hints?: string[]) => {
|
|
||||||
if (json) {
|
|
||||||
emit({
|
|
||||||
ok: false,
|
|
||||||
error: message,
|
|
||||||
hints,
|
|
||||||
warnings: warnings.length ? warnings : undefined,
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
defaultRuntime.error(message);
|
|
||||||
if (hints?.length) {
|
|
||||||
for (const hint of hints) {
|
|
||||||
defaultRuntime.log(`Tip: ${hint}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
defaultRuntime.exit(1);
|
|
||||||
};
|
|
||||||
|
|
||||||
if (resolveIsNixMode(process.env)) {
|
if (resolveIsNixMode(process.env)) {
|
||||||
fail("Nix mode detected; service install is disabled.");
|
fail("Nix mode detected; service install is disabled.");
|
||||||
|
|||||||
Reference in New Issue
Block a user