73 lines
1.7 KiB
JavaScript
73 lines
1.7 KiB
JavaScript
import { useCallback } from "react";
|
|
import { useTheme } from "@mui/material";
|
|
|
|
const useMonitorUtils = () => {
|
|
const getMonitorWithPercentage = useCallback((monitor, theme) => {
|
|
let uptimePercentage = "";
|
|
let percentageColor = "";
|
|
|
|
if (monitor.uptimePercentage !== undefined) {
|
|
uptimePercentage =
|
|
monitor.uptimePercentage === 0
|
|
? "0"
|
|
: (monitor.uptimePercentage * 100).toFixed(2);
|
|
|
|
percentageColor =
|
|
monitor.uptimePercentage < 0.25
|
|
? theme.palette.error.main
|
|
: monitor.uptimePercentage < 0.5
|
|
? theme.palette.warning.main
|
|
: monitor.uptimePercentage < 0.75
|
|
? theme.palette.success.main
|
|
: theme.palette.success.main;
|
|
}
|
|
|
|
return {
|
|
...monitor,
|
|
percentage: uptimePercentage,
|
|
percentageColor,
|
|
monitor: monitor,
|
|
};
|
|
}, []);
|
|
|
|
const determineState = useCallback((monitor) => {
|
|
if (typeof monitor === "undefined") return "pending";
|
|
if (monitor.isActive === false) return "paused";
|
|
if (monitor?.status === undefined) return "pending";
|
|
return monitor?.status == true ? "up" : "down";
|
|
}, []);
|
|
|
|
const theme = useTheme();
|
|
|
|
const statusColor = {
|
|
up: theme.palette.success.lowContrast,
|
|
down: theme.palette.error.lowContrast,
|
|
paused: theme.palette.warning.lowContrast,
|
|
pending: theme.palette.warning.lowContrast,
|
|
};
|
|
|
|
const statusToTheme = {
|
|
up: "success",
|
|
down: "error",
|
|
paused: "warning",
|
|
pending: "secondary",
|
|
"cannot resolve": "tertiary",
|
|
};
|
|
|
|
const pagespeedStatusMsg = {
|
|
up: "Live (collecting data)",
|
|
down: "Inactive",
|
|
paused: "Paused",
|
|
};
|
|
|
|
return {
|
|
getMonitorWithPercentage,
|
|
determineState,
|
|
statusColor,
|
|
statusToTheme,
|
|
pagespeedStatusMsg,
|
|
};
|
|
};
|
|
|
|
export { useMonitorUtils };
|