Files
Checkmate/server/src/worker/worker.interface.ts
T

77 lines
2.2 KiB
TypeScript
Raw Normal View History

2026-06-09 12:34:15 -07:00
import { Monitor } from "@/domain/monitors/monitor.types.js";
2026-06-10 13:12:51 -07:00
import { Check } from "@/domain/checks/check.type.js";
import { MonitorPayloadMap, MonitorStatusResponse, StatusChangeResult } from "@/types/network.js";
import { MonitorActionDecision } from "@/worker/worker.helper.js";
import { QueueWorker } from "@/domain/queue-workers/queue-worker.type.js";
2026-06-10 13:12:51 -07:00
export type MonitorEvaluation = {
monitor: Monitor;
status: MonitorStatusResponse<MonitorPayloadMap[keyof MonitorPayloadMap]>; // raw result from networkService.requestStatus
check: Check;
statusChange: StatusChangeResult; // from statusService.updateMonitorStatus
decision: MonitorActionDecision; // from MonitorStatusPolicy
};
2026-06-10 09:30:14 -07:00
export type WorkerJobFailure = {
monitorId: string | number;
monitorUrl: string | null;
monitorType: string | null;
failedAt: number | null;
failCount: number;
failReason: string | null;
};
2026-06-10 09:30:14 -07:00
export type WorkerMetrics = {
jobs: number;
activeJobs: number;
failingJobs: number;
2026-06-10 09:30:14 -07:00
jobsWithFailures: WorkerJobFailure[];
totalRuns: number;
totalFailures: number;
2026-06-02 09:47:00 -07:00
workers: QueueWorker[];
};
2026-06-10 09:30:14 -07:00
export type WorkerJobSummary = {
monitorId: string | number;
monitorUrl: string | null;
monitorType: string | null;
monitorInterval: number | null;
monitorGeoInterval: number | null;
monitorActive: boolean | null;
active: boolean;
2026-06-02 09:47:00 -07:00
lockedBy: string | null;
lockedUntil: number | null;
lockedAt: number | null;
runCount: number;
failCount: number;
failReason: string | null;
2026-05-29 11:20:19 -07:00
lastRunAt: number | null;
lastFinishedAt: number | null;
lastRunTook: number | null;
lastFailedAt: number | null;
repeat: number | null;
};
2026-06-10 09:30:14 -07:00
export type WorkerJobsPagination = {
page?: number;
rowsPerPage?: number;
};
2026-06-10 09:30:14 -07:00
export type WorkerJobsPage = {
jobs: WorkerJobSummary[];
count: number;
};
2026-06-10 09:30:14 -07:00
export interface IWorker {
readonly serviceName: string;
init(): Promise<boolean>;
addJob(monitorId: string, monitor: Monitor): Promise<void>;
deleteJob(monitor: Monitor): Promise<void>;
pauseJob(monitor: Monitor): Promise<void>;
resumeJob(monitor: Monitor): Promise<void>;
updateJob(monitor: Monitor): Promise<void>;
shutdown(): Promise<void>;
2026-06-10 09:30:14 -07:00
getMetrics(): Promise<WorkerMetrics>;
getJobs(pagination: WorkerJobsPagination): Promise<WorkerJobsPage>;
flushQueues(): Promise<{ success: boolean }>;
}