UNPKG

@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
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