From 15e067c9bfad3881f8c7bc21085acfac894ffafb Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Thu, 12 Sep 2024 12:49:18 +0800 Subject: [PATCH 1/3] Add ttl --- Server/controllers/checkController.js | 35 ++++++++++++++++++++------ Server/db/mongo/MongoDB.js | 2 ++ Server/db/mongo/modules/checkModule.js | 15 +++++++++++ Server/routes/checkRoute.js | 6 +++++ Server/utils/messages.js | 1 + 5 files changed, 51 insertions(+), 8 deletions(-) diff --git a/Server/controllers/checkController.js b/Server/controllers/checkController.js index 85bce0b54..ae0969e6e 100644 --- a/Server/controllers/checkController.js +++ b/Server/controllers/checkController.js @@ -31,7 +31,8 @@ const createCheck = async (req, res, next) => { .status(200) .json({ success: true, msg: successMessages.CHECK_CREATE, data: check }); } catch (error) { - error.service = SERVICE_NAME; + error.service === undefined ? (error.serivce = SERVICE_NAME) : null; + error.method === undefined ? (error.method = "createCheck") : null; next(error); } }; @@ -58,7 +59,8 @@ const getChecks = async (req, res, next) => { data: { checksCount, checks }, }); } catch (error) { - error.service = SERVICE_NAME; + error.service === undefined ? (error.serivce = SERVICE_NAME) : null; + error.method === undefined ? (error.method = "getChecks") : null; next(error); } }; @@ -83,7 +85,8 @@ const getTeamChecks = async (req, res, next) => { data: checkData, }); } catch (error) { - error.service = SERVICE_NAME; + error.service === undefined ? (error.serivce = SERVICE_NAME) : null; + error.method === undefined ? (error.method = "getTeamChecks") : null; next(error); } }; @@ -108,7 +111,8 @@ const deleteChecks = async (req, res, next) => { data: { deletedCount }, }); } catch (error) { - error.service = SERVICE_NAME; + error.service === undefined ? (error.serivce = SERVICE_NAME) : null; + error.method === undefined ? (error.method = "deleteChecks") : null; next(error); } }; @@ -117,8 +121,8 @@ const deleteChecksByTeamId = async (req, res, next) => { try { await deleteChecksByTeamIdParamValidation.validateAsync(req.params); } catch (error) { - error.service = SERVICE_NAME; - error.method = "deleteChecksByTeam"; + error.service === undefined ? (error.service = SERVICE_NAME) : null; + error.method === undefined ? (error.method = "deleteChecksByTeam") : null; error.status = 422; next(error); } @@ -131,8 +135,22 @@ const deleteChecksByTeamId = async (req, res, next) => { data: { deletedCount }, }); } catch (error) { - error.service = SERVICE_NAME; - error.method = "deleteChecksByTeamId"; + error.service === undefined ? (error.service = SERVICE_NAME) : null; + error.method === undefined ? (error.method = "deleteChecksByTeamId") : null; + next(error); + } +}; + +const updateChecksTTL = async (req, res, next) => { + try { + await req.db.updateChecksTTL(1); + return res.status(200).json({ + success: true, + msg: successMessages.CHECK_UPDATE_TTL, + }); + } catch (error) { + error.service === undefined ? (error.service = SERVICE_NAME) : null; + error.method === undefined ? (error.method = "updateTTL") : null; next(error); } }; @@ -143,4 +161,5 @@ module.exports = { getTeamChecks, deleteChecks, deleteChecksByTeamId, + updateChecksTTL, }; diff --git a/Server/db/mongo/MongoDB.js b/Server/db/mongo/MongoDB.js index 73d55d509..ebc50f7da 100644 --- a/Server/db/mongo/MongoDB.js +++ b/Server/db/mongo/MongoDB.js @@ -97,6 +97,7 @@ const { getTeamChecks, deleteChecks, deleteChecksByTeamId, + updateChecksTTL, } = require("./modules/checkModule"); //**************************************** @@ -161,6 +162,7 @@ module.exports = { getTeamChecks, deleteChecks, deleteChecksByTeamId, + updateChecksTTL, createAlert, getAlertsByUserId, getAlertsByMonitorId, diff --git a/Server/db/mongo/modules/checkModule.js b/Server/db/mongo/modules/checkModule.js index da3ccb8f3..9f5c687df 100644 --- a/Server/db/mongo/modules/checkModule.js +++ b/Server/db/mongo/modules/checkModule.js @@ -239,6 +239,20 @@ const deleteChecksByTeamId = async (teamId) => { } }; +const updateChecksTTL = async (teamId) => { + try { + await Check.collection.dropIndex("expiry_1"); + await Check.collection.createIndex( + { expiry: 1 }, // Field to index + { expireAfterSeconds: 60 } // TTL in seconds, adjust as necessary + ); + } catch (error) { + error.service = SERVICE_NAME; + error.method = updateTTL; + throw error; + } +}; + module.exports = { createCheck, getChecksCount, @@ -246,4 +260,5 @@ module.exports = { getTeamChecks, deleteChecks, deleteChecksByTeamId, + updateChecksTTL, }; diff --git a/Server/routes/checkRoute.js b/Server/routes/checkRoute.js index 649a68ccf..a26e9eb94 100644 --- a/Server/routes/checkRoute.js +++ b/Server/routes/checkRoute.js @@ -26,4 +26,10 @@ router.delete( checkController.deleteChecksByTeamId ); +router.put( + "/ttl", + isAllowed(["admin", "superadmin"]), + checkController.updateChecksTTL +); + module.exports = router; diff --git a/Server/utils/messages.js b/Server/utils/messages.js index e67e4e7e7..04da91491 100644 --- a/Server/utils/messages.js +++ b/Server/utils/messages.js @@ -73,6 +73,7 @@ const successMessages = { CHECK_CREATE: "Check created successfully", CHECK_GET: "Got checks successfully", CHECK_DELETE: "Checks deleted successfully", + CHECK_UPDATE_TTL: "Checks TTL updated successfully", //Monitor Controller MONITOR_GET_ALL: "Got all monitors successfully", From 9bbd5ce12a7c4261dbdbb7802f5086bdd031d60b Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Sat, 14 Sep 2024 12:16:13 +0800 Subject: [PATCH 2/3] Add validation for updateTTL body --- Server/controllers/checkController.js | 19 +++++++++++++++++-- Server/db/mongo/modules/checkModule.js | 8 ++++---- Server/db/mongo/modules/monitorModule.js | 2 +- Server/middleware/handleErrors.js | 2 +- Server/validation/joi.js | 5 +++++ 5 files changed, 28 insertions(+), 8 deletions(-) diff --git a/Server/controllers/checkController.js b/Server/controllers/checkController.js index ae0969e6e..49dfad1af 100644 --- a/Server/controllers/checkController.js +++ b/Server/controllers/checkController.js @@ -7,9 +7,10 @@ const { getTeamChecksQueryValidation, deleteChecksParamValidation, deleteChecksByTeamIdParamValidation, + updateChecksTTLBodyValidation, } = require("../validation/joi"); const { successMessages } = require("../utils/messages"); -const SERVICE_NAME = "check"; +const SERVICE_NAME = "checkController"; const createCheck = async (req, res, next) => { try { @@ -125,6 +126,7 @@ const deleteChecksByTeamId = async (req, res, next) => { error.method === undefined ? (error.method = "deleteChecksByTeam") : null; error.status = 422; next(error); + return; } try { @@ -143,7 +145,20 @@ const deleteChecksByTeamId = async (req, res, next) => { const updateChecksTTL = async (req, res, next) => { try { - await req.db.updateChecksTTL(1); + await updateChecksTTLBodyValidation.validateAsync(req.body); + } catch (error) { + error.status = 422; + error.service === undefined ? (error.service = SERVICE_NAME) : null; + error.method === undefined ? (error.method = "updateChecksTTL") : null; + error.message = + error.details?.[0]?.message || error.message || "Validation Error"; + next(error); + return; + } + + try { + const ttl = req.body.ttl; + await req.db.updateChecksTTL(1, ttl); return res.status(200).json({ success: true, msg: successMessages.CHECK_UPDATE_TTL, diff --git a/Server/db/mongo/modules/checkModule.js b/Server/db/mongo/modules/checkModule.js index 9f5c687df..d12f26c0b 100644 --- a/Server/db/mongo/modules/checkModule.js +++ b/Server/db/mongo/modules/checkModule.js @@ -239,16 +239,16 @@ const deleteChecksByTeamId = async (teamId) => { } }; -const updateChecksTTL = async (teamId) => { +const updateChecksTTL = async (teamId, ttl) => { try { await Check.collection.dropIndex("expiry_1"); await Check.collection.createIndex( - { expiry: 1 }, // Field to index - { expireAfterSeconds: 60 } // TTL in seconds, adjust as necessary + { expiry: 1 }, + { expireAfterSeconds: ttl } // TTL in seconds, adjust as necessary ); } catch (error) { error.service = SERVICE_NAME; - error.method = updateTTL; + error.method = "upddateChecksTTL"; throw error; } }; diff --git a/Server/db/mongo/modules/monitorModule.js b/Server/db/mongo/modules/monitorModule.js index 5eaec7bf9..19f26defe 100644 --- a/Server/db/mongo/modules/monitorModule.js +++ b/Server/db/mongo/modules/monitorModule.js @@ -262,7 +262,7 @@ const getMonitorStatsById = async (req) => { return monitorStats; } catch (error) { - error.methodName = "getMonitorStatsById"; + error.method = "getMonitorStatsById"; throw error; } }; diff --git a/Server/middleware/handleErrors.js b/Server/middleware/handleErrors.js index db51c1af6..3f1ba56f4 100644 --- a/Server/middleware/handleErrors.js +++ b/Server/middleware/handleErrors.js @@ -7,7 +7,7 @@ const handleErrors = (error, req, res, next) => { const service = error.service || errorMessages.UNKNOWN_SERVICE; logger.error(error.message, { service: service, - methodName: error.methodName, + method: error.method, }); res.status(status).json({ success: false, msg: message }); }; diff --git a/Server/validation/joi.js b/Server/validation/joi.js index 918400c21..dfb0e6fe7 100644 --- a/Server/validation/joi.js +++ b/Server/validation/joi.js @@ -335,6 +335,10 @@ const deleteChecksByTeamIdParamValidation = joi.object({ teamId: joi.string().required(), }); +const updateChecksTTLBodyValidation = joi.object({ + ttl: joi.number().required(), +}); + //**************************************** // PageSpeedCheckValidation //**************************************** @@ -423,6 +427,7 @@ module.exports = { getTeamChecksQueryValidation, deleteChecksParamValidation, deleteChecksByTeamIdParamValidation, + updateChecksTTLBodyValidation, deleteUserParamValidation, getPageSpeedCheckParamValidation, createPageSpeedCheckParamValidation, From 0d04369c6364a8e9401247f0a261c9ba6c4d6e89 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Sun, 15 Sep 2024 08:26:17 +0800 Subject: [PATCH 3/3] Fix typo --- Server/db/mongo/modules/checkModule.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Server/db/mongo/modules/checkModule.js b/Server/db/mongo/modules/checkModule.js index d12f26c0b..290e2a3e4 100644 --- a/Server/db/mongo/modules/checkModule.js +++ b/Server/db/mongo/modules/checkModule.js @@ -248,7 +248,7 @@ const updateChecksTTL = async (teamId, ttl) => { ); } catch (error) { error.service = SERVICE_NAME; - error.method = "upddateChecksTTL"; + error.method = "updateChecksTTL"; throw error; } };