mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-02 12:50:23 +00:00
60 lines
1.8 KiB
TypeScript
60 lines
1.8 KiB
TypeScript
import { vi } from "vitest";
|
|
import {
|
|
createDefaultIsolatedRunner,
|
|
noopLogger,
|
|
setupCronRegressionFixtures,
|
|
createAbortAwareIsolatedRunner,
|
|
createDueIsolatedJob,
|
|
createIsolatedRegressionJob,
|
|
createRunningCronServiceState,
|
|
createDeferred,
|
|
topOfHourOffsetMs,
|
|
writeCronJobs,
|
|
writeCronStoreSnapshot,
|
|
} from "../../test/helpers/cron/service-regression-fixtures.js";
|
|
import { CronService } from "./service.js";
|
|
|
|
export type CronServiceOptions = ConstructorParameters<typeof CronService>[0];
|
|
|
|
export const setupCronIssueRegressionFixtures = () =>
|
|
setupCronRegressionFixtures({ prefix: "cron-issues-" });
|
|
|
|
export {
|
|
createAbortAwareIsolatedRunner,
|
|
createDueIsolatedJob,
|
|
createIsolatedRegressionJob,
|
|
createRunningCronServiceState,
|
|
createDeferred,
|
|
noopLogger,
|
|
topOfHourOffsetMs,
|
|
writeCronJobs,
|
|
writeCronStoreSnapshot,
|
|
};
|
|
|
|
export async function startCronForStore(params: {
|
|
storePath: string;
|
|
cronEnabled?: boolean;
|
|
enqueueSystemEvent?: CronServiceOptions["enqueueSystemEvent"];
|
|
requestHeartbeatNow?: CronServiceOptions["requestHeartbeatNow"];
|
|
runIsolatedAgentJob?: CronServiceOptions["runIsolatedAgentJob"];
|
|
onEvent?: CronServiceOptions["onEvent"];
|
|
}) {
|
|
const enqueueSystemEvent =
|
|
params.enqueueSystemEvent ?? (vi.fn() as unknown as CronServiceOptions["enqueueSystemEvent"]);
|
|
const requestHeartbeatNow =
|
|
params.requestHeartbeatNow ?? (vi.fn() as unknown as CronServiceOptions["requestHeartbeatNow"]);
|
|
const runIsolatedAgentJob = params.runIsolatedAgentJob ?? createDefaultIsolatedRunner();
|
|
|
|
const cron = new CronService({
|
|
cronEnabled: params.cronEnabled ?? true,
|
|
storePath: params.storePath,
|
|
log: noopLogger,
|
|
enqueueSystemEvent,
|
|
requestHeartbeatNow,
|
|
runIsolatedAgentJob,
|
|
...(params.onEvent ? { onEvent: params.onEvent } : {}),
|
|
});
|
|
await cron.start();
|
|
return cron;
|
|
}
|