@fdm-monster/server
Version:
FDM Monster is a bulk OctoPrint, Klipper, PrusaLink and BambuLab manager to set up, configure and monitor 3D printers. Our aim is to provide neat overview over your farm.
63 lines (62 loc) • 2.76 kB
JavaScript
import { AppConstants } from "../../server.constants.js";
import { getMediaPath } from "../../utils/fs.utils.js";
import { isParsableDate } from "../../utils/time.utils.js";
import { join } from "node:path";
import { readdirSync, rmSync } from "node:fs";
import AdmZip from "adm-zip";
//#region src/services/core/logs-manager.service.ts
var LogDumpService = class LogDumpService {
logger;
constructor(loggerFactory) {
this.logger = loggerFactory(LogDumpService.name);
}
async deleteOlderThanWeekAndMismatchingLogFiles() {
this.logger.log("Cleaning log files");
const path = join(getMediaPath(), AppConstants.defaultLogsFolder);
const files = readdirSync(path, { withFileTypes: true }).filter((dirent) => dirent.isFile()).map((dirent) => dirent.name);
const startingFormat = `${AppConstants.logAppName}-`;
const removedFilesNotInFormat = files.filter((f) => f.endsWith(".log") && !f.startsWith(startingFormat));
const removedFilesOutdated = files.filter((f) => {
if (!(f.endsWith(".log") && f.startsWith(startingFormat))) return false;
const strippedFilename = f.replace(".log", "").replace(startingFormat, "");
if (!isParsableDate(strippedFilename)) {
this.logger.warn("Failed to parse date from log file, removing it as outdated");
return true;
}
const date = new Date(strippedFilename);
return ((/* @__PURE__ */ new Date()).getTime() - date.getTime()) / (1e3 * 3600 * 24) > 7;
});
this.logger.log(`Removing ${removedFilesNotInFormat.length} files that are not in the format of ${startingFormat}<date>.log, and ${removedFilesOutdated.length} files that are older than 7 days`);
let removedWrongFormatFilesCount = 0;
for (const file of removedFilesNotInFormat) try {
rmSync(join(path, file));
removedWrongFormatFilesCount++;
} catch (err) {
this.logger.warn(`Failed to delete log file`);
}
let removedOutdatedFilesCount = 0;
for (const file of removedFilesOutdated) try {
rmSync(join(path, file));
removedOutdatedFilesCount++;
} catch (err) {
this.logger.warn(`Failed to delete log file`);
}
this.logger.log(`Removed ${removedWrongFormatFilesCount + removedOutdatedFilesCount} log file(s)`);
return {
removedWrongFormatFilesCount,
removedOutdatedFilesCount
};
}
async dumpZip() {
this.logger.log("Dumping logs as ZIP");
const zip = new AdmZip();
const path = join(getMediaPath(), AppConstants.defaultLogsFolder);
zip.addLocalFolder(path, "/logs", (filename) => filename.endsWith(".log"));
const outputPath = join(getMediaPath(), AppConstants.defaultLogZipsFolder, `logs-${AppConstants.serverRepoName}.zip`);
zip.writeZip(outputPath);
return outputPath;
}
};
//#endregion
export { LogDumpService };
//# sourceMappingURL=logs-manager.service.js.map