first commit

This commit is contained in:
gzy
2025-12-16 11:39:15 +08:00
commit a3bdbee7c2
118 changed files with 34631 additions and 0 deletions

59
utils/cleanFile.js Normal file
View File

@@ -0,0 +1,59 @@
const fs = require('fs');
const path = require('path');
async function getDirLatestModifyTime(dirPath) {
let latestTime = 0;
const items = await fs.readdir(dirPath, { withFileTypes: true });
for (const item of items) {
const itemPath = path.join(dirPath, item.name);
const stats = await fs.stat(itemPath);
// Update latest time if current item is newer
if (stats.mtimeMs > latestTime) {
latestTime = stats.mtimeMs;
}
// Recursively check sub-directories
if (item.isDirectory()) {
const subDirLatest = await getDirLatestModifyTime(itemPath);
if (subDirLatest > latestTime) {
latestTime = subDirLatest;
}
}
}
// If directory is empty, use its own modification time
return latestTime || (await fs.stat(dirPath)).mtimeMs;
}
async function cleanExpiredJobDirs(maxAge = 24 * 3600000) {
const resultsDir = path.join(__dirname, 'results');
const now = Date.now();
try {
// Iterate through all job directories
const jobDirs = await fs.readdir(resultsDir, { withFileTypes: true });
for (const dir of jobDirs) {
if (dir.isDirectory()) {
const jobPath = path.join(resultsDir, dir.name);
const jobLatestTime = await getDirLatestModifyTime(jobPath);
const jobAge = now - jobLatestTime;
// Delete folder if it exceeds max retention time
if (jobAge > maxAge) {
// Recursively delete folder and all contents
await fs.rm(jobPath, { recursive: true, force: true });
console.log(`Expired job folder deleted: ${jobPath} (Latest update: ${new Date(jobLatestTime).toLocaleString()})`);
}
}
}
} catch (error) {
console.error(`Cleanup failed: ${error.message}`);
}
}
// Export functions for use by other modules
module.exports = {
cleanExpiredJobDirs
};