Add pause routes and controller, implement functionality

This commit is contained in:
Alex Holliday
2024-08-28 15:21:59 -07:00
parent 1ab423cd76
commit 17174ebe14
7 changed files with 73 additions and 13 deletions
@@ -264,7 +264,7 @@ const Configure = () => {
>
<Button
level="tertiary"
label="Pause"
label={monitor?.isActive ? "Pause" : "Resume"}
animate="rotate180"
img={<PauseCircleOutlineIcon />}
sx={{
+16 -7
View File
@@ -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"
>
<StatusBox title="up" value={up} />
<StatusBox title="down" value={down} />
<StatusBox title="paused" value={0} />
<StatusBox title="up" value={monitorStats.up} />
<StatusBox title="down" value={monitorStats.down} />
<StatusBox title="paused" value={monitorStats.paused} />
</Stack>
<Box
flex={1}
+40 -1
View File
@@ -5,6 +5,7 @@ const {
createMonitorBodyValidation,
editMonitorBodyValidation,
getMonitorsByTeamIdQueryValidation,
pauseMonitorParamValidation,
} = require("../validation/joi");
const sslChecker = require("ssl-checker");
@@ -309,7 +310,7 @@ const editMonitor = async (req, res, next) => {
// 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,
};
+2 -4
View File
@@ -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<Monitor>}
* @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 {
+7
View File
@@ -31,4 +31,11 @@ router.delete(
isAllowed(["superadmin"]),
monitorController.deleteAllMonitors
);
router.post(
"/pause/:monitorId",
isAllowed(["admin", "superadmin"]),
monitorController.pauseMonitor
);
module.exports = router;
+2
View File
@@ -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",
+5
View File
@@ -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,