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.

43 lines (42 loc) 1.85 kB
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