2026-06-15 11:26:49 -07:00
|
|
|
import { Schema, model } from "mongoose";
|
|
|
|
|
import { QueueModes } from "@/domain/app-settings/app-settings.type.js";
|
|
|
|
|
import { QueueWorkerDocument } from "@/domain/queue-workers/queue-worker.type.js";
|
|
|
|
|
|
|
|
|
|
// Single source of truth for worker liveness: the TTL that GCs stale records and
|
|
|
|
|
// the window readers use to count a worker as alive. Heartbeat cadence must stay well below it.
|
|
|
|
|
export const WORKER_TTL_SECONDS = 180;
|
|
|
|
|
|
|
|
|
|
const QueueWorkerSchema = new Schema<QueueWorkerDocument>(
|
|
|
|
|
{
|
|
|
|
|
_id: { type: String, required: true },
|
|
|
|
|
mode: { type: String, enum: QueueModes, required: true },
|
2026-06-25 11:47:22 -07:00
|
|
|
processesJobs: { type: Boolean, required: true },
|
2026-06-15 11:26:49 -07:00
|
|
|
lastSeenAt: { type: Date, default: Date.now, expires: WORKER_TTL_SECONDS },
|
|
|
|
|
},
|
|
|
|
|
{ timestamps: true }
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const QueueWorkerModel = model<QueueWorkerDocument>("QueueWorker", QueueWorkerSchema);
|
|
|
|
|
|
|
|
|
|
export type { QueueWorkerDocument };
|
|
|
|
|
export { QueueWorkerModel };
|
|
|
|
|
export default QueueWorkerModel;
|