mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
feat(schedules): add schedules server
This commit is contained in:
55
apps/schedules/src/queue.ts
Normal file
55
apps/schedules/src/queue.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
import { Queue } from "bullmq";
|
||||
import type { QueueJob } from "./schema";
|
||||
import { logger } from "./logger";
|
||||
|
||||
export const jobQueue = new Queue("backupQueue", {
|
||||
connection: {
|
||||
host: process.env.REDIS_URL,
|
||||
},
|
||||
defaultJobOptions: {
|
||||
removeOnComplete: true,
|
||||
removeOnFail: true,
|
||||
},
|
||||
});
|
||||
|
||||
export const cleanQueue = async () => {
|
||||
try {
|
||||
await jobQueue.obliterate({ force: true });
|
||||
logger.info("Queue Cleaned");
|
||||
} catch (error) {
|
||||
logger.error("Error cleaning queue:", error);
|
||||
}
|
||||
};
|
||||
|
||||
export const scheduleJob = (job: QueueJob) => {
|
||||
if (job.type === "backup") {
|
||||
jobQueue.add(job.backupId, job, {
|
||||
repeat: {
|
||||
pattern: job.cronSchedule,
|
||||
},
|
||||
});
|
||||
} else if (job.type === "server") {
|
||||
jobQueue.add(`${job.serverId}-cleanup`, job, {
|
||||
repeat: {
|
||||
pattern: job.cronSchedule,
|
||||
},
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const removeJob = async (data: QueueJob) => {
|
||||
if (data.type === "backup") {
|
||||
const { backupId, cronSchedule } = data;
|
||||
const result = await jobQueue.removeRepeatable(backupId, {
|
||||
pattern: cronSchedule,
|
||||
});
|
||||
return result;
|
||||
}
|
||||
if (data.type === "server") {
|
||||
const { serverId, cronSchedule } = data;
|
||||
const result = await jobQueue.removeRepeatable(`${serverId}-cleanup`, {
|
||||
pattern: cronSchedule,
|
||||
});
|
||||
return result;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user