From c95a5f4254b030f546e45b0034d2ec6f02e9dbec Mon Sep 17 00:00:00 2001 From: Kraiem Taha Yassine Date: Wed, 1 Nov 2023 03:58:32 +0100 Subject: [PATCH] Api v1.15.0 (#1601) * refactor(assist): cleaned code * refactor(assist): enhanced get-live-session --- assist/servers/websocket.js | 29 +++----------------- assist/utils/httpHandlers.js | 38 ++++++++++++++++++++++++++ ee/assist/.gitignore | 4 ++- ee/assist/clean-dev.sh | 2 ++ ee/assist/server.js | 2 +- ee/assist/servers/websocket-cluster.js | 29 ++++---------------- ee/assist/servers/websocket.js | 27 ++---------------- 7 files changed, 56 insertions(+), 75 deletions(-) diff --git a/assist/servers/websocket.js b/assist/servers/websocket.js index 698f8be4a..d11907a01 100644 --- a/assist/servers/websocket.js +++ b/assist/servers/websocket.js @@ -23,6 +23,7 @@ const { socketsList, socketsListByProject, socketsLiveByProject, + socketsLiveBySession, autocomplete } = require('../utils/httpHandlers'); @@ -75,7 +76,7 @@ wsRouter.post(`/sockets-live`, socketsLive); wsRouter.get(`/sockets-live/:projectKey/autocomplete`, autocomplete); wsRouter.get(`/sockets-live/:projectKey`, socketsLiveByProject); wsRouter.post(`/sockets-live/:projectKey`, socketsLiveByProject); -wsRouter.get(`/sockets-live/:projectKey/:sessionId`, socketsLiveByProject); +wsRouter.get(`/sockets-live/:projectKey/:sessionId`, socketsLiveBySession); module.exports = { wsRouter, @@ -85,29 +86,6 @@ module.exports = { io.on('connection', (socket) => onConnect(socket)); console.log("WS server started"); - setInterval(async (io) => { - try { - let count = 0; - const rooms = await getAvailableRooms(io); - console.log(` ====== Rooms: ${rooms.size} ====== `); - const arr = Array.from(rooms); - const filtered = arr.filter(room => !room[1].has(room[0])); - for (let i of filtered) { - let {projectKey, sessionId} = extractPeerId(i[0]); - if (projectKey !== null && sessionId !== null) { - count++; - } - } - console.log(` ====== Valid Rooms: ${count} ====== `); - if (debug_log) { - for (let item of filtered) { - console.log(`Room: ${item[0]} connected: ${item[1].size}`); - } - } - } catch (e) { - console.error(e); - } - }, 30000, io); socketConnexionTimeout(io); }, @@ -115,6 +93,7 @@ module.exports = { socketsList, socketsListByProject, socketsLive, - socketsLiveByProject + socketsLiveByProject, + socketsLiveBySession } }; diff --git a/assist/utils/httpHandlers.js b/assist/utils/httpHandlers.js index a11ff5e16..b3dd51d80 100644 --- a/assist/utils/httpHandlers.js +++ b/assist/utils/httpHandlers.js @@ -132,6 +132,43 @@ const socketsLiveByProject = async function (req, res) { respond(res, _sessionId === undefined ? sortPaginate(sessions, filters) : sessions.length > 0 ? sessions[0] : null); } +const socketsLiveBySession = async function (req, res) { + let io = getServer(); + debug_log && console.log("[WS]looking for LIVE session"); + let _projectKey = extractProjectKeyFromRequest(req); + let _sessionId = extractSessionIdFromRequest(req); + if (_sessionId === undefined) { + return respond(res, null); + } + let filters = await extractPayloadFromRequest(req, res); + let withFilters = hasFilters(filters); + let liveSessions = new Set(); + const sessIDs = new Set(); + + let connected_sockets = await io.in(_projectKey + '-' + _sessionId).fetchSockets(); + for (let item of connected_sockets) { + if (item.handshake.query.identity === IDENTITIES.session) { + if (withFilters) { + if (item.handshake.query.sessionInfo && + isValidSession(item.handshake.query.sessionInfo, filters.filter) && + !sessIDs.has(item.handshake.query.sessionInfo.sessionID) + ) { + liveSessions.add(item.handshake.query.sessionInfo); + sessIDs.add(item.handshake.query.sessionInfo.sessionID); + } + } else { + if (!sessIDs.has(item.handshake.query.sessionInfo.sessionID)) { + liveSessions.add(item.handshake.query.sessionInfo); + sessIDs.add(item.handshake.query.sessionInfo.sessionID); + } + } + } + + } + let sessions = Array.from(liveSessions); + respond(res, sessions.length > 0 ? sessions[0] : null); +} + const autocomplete = async function (req, res) { let io = getServer(); debug_log && console.log("[WS]autocomplete"); @@ -160,5 +197,6 @@ module.exports = { socketsList, socketsListByProject, socketsLiveByProject, + socketsLiveBySession, autocomplete } \ No newline at end of file diff --git a/ee/assist/.gitignore b/ee/assist/.gitignore index 98f9f8386..085b1a57e 100644 --- a/ee/assist/.gitignore +++ b/ee/assist/.gitignore @@ -15,5 +15,7 @@ servers/sourcemaps-server.js /utils/HeapSnapshot.js /utils/helper.js /utils/assistHelper.js +/utils/httpHandlers.js +/utils/socketHandlers.js .local -*.mmdb +*.mmdb \ No newline at end of file diff --git a/ee/assist/clean-dev.sh b/ee/assist/clean-dev.sh index eff1f6308..621391595 100755 --- a/ee/assist/clean-dev.sh +++ b/ee/assist/clean-dev.sh @@ -3,6 +3,8 @@ rm -rf ./utils/health.js rm -rf ./utils/HeapSnapshot.js rm -rf ./utils/helper.js rm -rf ./utils/assistHelper.js +rm -rf ./utils/httpHandlers.js +rm -rf ./utils/socketHandlers.js rm -rf servers/peerjs-server.js rm -rf servers/sourcemaps-handler.js diff --git a/ee/assist/server.js b/ee/assist/server.js index 414d7ac2c..6193313ac 100644 --- a/ee/assist/server.js +++ b/ee/assist/server.js @@ -94,7 +94,7 @@ if (process.env.uws !== "true") { uapp.get(`${PREFIX}/${P_KEY}/sockets-live/:projectKey/autocomplete`, uWrapper(socket.handlers.autocomplete)); uapp.get(`${PREFIX}/${P_KEY}/sockets-live/:projectKey`, uWrapper(socket.handlers.socketsLiveByProject)); uapp.post(`${PREFIX}/${P_KEY}/sockets-live/:projectKey`, uWrapper(socket.handlers.socketsLiveByProject)); - uapp.get(`${PREFIX}/${P_KEY}/sockets-live/:projectKey/:sessionId`, uWrapper(socket.handlers.socketsLiveByProject)); + uapp.get(`${PREFIX}/${P_KEY}/sockets-live/:projectKey/:sessionId`, uWrapper(socket.handlers.socketsLiveBySession)); socket.start(uapp); diff --git a/ee/assist/servers/websocket-cluster.js b/ee/assist/servers/websocket-cluster.js index c80549461..368c2c28e 100644 --- a/ee/assist/servers/websocket-cluster.js +++ b/ee/assist/servers/websocket-cluster.js @@ -25,6 +25,7 @@ const { socketsList, socketsListByProject, socketsLiveByProject, + socketsLiveBySession, autocomplete } = require('../utils/httpHandlers'); @@ -89,7 +90,7 @@ wsRouter.post(`/sockets-live`, socketsLive); wsRouter.get(`/sockets-live/:projectKey/autocomplete`, autocomplete); wsRouter.get(`/sockets-live/:projectKey`, socketsLiveByProject); wsRouter.post(`/sockets-live/:projectKey`, socketsLiveByProject); -wsRouter.get(`/sockets-live/:projectKey/:sessionId`, socketsLiveByProject); +wsRouter.get(`/sockets-live/:projectKey/:sessionId`, socketsLiveBySession); module.exports = { wsRouter, @@ -99,34 +100,13 @@ module.exports = { io.on('connection', (socket) => onConnect(socket)); console.log("WS server started"); - setInterval(async (io) => { - try { - const rooms = await getAvailableRooms(io); - let validRooms = []; - console.log(` ====== Rooms: ${rooms.size} ====== `); - for (let i of rooms) { - let {projectKey, sessionId} = extractPeerId(i); - if (projectKey !== undefined && sessionId !== undefined) { - validRooms.push(i); - } - } - console.log(` ====== Valid Rooms: ${validRooms.length} ====== `); - if (debug_log) { - for (let item of validRooms) { - let connectedSockets = await io.in(item).fetchSockets(); - console.log(`Room: ${item} connected: ${connectedSockets.length}`); - } - } - } catch (e) { - console.error(e); - } - }, 30000, io); socketConnexionTimeout(io); Promise.all([pubClient.connect(), subClient.connect()]) .then(() => { - io.adapter(createAdapter(pubClient, subClient)); + io.adapter(createAdapter(pubClient, subClient, + {requestsTimeout: process.env.REDIS_REQUESTS_TIMEOUT || 5000})); console.log("> redis connected."); }) .catch((err) => { @@ -140,6 +120,7 @@ module.exports = { socketsListByProject, socketsLive, socketsLiveByProject, + socketsLiveBySession, autocomplete } }; \ No newline at end of file diff --git a/ee/assist/servers/websocket.js b/ee/assist/servers/websocket.js index cefc84c8d..76cddfcf0 100644 --- a/ee/assist/servers/websocket.js +++ b/ee/assist/servers/websocket.js @@ -25,6 +25,7 @@ const { socketsList, socketsListByProject, socketsLiveByProject, + socketsLiveBySession, autocomplete } = require('../utils/httpHandlers'); @@ -76,7 +77,7 @@ wsRouter.post(`/sockets-live`, socketsLive); wsRouter.get(`/sockets-live/:projectKey/autocomplete`, autocomplete); wsRouter.get(`/sockets-live/:projectKey`, socketsLiveByProject); wsRouter.post(`/sockets-live/:projectKey`, socketsLiveByProject); -wsRouter.get(`/sockets-live/:projectKey/:sessionId`, socketsLiveByProject); +wsRouter.get(`/sockets-live/:projectKey/:sessionId`, socketsLiveBySession); module.exports = { wsRouter, @@ -86,29 +87,6 @@ module.exports = { io.on('connection', (socket) => onConnect(socket)); console.log("WS server started"); - setInterval(async (io) => { - try { - let count = 0; - const rooms = await getAvailableRooms(io); - console.log(` ====== Rooms: ${rooms.size} ====== `); - const arr = Array.from(rooms); - const filtered = arr.filter(room => !room[1].has(room[0])); - for (let i of filtered) { - let {projectKey, sessionId} = extractPeerId(i[0]); - if (projectKey !== null && sessionId !== null) { - count++; - } - } - console.log(` ====== Valid Rooms: ${count} ====== `); - if (debug_log) { - for (let item of filtered) { - console.log(`Room: ${item[0]} connected: ${item[1].size}`); - } - } - } catch (e) { - console.error(e); - } - }, 30000, io); socketConnexionTimeout(io); }, @@ -117,6 +95,7 @@ module.exports = { socketsListByProject, socketsLive, socketsLiveByProject, + socketsLiveBySession, autocomplete } };