import { Monitor } from "@/domain/monitors/monitor.types.js"; 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"; export type MonitorEvaluation = { monitor: Monitor; status: MonitorStatusResponse; // raw result from networkService.requestStatus check: Check; statusChange: StatusChangeResult; // from statusService.updateMonitorStatus decision: MonitorActionDecision; // from MonitorStatusPolicy }; export type WorkerJobFailure = { monitorId: string | number; monitorUrl: string | null; monitorType: string | null; failedAt: number | null; failCount: number; failReason: string | null; }; export type WorkerMetrics = { jobs: number; activeJobs: number; failingJobs: number; jobsWithFailures: WorkerJobFailure[]; totalRuns: number; totalFailures: number; workers: QueueWorker[]; }; export type WorkerJobSummary = { monitorId: string | number; monitorUrl: string | null; monitorType: string | null; monitorInterval: number | null; monitorGeoInterval: number | null; monitorActive: boolean | null; active: boolean; lockedBy: string | null; lockedUntil: number | null; lockedAt: number | null; runCount: number; failCount: number; failReason: string | null; lastRunAt: number | null; lastFinishedAt: number | null; lastRunTook: number | null; lastFailedAt: number | null; repeat: number | null; }; export type WorkerJobsPagination = { page?: number; rowsPerPage?: number; }; export type WorkerJobsPage = { jobs: WorkerJobSummary[]; count: number; }; export interface IWorker { readonly serviceName: string; init(): Promise; addJob(monitorId: string, monitor: Monitor): Promise; deleteJob(monitor: Monitor): Promise; pauseJob(monitor: Monitor): Promise; resumeJob(monitor: Monitor): Promise; updateJob(monitor: Monitor): Promise; shutdown(): Promise; getMetrics(): Promise; getJobs(pagination: WorkerJobsPagination): Promise; flushQueues(): Promise<{ success: boolean }>; }