File size: 3,247 Bytes
fc93158 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | import type { Command } from "commander";
import { defaultRuntime } from "../../runtime.js";
import { addGatewayClientOptions, callGatewayFromCli } from "../gateway-rpc.js";
import { handleCronCliError, printCronJson, warnIfCronSchedulerDisabled } from "./shared.js";
function registerCronToggleCommand(params: {
cron: Command;
name: "enable" | "disable";
description: string;
enabled: boolean;
}) {
addGatewayClientOptions(
params.cron
.command(params.name)
.description(params.description)
.argument("<id>", "Job id")
.action(async (id, opts) => {
try {
const res = await callGatewayFromCli("cron.update", opts, {
id,
patch: { enabled: params.enabled },
});
printCronJson(res);
await warnIfCronSchedulerDisabled(opts);
} catch (err) {
handleCronCliError(err);
}
}),
);
}
export function registerCronSimpleCommands(cron: Command) {
addGatewayClientOptions(
cron
.command("rm")
.alias("remove")
.alias("delete")
.description("Remove a cron job")
.argument("<id>", "Job id")
.option("--json", "Output JSON", false)
.action(async (id, opts) => {
try {
const res = await callGatewayFromCli("cron.remove", opts, { id });
printCronJson(res);
} catch (err) {
handleCronCliError(err);
}
}),
);
registerCronToggleCommand({
cron,
name: "enable",
description: "Enable a cron job",
enabled: true,
});
registerCronToggleCommand({
cron,
name: "disable",
description: "Disable a cron job",
enabled: false,
});
addGatewayClientOptions(
cron
.command("runs")
.description("Show cron run history (JSONL-backed)")
.requiredOption("--id <id>", "Job id")
.option("--limit <n>", "Max entries (default 50)", "50")
.action(async (opts) => {
try {
const limitRaw = Number.parseInt(String(opts.limit ?? "50"), 10);
const limit = Number.isFinite(limitRaw) && limitRaw > 0 ? limitRaw : 50;
const id = String(opts.id);
const res = await callGatewayFromCli("cron.runs", opts, {
id,
limit,
});
printCronJson(res);
} catch (err) {
handleCronCliError(err);
}
}),
);
addGatewayClientOptions(
cron
.command("run")
.description("Run a cron job now (debug)")
.argument("<id>", "Job id")
.option("--due", "Run only when due (default behavior in older versions)", false)
.action(async (id, opts, command) => {
try {
if (command.getOptionValueSource("timeout") === "default") {
opts.timeout = "600000";
}
const res = await callGatewayFromCli("cron.run", opts, {
id,
mode: opts.due ? "due" : "force",
});
printCronJson(res);
const result = res as { ok?: boolean; ran?: boolean; enqueued?: boolean } | undefined;
defaultRuntime.exit(result?.ok && (result?.ran || result?.enqueued) ? 0 : 1);
} catch (err) {
handleCronCliError(err);
}
}),
);
}
|