@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.
43 lines (42 loc) • 1.85 kB
JavaScript
import "../services/printer-api.interface.js";
import { errorSummary } from "../utils/error.utils.js";
import { API_STATE } from "../shared/dtos/api-state.type.js";
import { captureException } from "@sentry/node";
//#region src/tasks/printer-websocket-restore.task.ts
var PrinterWebsocketRestoreTask = class PrinterWebsocketRestoreTask {
logger;
constructor(loggerFactory, printerSocketStore, octoprintClient) {
this.printerSocketStore = printerSocketStore;
this.octoprintClient = octoprintClient;
this.logger = loggerFactory(PrinterWebsocketRestoreTask.name);
}
async run() {
const existingSockets = this.printerSocketStore.listPrinterSockets();
for (const socket of existingSockets) {
if (socket.printerType !== 0) continue;
try {
if (socket.isClosedOrAborted()) {
socket.close();
socket.resetSocketState();
this.logger.warn("Socket was closed or aborted, manually removing it");
continue;
}
} catch (e) {
captureException(e);
this.logger.error(`Resetting WebSocket socket failed for printer with error '${errorSummary(e)}'`, e.stack);
continue;
}
if (socket.apiState !== API_STATE.unset && !socket.lastMessageReceivedTimestamp || socket.lastMessageReceivedTimestamp && Date.now() - socket.lastMessageReceivedTimestamp > 10 * 1e3) {
const result = await this.octoprintClient.getConnection(socket.login);
try {
if (result.data?.current?.state !== "Closed") this.logger.warn(`Silence was detected, but the OctoPrint current connection was not closed. Connection state ${result.data?.current?.state}`);
} catch (e) {
this.logger.error(`Silence was detected, but Websocket was not closed/aborted and API could not be called`);
}
}
}
}
};
//#endregion
export { PrinterWebsocketRestoreTask };
//# sourceMappingURL=printer-websocket-restore.task.js.map