diff --git a/server/monitor-types/websocket-upgrade.js b/server/monitor-types/websocket-upgrade.js
index fe23745c6..4adb1f1e5 100644
--- a/server/monitor-types/websocket-upgrade.js
+++ b/server/monitor-types/websocket-upgrade.js
@@ -31,19 +31,23 @@ class WebSocketMonitorType extends MonitorType {
async check(monitor, heartbeat, _server) {
const [ message, code ] = await this.attemptUpgrade(monitor);
+ if (typeof code !== "undefined") {
+ // If returned status code matches user controlled accepted status code(default 1000), return success
+ if (checkStatusCode(code, JSON.parse(monitor.accepted_statuscodes_json))) {
+ heartbeat.status = UP;
+ heartbeat.msg = message;
+ return; //success at this point
+ }
+
+ // Throw an error using friendly name if defined, fallback to generic msg
+ throw new Error(WS_ERR_CODE[code] || `Unexpected status code: ${code}`);
+ }
// If no close code, then an error has occurred, display to user
- if (typeof code === "undefined") {
+ if (typeof message !== "undefined") {
throw new Error(`${message}`);
}
- // If returned status code matches user controlled accepted status code(default 1000), return success
- if (checkStatusCode(code, JSON.parse(monitor.accepted_statuscodes_json))) {
- heartbeat.status = UP;
- heartbeat.msg = message;
- return; //success at this point
- }
-
- // Throw an error using friendly name if defined, fallback to generic msg
- throw new Error(WS_ERR_CODE[code] || `Unexpected status code: ${code}`);
+ // Throw generic error if nothing is defined, should never happen
+ throw new Error("Unknown Websocket Error");
}
/**
@@ -54,8 +58,8 @@ class WebSocketMonitorType extends MonitorType {
async attemptUpgrade(monitor) {
return new Promise((resolve) => {
let ws;
- // If user inputs subprotocol(s), convert to array, then set Sec-WebSocket-Protocol header. Subprotocol Identifier column: https://www.iana.org/assignments/websocket/websocket.xml#subprotocol-name
- ws = !monitor.wsSubprotocol ? new WebSocket(monitor.url) : new WebSocket(monitor.url, monitor.wsSubprotocol.replace(/\s/g, "").split(","));
+ // If user inputs subprotocol(s), convert to array, set Sec-WebSocket-Protocol header, timeout in ms. Subprotocol Identifier column: https://www.iana.org/assignments/websocket/websocket.xml#subprotocol-name
+ ws = !monitor.wsSubprotocol ? new WebSocket(monitor.url, { handshakeTimeout: (monitor?.timeout ?? 0) * 1000 }) : new WebSocket(monitor.url, monitor.wsSubprotocol.replace(/\s/g, "").split(","), { handshakeTimeout: (monitor?.timeout ?? 0) * 1000 });
ws.addEventListener("open", (event) => {
// Immediately close the connection
diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue
index 55c551dd6..74b71e1a8 100644
--- a/src/pages/EditMonitor.vue
+++ b/src/pages/EditMonitor.vue
@@ -702,8 +702,8 @@
-
-