@fdm-monster/server
Version:
FDM Monster is a bulk OctoPrint manager to set up, configure and monitor 3D printers. Our aim is to provide extremely optimized websocket performance and reliability.
190 lines (189 loc) • 6.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "BatchCallService", {
enumerable: true,
get: function() {
return BatchCallService;
}
});
const _node = require("@sentry/node");
const _errorutils = require("../../utils/error.utils");
const _printerapiinterface = require("../printer-api.interface");
class BatchCallService {
printerApiFactory;
printerCache;
printerSocketStore;
printerService;
logger;
constructor(loggerFactory, printerApiFactory, printerCache, printerSocketStore, printerService){
this.printerApiFactory = printerApiFactory;
this.printerCache = printerCache;
this.printerSocketStore = printerSocketStore;
this.printerService = printerService;
this.logger = loggerFactory(BatchCallService.name);
}
getPrinter(login) {
return this.printerApiFactory.getScopedPrinter(login);
}
async batchTogglePrintersEnabled(printerIds, enabled) {
const promises = [];
for (const printerId of printerIds){
let promise = undefined;
const printerDto = await this.printerCache.getValue(printerId);
if (!printerDto) continue;
const time = Date.now();
if (enabled) {
if (!printerDto.enabled && !printerDto.disabledReason?.length) {
promise = this.printerService.updateEnabled(printerId, true).then(()=>{
return {
success: true,
printerId,
time: Date.now() - time
};
}).catch((e)=>{
return {
failure: true,
error: e.message,
printerId,
time: Date.now() - time
};
});
}
} else if (printerDto.enabled) {
promise = this.printerService.updateEnabled(printerId, false).then(()=>{
return {
success: true,
printerId,
time: Date.now() - time
};
}).catch((e)=>{
return {
failure: true,
error: e.message,
printerId,
time: Date.now() - time
};
});
} else {
this.logger.warn("Did not toggle printer enabled, its in maintenance");
}
if (promise) {
promises.push(promise);
}
}
return await Promise.all(promises);
}
batchConnectSocket(printerIds) {
for (const printerId of printerIds){
try {
this.printerSocketStore.reconnectPrinterAdapter(printerId);
} catch (e) {
(0, _node.captureException)(e);
this.logger.error(`Error setting socket to reconnect ${(0, _errorutils.errorSummary)(e)}`);
}
}
}
async batchSettingsGet(printerIds) {
const promises = [];
for (const printerId of printerIds){
const login = await this.printerCache.getLoginDtoAsync(printerId);
const time = Date.now();
const client = this.getPrinter(login);
const promise = client.getSettings().then((r)=>{
return {
success: true,
printerId,
time: Date.now() - time,
value: r
};
}).catch((e)=>{
return {
failure: true,
error: e.message,
printerId,
time: Date.now() - time
};
});
promises.push(promise);
}
return await Promise.all(promises);
}
async batchConnectUsb(printerIds) {
const promises = [];
for (const printerId of printerIds){
const login = await this.printerCache.getLoginDtoAsync(printerId);
const time = Date.now();
const client = this.getPrinter(login);
const promise = client.connect().then(()=>{
return {
success: true,
printerId,
time: Date.now() - time
};
}).catch((e)=>{
return {
failure: true,
error: e.message,
printerId,
time: Date.now() - time
};
});
promises.push(promise);
}
return await Promise.all(promises);
}
async getBatchPrinterReprintFile(printerIds) {
const promises = [];
for (const printerId of printerIds){
const promise = new Promise(async (resolve, _)=>{
try {
const login = await this.printerCache.getLoginDtoAsync(printerId);
const client = this.getPrinter(login);
const partialReprintState = await client.getReprintState();
return resolve({
...partialReprintState,
printerId
});
} catch (e) {
(0, _node.captureException)(e);
return resolve({
connectionState: null,
printerId,
reprintState: _printerapiinterface.ReprintState.PrinterNotAvailable
});
}
});
promises.push(promise);
}
return await Promise.all(promises);
}
async batchReprintCalls(printerIdFileList) {
const promises = [];
for (const printerIdFile of printerIdFileList){
const { printerId, path } = printerIdFile;
const login = await this.printerCache.getLoginDtoAsync(printerId);
const time = Date.now();
const client = this.getPrinter(login);
const promise = client.startPrint(path).then(()=>{
return {
success: true,
printerId,
time: Date.now() - time
};
}).catch((e)=>{
(0, _node.captureException)(e);
return {
failure: true,
error: e.message,
printerId,
time: Date.now() - time
};
});
promises.push(promise);
}
return await Promise.all(promises);
}
}
//# sourceMappingURL=batch-call.service.js.map