bliss/api/src/lib/clean.ts

82 lines
2.0 KiB
TypeScript

import { uploadDir } from "./constants";
import { promises as fs } from "fs";
import { CronJob } from "cron";
import { Logger } from "@nestjs/common";
import { exec } from "child_process";
const cleanUp = async () => {
const currentTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
const job = new CronJob(
// every 24 hours at 12 AM
"0 0 * * *",
async () => {
const startTime = Date.now();
const logger = new Logger("CronJob");
const isWindows = process.platform === "win32";
if (isWindows) {
// check if forfiles.exe exists
try {
await fs.access("C:\\Windows\\System32\\forfiles.exe");
} catch (error) {
logger.error("forfiles.exe not found, aborting job");
logger.log(`Finished job in ${Date.now() - startTime}ms`);
return;
}
const { stdout } = await exec(
`forfiles /p ${uploadDir} /s /m tmp_* /D -1 /c "cmd /c del @path"`
);
stdout.on("data", (data) => {
logger.log(data);
});
logger.log(`Finished job in ${Date.now() - startTime}ms`);
return;
}
const isUnix =
process.platform === "linux" ||
process.platform === "darwin" ||
process.platform === "freebsd" ||
process.platform === "openbsd";
if (isUnix) {
const { stdout } = await exec(
`find ${uploadDir} -type f -name "tmp_*" -mtime +1 -exec rm -f {} \\;`
);
stdout.on("data", (data) => {
logger.log(data);
});
logger.log(`Finished job in ${Date.now() - startTime}ms`);
return;
} else {
logger.log("OS not supported");
logger.log(`Finished job in ${Date.now() - startTime}ms`);
return;
}
},
null,
true,
currentTimeZone
);
const supportedOS = ["win32", "linux", "darwin", "freebsd", "openbsd"];
if (!supportedOS.includes(process.platform)) {
return;
}
job.start();
};
cleanUp();