@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.
48 lines (47 loc) • 1.92 kB
JavaScript
//#region src/utils/job-stats.util.ts
function calculateJobDuration(startedAt, endedAt = /* @__PURE__ */ new Date()) {
if (!startedAt) return null;
return (endedAt.getTime() - startedAt.getTime()) / 1e3;
}
function initializeOrUpdateStatistics(job, endedAt = /* @__PURE__ */ new Date(), options = {}) {
const actualPrintTimeSeconds = calculateJobDuration(job.startedAt, endedAt);
if (!job.statistics) return {
startedAt: job.startedAt,
endedAt,
actualPrintTimeSeconds,
progress: options.progress ?? job.progress ?? null,
failureReason: options.failureReason,
failureTime: options.failureTime
};
else {
job.statistics.endedAt = endedAt;
job.statistics.actualPrintTimeSeconds = actualPrintTimeSeconds;
if (options.progress !== void 0) job.statistics.progress = options.progress;
if (options.failureReason !== void 0) {
job.statistics.failureReason = options.failureReason;
job.statistics.failureTime = options.failureTime ?? endedAt;
}
return job.statistics;
}
}
function updateStatisticsForCompletion(job, endedAt = /* @__PURE__ */ new Date()) {
job.statistics = initializeOrUpdateStatistics(job, endedAt, { progress: 100 });
job.endedAt = endedAt;
job.progress = 100;
}
function updateStatisticsForFailure(job, reason, endedAt = /* @__PURE__ */ new Date()) {
job.statistics = initializeOrUpdateStatistics(job, endedAt, {
failureReason: reason,
failureTime: endedAt
});
job.endedAt = endedAt;
job.statusReason = reason;
}
function updateStatisticsForCancellation(job, reason = "Print cancelled by user", endedAt = /* @__PURE__ */ new Date()) {
job.statistics = initializeOrUpdateStatistics(job, endedAt);
job.endedAt = endedAt;
job.statusReason = reason;
}
//#endregion
export { calculateJobDuration, initializeOrUpdateStatistics, updateStatisticsForCancellation, updateStatisticsForCompletion, updateStatisticsForFailure };
//# sourceMappingURL=job-stats.util.js.map