From 80af24f91ae1f3dbc8ee20ab39dd5329778e3a88 Mon Sep 17 00:00:00 2001 From: Alexander Date: Mon, 27 May 2024 16:00:46 +0200 Subject: [PATCH] feat(assist): count a search filters for full match results only (#2209) --- assist/utils/helper.js | 20 ++++++++++---------- assist/utils/httpHandlers.js | 16 ++++++++++++++-- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/assist/utils/helper.js b/assist/utils/helper.js index 5de89d8d5..154cb0201 100644 --- a/assist/utils/helper.js +++ b/assist/utils/helper.js @@ -63,13 +63,11 @@ const extractSessionIdFromRequest = function (req) { return undefined; } -const isValidSession = function (sessionInfo, filters, counter) { +const isValidSession = function (sessionInfo, filters) { + const result = {matched: false, filters: {}}; for (const [filterName, body] of Object.entries(filters)) { // range by filter names (key) if (body.values === undefined || body.values === null) { - return false; - } - if (!counter[filterName]) { - counter[filterName] = {}; + return result; } let found = false; for (const [sessKey, sessValue] of Object.entries(sessionInfo)) { @@ -77,8 +75,10 @@ const isValidSession = function (sessionInfo, filters, counter) { continue; } if (typeof (sessValue) === "object") { - if (isValidSession(sessValue, {[filterName]: body}, counter)) { + const partRes = isValidSession(sessValue, {[filterName]: body}) + if (partRes.matched) { found = true; + Object.assign(result.filters, partRes.filters); break; } } else if (sessKey.toLowerCase() === filterName.toLowerCase()) { @@ -86,8 +86,7 @@ const isValidSession = function (sessionInfo, filters, counter) { if (body.operator === "is" && v && String(sessValue).toLowerCase() === String(v).toLowerCase() || body.operator !== "is" && String(sessValue).toLowerCase().indexOf(String(v).toLowerCase()) >= 0) { found = true; - if (counter[filterName][v]) counter[filterName][v]++; - else counter[filterName][v] = 1; + result.filters[filterName] = v; break; } } @@ -97,10 +96,11 @@ const isValidSession = function (sessionInfo, filters, counter) { } } if (!found) { - return false; + return result; } } - return true; + result.matched = true; + return result; } const getValidAttributes = function (sessionInfo, query) { diff --git a/assist/utils/httpHandlers.js b/assist/utils/httpHandlers.js index 71ac7050e..3e5e65161 100644 --- a/assist/utils/httpHandlers.js +++ b/assist/utils/httpHandlers.js @@ -53,7 +53,8 @@ const getParticularSession = async function (roomId, filters) { if (!hasFilters(filters)) { return sessInfo; } - if (isValidSession(sessInfo, filters.filter, {})) { + const result = isValidSession(sessInfo, filters.filter) + if (result.matched) { return sessInfo; } return null; @@ -89,8 +90,19 @@ const getAllSessions = async function (projectKey, filters, counters, onlineOnl } // Add session to the list if it passes the filter - if (isValidSession(item.handshake.query.sessionInfo, filters.filter, counters)) { + const result = isValidSession(item.handshake.query.sessionInfo, filters.filter) + if (result.matched) { sessions.push(item.handshake.query.sessionInfo); + // Add filter name/value to counter + for (const [filterName, filterValue] of Object.entries(result.filters)) { + if (counters[filterName] === undefined) { + counters[filterName] = {}; + } + if (counters[filterName][filterValue] === undefined) { + counters[filterName][filterValue] = 0; + } + counters[filterName][filterValue] += 1; + } } }