diff --git a/server/server.js b/server/server.js index 0d5285d62..178b58b71 100644 --- a/server/server.js +++ b/server/server.js @@ -727,7 +727,7 @@ let needSetup = false; await updateMonitorNotification(bean.id, notificationIDList); - await server.sendUpdateMonitorIntoList(socket, bean.id); + await server.sendUpdateMonitorsIntoList(socket, bean.id); if (monitor.active !== false) { await startMonitor(socket.userID, bean.id); @@ -884,7 +884,7 @@ let needSetup = false; await restartMonitor(socket.userID, bean.id); } - await server.sendUpdateMonitorIntoList(socket, bean.id); + await server.sendUpdateMonitorsIntoList(socket, bean.id); callback({ ok: true, @@ -985,7 +985,9 @@ let needSetup = false; try { checkLogin(socket); await startMonitor(socket.userID, monitorID); - await server.sendUpdateMonitorIntoList(socket, monitorID); + + const childrenIDs = await Monitor.getAllChildrenIDs(monitorID); + await server.sendUpdateMonitorsIntoList(socket, [ monitorID, ...childrenIDs ]); callback({ ok: true, @@ -1005,7 +1007,9 @@ let needSetup = false; try { checkLogin(socket); await pauseMonitor(socket.userID, monitorID); - await server.sendUpdateMonitorIntoList(socket, monitorID); + + const childrenIDs = await Monitor.getAllChildrenIDs(monitorID); + await server.sendUpdateMonitorsIntoList(socket, [ monitorID, ...childrenIDs ]); callback({ ok: true, diff --git a/server/uptime-kuma-server.js b/server/uptime-kuma-server.js index 76bf42565..5c1b281e1 100644 --- a/server/uptime-kuma-server.js +++ b/server/uptime-kuma-server.js @@ -208,12 +208,16 @@ class UptimeKumaServer { /** * Update Monitor into list * @param {Socket} socket Socket to send list on - * @param {number} monitorID update or deleted monitor id + * @param {number | number[]} monitorIDs update or deleted monitor ids * @returns {Promise} */ - async sendUpdateMonitorIntoList(socket, monitorID) { - let list = await this.getMonitorJSONList(socket.userID, monitorID); - this.io.to(socket.userID).emit("updateMonitorIntoList", list); + async sendUpdateMonitorsIntoList(socket, monitorIDs) { + if (!Array.isArray(monitorIDs)) { + monitorIDs = [ monitorIDs ]; + } + + let list = await this.getMonitorJSONList(socket.userID, monitorIDs); + this.io.to(socket.userID).emit("updateMonitorsIntoList", list); } /** @@ -229,19 +233,19 @@ class UptimeKumaServer { /** * Get a list of monitors for the given user. * @param {string} userID - The ID of the user to get monitors for. - * @param {number} monitorID - The ID of monitor for. + * @param {number[]} monitorIDs - The IDs of monitors for. * @returns {Promise} A promise that resolves to an object with monitor IDs as keys and monitor objects as values. * * Generated by Trelent */ - async getMonitorJSONList(userID, monitorID = null) { + async getMonitorJSONList(userID, monitorIDs = null) { let query = " user_id = ? "; let queryParams = [ userID ]; - if (monitorID) { - query += "AND id = ? "; - queryParams.push(monitorID); + if (monitorIDs) { + query += `AND id IN (${monitorIDs.map((_) => "?").join(",")}) `; + queryParams.push(...monitorIDs); } let monitorList = await R.find("monitor", query + "ORDER BY weight DESC, name", queryParams); diff --git a/src/mixins/socket.js b/src/mixins/socket.js index 3272e042c..31b7d630d 100644 --- a/src/mixins/socket.js +++ b/src/mixins/socket.js @@ -145,7 +145,7 @@ export default { this.monitorList = data; }); - socket.on("updateMonitorIntoList", (data) => { + socket.on("updateMonitorsIntoList", (data) => { this.assignMonitorUrlParser(data); Object.entries(data).forEach(([ monitorID, updatedMonitor ]) => { this.monitorList[monitorID] = updatedMonitor;