mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 10:51:23 +00:00
refactor(src): split oversized modules
This commit is contained in:
95
src/cron/service/state.ts
Normal file
95
src/cron/service/state.ts
Normal file
@@ -0,0 +1,95 @@
|
||||
import type { HeartbeatRunResult } from "../../infra/heartbeat-wake.js";
|
||||
import type {
|
||||
CronJob,
|
||||
CronJobCreate,
|
||||
CronJobPatch,
|
||||
CronStoreFile,
|
||||
} from "../types.js";
|
||||
|
||||
export type CronEvent = {
|
||||
jobId: string;
|
||||
action: "added" | "updated" | "removed" | "started" | "finished";
|
||||
runAtMs?: number;
|
||||
durationMs?: number;
|
||||
status?: "ok" | "error" | "skipped";
|
||||
error?: string;
|
||||
summary?: string;
|
||||
nextRunAtMs?: number;
|
||||
};
|
||||
|
||||
export type Logger = {
|
||||
debug: (obj: unknown, msg?: string) => void;
|
||||
info: (obj: unknown, msg?: string) => void;
|
||||
warn: (obj: unknown, msg?: string) => void;
|
||||
error: (obj: unknown, msg?: string) => void;
|
||||
};
|
||||
|
||||
export type CronServiceDeps = {
|
||||
nowMs?: () => number;
|
||||
log: Logger;
|
||||
storePath: string;
|
||||
cronEnabled: boolean;
|
||||
enqueueSystemEvent: (text: string, opts?: { agentId?: string }) => void;
|
||||
requestHeartbeatNow: (opts?: { reason?: string }) => void;
|
||||
runHeartbeatOnce?: (opts?: {
|
||||
reason?: string;
|
||||
}) => Promise<HeartbeatRunResult>;
|
||||
runIsolatedAgentJob: (params: { job: CronJob; message: string }) => Promise<{
|
||||
status: "ok" | "error" | "skipped";
|
||||
summary?: string;
|
||||
error?: string;
|
||||
}>;
|
||||
onEvent?: (evt: CronEvent) => void;
|
||||
};
|
||||
|
||||
export type CronServiceDepsInternal = Omit<CronServiceDeps, "nowMs"> & {
|
||||
nowMs: () => number;
|
||||
};
|
||||
|
||||
export type CronServiceState = {
|
||||
deps: CronServiceDepsInternal;
|
||||
store: CronStoreFile | null;
|
||||
timer: NodeJS.Timeout | null;
|
||||
running: boolean;
|
||||
op: Promise<unknown>;
|
||||
warnedDisabled: boolean;
|
||||
};
|
||||
|
||||
export function createCronServiceState(
|
||||
deps: CronServiceDeps,
|
||||
): CronServiceState {
|
||||
return {
|
||||
deps: { ...deps, nowMs: deps.nowMs ?? (() => Date.now()) },
|
||||
store: null,
|
||||
timer: null,
|
||||
running: false,
|
||||
op: Promise.resolve(),
|
||||
warnedDisabled: false,
|
||||
};
|
||||
}
|
||||
|
||||
export type CronRunMode = "due" | "force";
|
||||
export type CronWakeMode = "now" | "next-heartbeat";
|
||||
|
||||
export type CronStatusSummary = {
|
||||
enabled: boolean;
|
||||
storePath: string;
|
||||
jobs: number;
|
||||
nextWakeAtMs: number | null;
|
||||
};
|
||||
|
||||
export type CronRunResult =
|
||||
| { ok: true; ran: true }
|
||||
| { ok: true; ran: false; reason: "not-due" }
|
||||
| { ok: false };
|
||||
|
||||
export type CronRemoveResult =
|
||||
| { ok: true; removed: boolean }
|
||||
| { ok: false; removed: false };
|
||||
|
||||
export type CronAddResult = CronJob;
|
||||
export type CronUpdateResult = CronJob;
|
||||
|
||||
export type CronListResult = CronJob[];
|
||||
export type CronAddInput = CronJobCreate;
|
||||
export type CronUpdateInput = CronJobPatch;
|
||||
Reference in New Issue
Block a user