diff --git a/Client/src/Pages/Monitors/Configure/index.jsx b/Client/src/Pages/Monitors/Configure/index.jsx
index 20bd551cc..7a86d50ce 100644
--- a/Client/src/Pages/Monitors/Configure/index.jsx
+++ b/Client/src/Pages/Monitors/Configure/index.jsx
@@ -264,7 +264,7 @@ const Configure = () => {
>
}
sx={{
diff --git a/Client/src/Pages/Monitors/Home/index.jsx b/Client/src/Pages/Monitors/Home/index.jsx
index 91ecad3d9..787407edf 100644
--- a/Client/src/Pages/Monitors/Home/index.jsx
+++ b/Client/src/Pages/Monitors/Home/index.jsx
@@ -24,11 +24,20 @@ const Monitors = ({ isAdmin }) => {
dispatch(getUptimeMonitorsByTeamId(authState.authToken));
}, [authState.authToken, dispatch]);
- const up = monitorState.monitors.reduce((acc, cur) => {
- return cur.status === true ? acc + 1 : acc;
- }, 0);
+ const monitorStats = monitorState.monitors.reduce(
+ (acc, monitor) => {
+ if (monitor.isActive === false) {
+ acc["paused"] += 1;
+ } else if (monitor.status === true) {
+ acc["up"] += 1;
+ } else {
+ acc["down"] += 1;
+ }
+ return acc;
+ },
+ { paused: 0, up: 0, down: 0 }
+ );
- const down = monitorState.monitors.length - up;
const data = buildData(monitorState.monitors, isAdmin, navigate);
let loading = monitorState.isLoading && monitorState.monitors.length === 0;
@@ -73,9 +82,9 @@ const Monitors = ({ isAdmin }) => {
direction="row"
justifyContent="space-between"
>
-
-
-
+
+
+
{
// Get notifications from the request body
const notifications = req.body.notifications;
- const editedMonitor = await req.db.editMonitor(req, res);
+ const editedMonitor = await req.db.editMonitor(monitorId, req.body);
await req.db.deleteNotificationsByMonitorId(editedMonitor._id);
@@ -337,6 +338,43 @@ const editMonitor = async (req, res, next) => {
}
};
+const pauseMonitor = async (req, res, next) => {
+ try {
+ await pauseMonitorParamValidation.validateAsync(req.params);
+ } catch (error) {
+ error.status = 422;
+ error.service = SERVICE_NAME;
+ error.message =
+ error.details?.[0]?.message || error.message || "Validation Error";
+ next(error);
+ }
+
+ try {
+ const monitor = await req.db.getMonitorById(req.params.monitorId);
+ if (monitor.isActive) {
+ await req.jobQueue.deleteJob(monitor);
+ } else {
+ await req.jobQueue.addJob(monitor._id, monitor);
+ }
+ monitor.isActive = !monitor.isActive;
+ const updatedMonitor = await req.db.editMonitor(
+ req.params.monitorId,
+ monitor
+ );
+ return res.status(200).json({
+ success: true,
+ msg: updatedMonitor.isActive
+ ? successMessages.MONITOR_RESUME
+ : successMessages.MONITOR_PAUSE,
+ data: updatedMonitor,
+ });
+ } catch (error) {
+ error.service = SERVICE_NAME;
+ error.method = "pauseMonitor";
+ next(error);
+ }
+};
+
module.exports = {
getAllMonitors,
getMonitorStatsById,
@@ -347,4 +385,5 @@ module.exports = {
deleteMonitor,
deleteAllMonitors,
editMonitor,
+ pauseMonitor,
};
diff --git a/Server/db/mongo/modules/monitorModule.js b/Server/db/mongo/modules/monitorModule.js
index 9dda77007..7a86f1891 100644
--- a/Server/db/mongo/modules/monitorModule.js
+++ b/Server/db/mongo/modules/monitorModule.js
@@ -15,7 +15,7 @@ const { NormalizeData } = require("../../../utils/dataUtils");
*/
const getAllMonitors = async (req, res) => {
try {
- const monitors = await Monitor.find({ isActive: true });
+ const monitors = await Monitor.find();
return monitors;
} catch (error) {
throw error;
@@ -431,9 +431,7 @@ const deleteMonitorsByUserId = async (userId) => {
* @returns {Promise}
* @throws {Error}
*/
-const editMonitor = async (req, res) => {
- const candidateId = req.params.monitorId;
- const candidateMonitor = req.body;
+const editMonitor = async (candidateId, candidateMonitor) => {
candidateMonitor.notifications = undefined;
try {
diff --git a/Server/routes/monitorRoute.js b/Server/routes/monitorRoute.js
index e08c43b7d..ee1c08488 100644
--- a/Server/routes/monitorRoute.js
+++ b/Server/routes/monitorRoute.js
@@ -31,4 +31,11 @@ router.delete(
isAllowed(["superadmin"]),
monitorController.deleteAllMonitors
);
+
+router.post(
+ "/pause/:monitorId",
+ isAllowed(["admin", "superadmin"]),
+ monitorController.pauseMonitor
+);
+
module.exports = router;
diff --git a/Server/utils/messages.js b/Server/utils/messages.js
index d7de90caf..53a8f689f 100644
--- a/Server/utils/messages.js
+++ b/Server/utils/messages.js
@@ -87,6 +87,8 @@ const successMessages = {
//Job Queue
JOB_QUEUE_DELETE_JOB: "Job removed successfully",
JOB_QUEUE_OBLITERATE: "Queue OBLITERATED!!!",
+ JOB_QUEUE_PAUSE_JOB: "Job paused successfully",
+ JOB_QUEUE_RESUME_JOB: "Job resumed successfully",
//Maintenance Window Controller
MAINTENANCE_WINDOW_CREATE: "Maintenance Window created successfully",
diff --git a/Server/validation/joi.js b/Server/validation/joi.js
index 714eff5cf..2a7ff173d 100644
--- a/Server/validation/joi.js
+++ b/Server/validation/joi.js
@@ -197,6 +197,10 @@ const editMonitorBodyValidation = joi.object({
notifications: joi.array().items(joi.object()),
});
+const pauseMonitorParamValidation = joi.object({
+ monitorId: joi.string().required(),
+});
+
//****************************************
// Alerts
//****************************************
@@ -350,6 +354,7 @@ module.exports = {
getMonitorsByTeamIdValidation,
getMonitorsByTeamIdQueryValidation,
editMonitorBodyValidation,
+ pauseMonitorParamValidation,
editUserParamValidation,
editUserBodyValidation,
createAlertParamValidation,