mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
78 lines
1.9 KiB
TypeScript
78 lines
1.9 KiB
TypeScript
import { paths } from "@dokploy/server/constants";
|
|
import { findAdmin } from "@dokploy/server/services/admin";
|
|
import { updateUser } from "@dokploy/server/services/user";
|
|
import { scheduleJob, scheduledJobs } from "node-schedule";
|
|
import { execAsync } from "../process/execAsync";
|
|
|
|
const LOG_CLEANUP_JOB_NAME = "access-log-cleanup";
|
|
|
|
export const startLogCleanup = async (
|
|
cronExpression = "0 0 * * *",
|
|
): Promise<boolean> => {
|
|
try {
|
|
const { DYNAMIC_TRAEFIK_PATH } = paths();
|
|
|
|
const existingJob = scheduledJobs[LOG_CLEANUP_JOB_NAME];
|
|
if (existingJob) {
|
|
existingJob.cancel();
|
|
}
|
|
|
|
scheduleJob(LOG_CLEANUP_JOB_NAME, cronExpression, async () => {
|
|
try {
|
|
await execAsync(
|
|
`tail -n 1000 ${DYNAMIC_TRAEFIK_PATH}/access.log > ${DYNAMIC_TRAEFIK_PATH}/access.log.tmp && mv ${DYNAMIC_TRAEFIK_PATH}/access.log.tmp ${DYNAMIC_TRAEFIK_PATH}/access.log`,
|
|
);
|
|
|
|
await execAsync("docker exec dokploy-traefik kill -USR1 1");
|
|
} catch (error) {
|
|
console.error("Error during log cleanup:", error);
|
|
}
|
|
});
|
|
|
|
const admin = await findAdmin();
|
|
if (admin) {
|
|
await updateUser(admin.user.id, {
|
|
logCleanupCron: cronExpression,
|
|
});
|
|
}
|
|
|
|
return true;
|
|
} catch (_) {
|
|
return false;
|
|
}
|
|
};
|
|
|
|
export const stopLogCleanup = async (): Promise<boolean> => {
|
|
try {
|
|
const existingJob = scheduledJobs[LOG_CLEANUP_JOB_NAME];
|
|
if (existingJob) {
|
|
existingJob.cancel();
|
|
}
|
|
|
|
// Update database
|
|
const admin = await findAdmin();
|
|
if (admin) {
|
|
await updateUser(admin.user.id, {
|
|
logCleanupCron: null,
|
|
});
|
|
}
|
|
|
|
return true;
|
|
} catch (error) {
|
|
console.error("Error stopping log cleanup:", error);
|
|
return false;
|
|
}
|
|
};
|
|
|
|
export const getLogCleanupStatus = async (): Promise<{
|
|
enabled: boolean;
|
|
cronExpression: string | null;
|
|
}> => {
|
|
const admin = await findAdmin();
|
|
const cronExpression = admin?.user.logCleanupCron ?? null;
|
|
return {
|
|
enabled: cronExpression !== null,
|
|
cronExpression,
|
|
};
|
|
};
|