Browse Source

feat: Add log method to websocket

Owen Diffey 1 year ago
parent
commit
3954f9c5be
2 changed files with 38 additions and 0 deletions
  1. 24 0
      backend/src/WebSocket.ts
  2. 14 0
      backend/src/modules/WebSocketModule.ts

+ 24 - 0
backend/src/WebSocket.ts

@@ -1,7 +1,31 @@
 import { WebSocket as WSWebSocket } from "ws";
+import LogBook, { Log } from "./LogBook";
 
 export default class WebSocket extends WSWebSocket {
+	protected logBook: LogBook = LogBook.getPrimaryInstance();
+
 	public dispatch(name: string, ...args: any[]) {
 		this.send(JSON.stringify([name, ...args]));
 	}
+
+	/**
+	 * log - Add log to logbook
+	 *
+	 * @param log - Log message or object
+	 */
+	public log(log: string | Omit<Log, "timestamp" | "category">) {
+		const {
+			message,
+			type = undefined,
+			data = {}
+		} = {
+			...(typeof log === "string" ? { message: log } : log)
+		};
+		this.logBook.log({
+			message,
+			type,
+			category: "modules.websocket.socket",
+			data
+		});
+	}
 }

+ 14 - 0
backend/src/modules/WebSocketModule.ts

@@ -92,6 +92,20 @@ export default class WebSocketModule extends BaseModule {
 			return;
 		}
 
+		socket.log({ type: "debug", message: "WebSocket #ID connected" });
+
+		socket.on("error", error =>
+			socket.log({
+				type: "error",
+				message: error.message,
+				data: { error }
+			})
+		);
+
+		socket.on("close", () =>
+			socket.log({ type: "debug", message: "WebSocket #ID closed" })
+		);
+
 		const readyData = {
 			config: {
 				cookie: config.get("cookie"),