diff --git a/Client/src/Components/TabPanels/Account/ProfilePanel.jsx b/Client/src/Components/TabPanels/Account/ProfilePanel.jsx index 355b09ca6..398c10c54 100644 --- a/Client/src/Components/TabPanels/Account/ProfilePanel.jsx +++ b/Client/src/Components/TabPanels/Account/ProfilePanel.jsx @@ -19,6 +19,7 @@ import ProgressUpload from "../../ProgressBars"; import { formatBytes } from "../../../Utils/fileUtils"; import { clearUptimeMonitorState } from "../../../Features/UptimeMonitors/uptimeMonitorsSlice"; import { createToast } from "../../../Utils/toastUtils"; +import { logger } from "../../../Utils/Logger"; /** * ProfilePanel component displays a form for editing user profile information @@ -256,7 +257,7 @@ const ProfilePanel = () => { placeholder="Enter your email" autoComplete="email" // TODO - add onChange - onChange={() => console.log("Disabled.")} + onChange={() => logger.warn("disabled")} // error={errors[idToName["edit-email"]]} disabled={true} /> diff --git a/Client/src/Components/TabPanels/Account/TeamPanel.jsx b/Client/src/Components/TabPanels/Account/TeamPanel.jsx index 07bbf6e68..95df3e294 100644 --- a/Client/src/Components/TabPanels/Account/TeamPanel.jsx +++ b/Client/src/Components/TabPanels/Account/TeamPanel.jsx @@ -16,7 +16,7 @@ import { useEffect, useState } from "react"; import EditSvg from "../../../assets/icons/edit.svg?react"; import Field from "../../Inputs/Field"; import { credentials } from "../../../Validation/validation"; -import axiosInstance from "../../../Utils/axiosConfig"; +import { networkService } from "../../../main"; import { createToast } from "../../../Utils/toastUtils"; import { useSelector } from "react-redux"; import BasicTable from "../../BasicTable"; @@ -52,10 +52,7 @@ const TeamPanel = () => { useEffect(() => { const fetchTeam = async () => { try { - const response = await axiosInstance.get("/auth/users", { - headers: { Authorization: `Bearer ${authToken}` }, - }); - + const response = await networkService.getAllUsers(authToken); setMembers(response.data.data); } catch (error) { createToast({ @@ -179,13 +176,10 @@ const TeamPanel = () => { setErrors((prev) => ({ ...prev, email: error.details[0].message })); } else try { - await axiosInstance.post( - "/auth/invite", - { - email: toInvite.email, - role: toInvite.role, - }, - { headers: { Authorization: `Bearer ${authToken}` } } + await networkService.requestInvitationToken( + authToken, + toInvite.email, + toInvite.role ); closeInviteModal(); diff --git a/Client/src/Features/Auth/authSlice.js b/Client/src/Features/Auth/authSlice.js index 6da315fc4..fa1f0471e 100644 --- a/Client/src/Features/Auth/authSlice.js +++ b/Client/src/Features/Auth/authSlice.js @@ -1,4 +1,4 @@ -import axiosInstance from "../../Utils/axiosConfig"; +import { networkService } from "../../main"; import { createAsyncThunk, createSlice } from "@reduxjs/toolkit"; import { jwtDecode } from "jwt-decode"; @@ -14,7 +14,7 @@ export const register = createAsyncThunk( "auth/register", async (form, thunkApi) => { try { - const res = await axiosInstance.post("/auth/register", form); + const res = await networkService.registerUser(form); return res.data; } catch (error) { if (error.response.data) { @@ -31,7 +31,7 @@ export const register = createAsyncThunk( export const login = createAsyncThunk("auth/login", async (form, thunkApi) => { try { - const res = await axiosInstance.post(`/auth/login`, form); + const res = await networkService.loginUser(form); return res.data; } catch (error) { if (error.response && error.response.data) { @@ -51,16 +51,13 @@ export const update = createAsyncThunk( const { authToken: token, localData: form } = data; const user = jwtDecode(token); try { - //1.5s delay to show loading spinner - await new Promise((resolve) => setTimeout(resolve, 1500)); - const fd = new FormData(); form.firstName && fd.append("firstName", form.firstName); form.lastName && fd.append("lastName", form.lastName); form.password && fd.append("password", form.password); form.newPassword && fd.append("newPassword", form.newPassword); if (form.file && form.file !== "") { - const imageResult = await axiosInstance.get(form.file, { + const imageResult = await networkService.get(form.file, { responseType: "blob", baseURL: "", }); @@ -69,12 +66,8 @@ export const update = createAsyncThunk( form.deleteProfileImage && fd.append("deleteProfileImage", form.deleteProfileImage); - const res = await axiosInstance.put(`/auth/user/${user._id}`, fd, { - headers: { - Authorization: `Bearer ${token}`, - "Content-Type": "multipart/form-data", - }, - }); + const res = await networkService.updateUser(token, user._id, fd); + return res.data; } catch (error) { if (error.response && error.response.data) { @@ -95,9 +88,7 @@ export const deleteUser = createAsyncThunk( const user = jwtDecode(data); try { - const res = await axiosInstance.delete(`/auth/user/${user._id}`, { - headers: { Authorization: `Bearer ${data}` }, - }); + const res = await networkService.deleteUser(data, user._id); return res.data; } catch (error) { if (error.response && error.response.data) { @@ -116,7 +107,7 @@ export const forgotPassword = createAsyncThunk( "auth/forgotPassword", async (form, thunkApi) => { try { - const res = await axiosInstance.post("/auth/recovery/request", form); + const res = await networkService.forgotPassword(form); return res.data; } catch (error) { if (error.response.data) { @@ -136,13 +127,8 @@ export const setNewPassword = createAsyncThunk( async (data, thunkApi) => { const { token, form } = data; try { - await axiosInstance.post("/auth/recovery/validate", { - recoveryToken: token, - }); - const res = await axiosInstance.post("/auth/recovery/reset", { - ...form, - recoveryToken: token, - }); + await networkService.validateRecoveryToken(token); + const res = await networkService.setNewPassword(token, form); return res.data; } catch (error) { if (error.response.data) { diff --git a/Client/src/Features/PageSpeedMonitor/pageSpeedMonitorSlice.js b/Client/src/Features/PageSpeedMonitor/pageSpeedMonitorSlice.js index 6af825a37..22e2b3324 100644 --- a/Client/src/Features/PageSpeedMonitor/pageSpeedMonitorSlice.js +++ b/Client/src/Features/PageSpeedMonitor/pageSpeedMonitorSlice.js @@ -1,6 +1,6 @@ import { createAsyncThunk, createSlice } from "@reduxjs/toolkit"; import { jwtDecode } from "jwt-decode"; -import axiosInstance from "../../Utils/axiosConfig"; +import { networkService } from "../../main"; const initialState = { isLoading: false, monitors: [], @@ -13,32 +13,7 @@ export const createPageSpeed = createAsyncThunk( async (data, thunkApi) => { try { const { authToken, monitor } = data; - - const res = await axiosInstance.post(`/monitors`, monitor, { - headers: { - Authorization: `Bearer ${authToken}`, - "Content-Type": "application/json", - }, - }); - return res.data; - } catch (error) { - if (error.response && error.response.data) { - return thunkApi.rejectWithValue(error.response.data); - } - const payload = { - status: false, - msg: error.message ? error.message : "Unknown error", - }; - return thunkApi.rejectWithValue(payload); - } - } -); - -export const getPageSpeedMonitors = createAsyncThunk( - "pageSpeedMonitors/getPageSpeedMonitors", - async (token, thunkApi) => { - try { - const res = await axiosInstance.get("/monitors"); + const res = await networkService.createMonitor(authToken, monitor); return res.data; } catch (error) { if (error.response && error.response.data) { @@ -58,14 +33,16 @@ export const getPageSpeedByUserId = createAsyncThunk( async (token, thunkApi) => { const user = jwtDecode(token); try { - const res = await axiosInstance.get( - `/monitors/user/${user._id}?limit=25&type=pagespeed&sortOrder=desc`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } + const res = await networkService.getMonitorsByUserId( + token, + user._id, + 25, + ["pagespeed"], + null, + "desc", + false ); + return res.data; } catch (error) { if (error.response && error.response.data) { @@ -91,15 +68,10 @@ export const updatePageSpeed = createAsyncThunk( interval: monitor.interval, // notifications: monitor.notifications, }; - const res = await axiosInstance.put( - `/monitors/${monitor._id}`, - updatedFields, - { - headers: { - Authorization: `Bearer ${authToken}`, - "Content-Type": "application/json", - }, - } + const res = await networkService.updateMonitor( + authToken, + monitor._id, + updatedFields ); return res.data; } catch (error) { @@ -120,12 +92,10 @@ export const deletePageSpeed = createAsyncThunk( async (data, thunkApi) => { try { const { authToken, monitor } = data; - const res = await axiosInstance.delete(`/monitors/${monitor._id}`, { - headers: { - Authorization: `Bearer ${authToken}`, - "Content-Type": "application/json", - }, - }); + const res = await networkService.deleteMonitorById( + authToken, + monitor._id + ); return res.data; } catch (error) { if (error.response && error.response.data) { @@ -153,25 +123,6 @@ const pageSpeedMonitorSlice = createSlice({ }, extraReducers: (builder) => { builder - // ***************************************************** - // All Monitors - // ***************************************************** - .addCase(getPageSpeedMonitors.pending, (state) => { - state.isLoading = true; - }) - .addCase(getPageSpeedMonitors.fulfilled, (state, action) => { - state.isLoading = false; - state.success = action.payload.success; - state.msg = action.payload.msg; - state.monitors = action.payload.data; - }) - .addCase(getPageSpeedMonitors.rejected, (state, action) => { - state.isLoading = false; - state.success = false; - state.msg = action.payload - ? action.payload.msg - : "Getting montiors failed"; - }) // ***************************************************** // Monitors by userId // ***************************************************** diff --git a/Client/src/Features/UptimeMonitors/uptimeMonitorsSlice.js b/Client/src/Features/UptimeMonitors/uptimeMonitorsSlice.js index 27d616e1e..9ab7d385b 100644 --- a/Client/src/Features/UptimeMonitors/uptimeMonitorsSlice.js +++ b/Client/src/Features/UptimeMonitors/uptimeMonitorsSlice.js @@ -1,6 +1,6 @@ import { createAsyncThunk, createSlice } from "@reduxjs/toolkit"; import { jwtDecode } from "jwt-decode"; -import axiosInstance from "../../Utils/axiosConfig"; +import { networkService } from "../../main"; const initialState = { isLoading: false, monitors: [], @@ -13,32 +13,7 @@ export const createUptimeMonitor = createAsyncThunk( async (data, thunkApi) => { try { const { authToken, monitor } = data; - - const res = await axiosInstance.post(`/monitors`, monitor, { - headers: { - Authorization: `Bearer ${authToken}`, - "Content-Type": "application/json", - }, - }); - return res.data; - } catch (error) { - if (error.response && error.response.data) { - return thunkApi.rejectWithValue(error.response.data); - } - const payload = { - status: false, - msg: error.message ? error.message : "Unknown error", - }; - return thunkApi.rejectWithValue(payload); - } - } -); - -export const getUptimeMonitors = createAsyncThunk( - "monitors/getMonitors", - async (token, thunkApi) => { - try { - const res = await axiosInstance.get("/monitors"); + const res = await networkService.createMonitor(authToken, monitor); return res.data; } catch (error) { if (error.response && error.response.data) { @@ -58,13 +33,14 @@ export const getUptimeMonitorsByUserId = createAsyncThunk( async (token, thunkApi) => { const user = jwtDecode(token); try { - const res = await axiosInstance.get( - `/monitors/user/${user._id}?limit=25&type=http&type=ping&sortOrder=desc&normalize=true`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } + const res = await networkService.getMonitorsByUserId( + token, + user._id, + 25, + ["http", "ping"], + null, + "desc", + true ); return res.data; } catch (error) { @@ -91,15 +67,10 @@ export const updateUptimeMonitor = createAsyncThunk( interval: monitor.interval, notifications: monitor.notifications, }; - const res = await axiosInstance.put( - `/monitors/${monitor._id}`, - updatedFields, - { - headers: { - Authorization: `Bearer ${authToken}`, - "Content-Type": "application/json", - }, - } + const res = await networkService.updateMonitor( + authToken, + monitor._id, + updatedFields ); return res.data; } catch (error) { @@ -120,12 +91,10 @@ export const deleteUptimeMonitor = createAsyncThunk( async (data, thunkApi) => { try { const { authToken, monitor } = data; - const res = await axiosInstance.delete(`/monitors/${monitor._id}`, { - headers: { - Authorization: `Bearer ${authToken}`, - "Content-Type": "application/json", - }, - }); + const res = await networkService.deleteMonitorById( + authToken, + monitor._id + ); return res.data; } catch (error) { if (error.response && error.response.data) { @@ -153,25 +122,6 @@ const uptimeMonitorsSlice = createSlice({ }, extraReducers: (builder) => { builder - // ***************************************************** - // All Monitors - // ***************************************************** - .addCase(getUptimeMonitors.pending, (state) => { - state.isLoading = true; - }) - .addCase(getUptimeMonitors.fulfilled, (state, action) => { - state.isLoading = false; - state.success = action.payload.success; - state.msg = action.payload.msg; - state.monitors = action.payload.data; - }) - .addCase(getUptimeMonitors.rejected, (state, action) => { - state.isLoading = false; - state.success = false; - state.msg = action.payload - ? action.payload.msg - : "Getting uptime monitors failed"; - }) // ***************************************************** // Monitors by userId // ***************************************************** diff --git a/Client/src/HOC/withAdminCheck.jsx b/Client/src/HOC/withAdminCheck.jsx index 23ee5dc1f..30a767f36 100644 --- a/Client/src/HOC/withAdminCheck.jsx +++ b/Client/src/HOC/withAdminCheck.jsx @@ -1,21 +1,23 @@ import React, { useEffect } from "react"; import { useNavigate } from "react-router-dom"; -import axiosInstance from "../Utils/axiosConfig"; + +import { logger } from "../Utils/Logger"; +import { networkService } from "../main"; const withAdminCheck = (WrappedComponent) => { const WithAdminCheck = (props) => { const navigate = useNavigate(); useEffect(() => { - axiosInstance - .get("/auth/users/admin") + networkService + .doesAdminExist() .then((response) => { if (response.data.data === true) { navigate("/login"); } }) .catch((error) => { - console.log(error); + logger.error(error); }); }, [navigate]); return ; diff --git a/Client/src/Pages/Auth/Login.jsx b/Client/src/Pages/Auth/Login.jsx index a928347b0..79e8d7e12 100644 --- a/Client/src/Pages/Auth/Login.jsx +++ b/Client/src/Pages/Auth/Login.jsx @@ -7,14 +7,14 @@ import { login } from "../../Features/Auth/authSlice"; import { useDispatch, useSelector } from "react-redux"; import { createToast } from "../../Utils/toastUtils"; import Button from "../../Components/Button"; -import axiosInstance from "../../Utils/axiosConfig"; +import { networkService } from "../../main"; import Field from "../../Components/Inputs/Field"; import background from "../../assets/Images/background_pattern_decorative.png"; import Logo from "../../assets/icons/bwu-icon.svg?react"; import Mail from "../../assets/icons/mail.svg?react"; import ArrowBackRoundedIcon from "@mui/icons-material/ArrowBackRounded"; import PropTypes from "prop-types"; - +import { logger } from "../../Utils/Logger"; import "./index.css"; /** @@ -276,15 +276,15 @@ const Login = () => { navigate("/monitors"); return; } - axiosInstance - .get("/auth/users/admin") + networkService + .doesAdminExist() .then((response) => { if (response.data.data === false) { navigate("/register"); } }) .catch((error) => { - console.log(error); + logger.error(error); }); }, [authToken, navigate]); diff --git a/Client/src/Pages/Auth/Register/Register.jsx b/Client/src/Pages/Auth/Register/Register.jsx index 30b439f16..225fb16f0 100644 --- a/Client/src/Pages/Auth/Register/Register.jsx +++ b/Client/src/Pages/Auth/Register/Register.jsx @@ -15,8 +15,9 @@ import ArrowBackRoundedIcon from "@mui/icons-material/ArrowBackRounded"; import Check from "../../../Components/Check/Check"; import Button from "../../../Components/Button"; import Field from "../../../Components/Inputs/Field"; -import axiosInstance from "../../../Utils/axiosConfig"; +import { networkService } from "../../../main"; import "../index.css"; +import { logger } from "../../../Utils/Logger"; /** * Displays the initial landing page. @@ -397,14 +398,11 @@ const Register = ({ isAdmin }) => { const fetchInvite = async () => { if (token !== undefined) { try { - const res = await axiosInstance.post(`/auth/invite/verify`, { - token, - }); + const res = await networkService.verifyInvitationToken(token); const { role, email } = res.data.data; - console.log(role); setForm({ ...form, email, role }); } catch (error) { - console.log(error); + logger.error(error); } } }; diff --git a/Client/src/Pages/Incidents/IncidentTable/index.jsx b/Client/src/Pages/Incidents/IncidentTable/index.jsx index 44a30decc..705daa70c 100644 --- a/Client/src/Pages/Incidents/IncidentTable/index.jsx +++ b/Client/src/Pages/Incidents/IncidentTable/index.jsx @@ -18,8 +18,9 @@ import ArrowForwardRoundedIcon from "@mui/icons-material/ArrowForwardRounded"; import { useState, useEffect } from "react"; import { useSelector } from "react-redux"; -import axiosInstance from "../../../Utils/axiosConfig"; +import { networkService } from "../../../main"; import { StatusLabel } from "../../../Components/Label"; +import { logger } from "../../../Utils/Logger"; const IncidentTable = ({ monitors, selectedMonitor, filter }) => { const { authToken, user } = useSelector((state) => state.auth); @@ -43,21 +44,34 @@ const IncidentTable = ({ monitors, selectedMonitor, filter }) => { return; } try { - let url = `/checks/${selectedMonitor}?sortOrder=desc&filter=${filter}&page=${paginationController.page}&rowsPerPage=${paginationController.rowsPerPage}`; - + let res; if (selectedMonitor === "0") { - url = `/checks/user/${user._id}?sortOrder=desc&filter=${filter}&page=${paginationController.page}&rowsPerPage=${paginationController.rowsPerPage}`; + res = await networkService.getChecksByUser( + authToken, + user._id, + "desc", + null, + null, + filter, + paginationController.page, + paginationController.rowsPerPage + ); + } else { + res = await networkService.getChecksByMonitor( + authToken, + selectedMonitor, + "desc", + null, + null, + filter, + paginationController.page, + paginationController.rowsPerPage + ); } - - const res = await axiosInstance.get(url, { - headers: { - Authorization: `Bearer ${authToken}`, - }, - }); setChecks(res.data.data.checks); setChecksCount(res.data.data.checksCount); } catch (error) { - console.log(error); + logger.error(error); } }; fetchPage(); @@ -72,7 +86,6 @@ const IncidentTable = ({ monitors, selectedMonitor, filter }) => { ]); const handlePageChange = (_, newPage) => { - console.log(newPage); setPaginationController({ ...paginationController, page: newPage - 1, // 0-indexed diff --git a/Client/src/Pages/Incidents/index.jsx b/Client/src/Pages/Incidents/index.jsx index f9d53f7c0..34768f7f9 100644 --- a/Client/src/Pages/Incidents/index.jsx +++ b/Client/src/Pages/Incidents/index.jsx @@ -2,7 +2,7 @@ import { useState, useEffect } from "react"; import { useSelector } from "react-redux"; import { ButtonGroup, Stack, Skeleton, Typography } from "@mui/material"; import Button from "../../Components/Button"; -import axiosInstance from "../../Utils/axiosConfig"; +import { networkService } from "../../main"; import { useTheme } from "@emotion/react"; import Select from "../../Components/Inputs/Select"; import IncidentTable from "./IncidentTable"; @@ -48,13 +48,14 @@ const Incidents = () => { useEffect(() => { const fetchMonitors = async () => { setLoading(true); - const res = await axiosInstance.get( - `/monitors/user/${authState.user._id}?status=false&limit=1`, - { - headers: { - Authorization: `Bearer ${authState.authToken}`, - }, - } + const res = await networkService.getMonitorsByUserId( + authState.authToken, + authState.user._id, + 1, + null, + null, + null, + null ); // Reduce to a lookup object for 0(1) lookup diff --git a/Client/src/Pages/Monitors/Configure/index.jsx b/Client/src/Pages/Monitors/Configure/index.jsx index c873482a9..6b809433d 100644 --- a/Client/src/Pages/Monitors/Configure/index.jsx +++ b/Client/src/Pages/Monitors/Configure/index.jsx @@ -19,6 +19,7 @@ import { import Checkbox from "../../../Components/Inputs/Checkbox"; import Breadcrumbs from "../../../Components/Breadcrumbs"; import "./index.css"; +import { logger } from "../../../Utils/Logger"; /** * Parses a URL string and returns a URL object. @@ -108,13 +109,13 @@ const Configure = () => { useEffect(() => { const data = monitors.find((monitor) => monitor._id === monitorId); if (!data) { - console.error("Error fetching monitor of id: " + monitorId); - navigate("/not-found"); + logger.error("Error fetching monitor of id: " + monitorId); + navigate("/not-found", { replace: true }); } setMonitor({ ...data, }); - }, [monitorId, authToken, monitors]); + }, [monitorId, authToken, monitors, navigate]); const handleChange = (event, name) => { let { value, id } = event.target; @@ -337,7 +338,7 @@ const Configure = () => { label="Notify via SMS (coming soon)" isChecked={false} value="" - onChange={() => console.log("disabled")} + onChange={() => logger.warn("disabled")} isDisabled={true} /> { label="Also notify via email to multiple addresses (coming soon)" isChecked={false} value="" - onChange={() => console.log("disabled")} + onChange={() => logger.warn("disabled")} isDisabled={true} /> {monitor?.notifications?.some( @@ -368,7 +369,7 @@ const Configure = () => { type="text" placeholder="name@gmail.com" value="" - onChange={() => console.log("disabled")} + onChange={() => logger.warn("disabled")} /> You can separate multiple emails with a comma diff --git a/Client/src/Pages/Monitors/CreateMonitor/index.jsx b/Client/src/Pages/Monitors/CreateMonitor/index.jsx index d0eafb476..442558f8e 100644 --- a/Client/src/Pages/Monitors/CreateMonitor/index.jsx +++ b/Client/src/Pages/Monitors/CreateMonitor/index.jsx @@ -13,6 +13,7 @@ import Select from "../../../Components/Inputs/Select"; import Checkbox from "../../../Components/Inputs/Checkbox"; import { createToast } from "../../../Utils/toastUtils"; import Breadcrumbs from "../../../Components/Breadcrumbs"; +import { logger } from "../../../Utils/Logger"; const CreateMonitor = () => { const MS_PER_MINUTE = 60000; @@ -267,7 +268,7 @@ const CreateMonitor = () => { label="Notify via SMS (coming soon)" isChecked={false} value="" - onChange={() => console.log("disabled")} + onChange={() => logger.warn("disabled")} isDisabled={true} /> { label="Also notify via email to multiple addresses (coming soon)" isChecked={false} value="" - onChange={() => console.log("disabled")} + onChange={() => logger.warn("disabled")} isDisabled={true} /> {monitor.notifications.some( @@ -296,7 +297,7 @@ const CreateMonitor = () => { type="text" placeholder="name@gmail.com" value="" - onChange={() => console.log("disabled")} + onChange={() => logger.warn("disabled")} /> You can separate multiple emails with a comma diff --git a/Client/src/Pages/Monitors/Details/PaginationTable/index.jsx b/Client/src/Pages/Monitors/Details/PaginationTable/index.jsx index 28a668977..da4a0cb1e 100644 --- a/Client/src/Pages/Monitors/Details/PaginationTable/index.jsx +++ b/Client/src/Pages/Monitors/Details/PaginationTable/index.jsx @@ -13,10 +13,11 @@ import { import { useState, useEffect } from "react"; import { useSelector } from "react-redux"; -import axiosInstance from "../../../../Utils/axiosConfig"; +import { networkService } from "../../../../main"; import { StatusLabel } from "../../../../Components/Label"; import ArrowBackRoundedIcon from "@mui/icons-material/ArrowBackRounded"; import ArrowForwardRoundedIcon from "@mui/icons-material/ArrowForwardRounded"; +import { logger } from "../../../../Utils/Logger"; const PaginationTable = ({ monitorId, dateRange }) => { const { authToken } = useSelector((state) => state.auth); @@ -37,18 +38,20 @@ const PaginationTable = ({ monitorId, dateRange }) => { useEffect(() => { const fetchPage = async () => { try { - const res = await axiosInstance.get( - `/checks/${monitorId}?sortOrder=desc&dateRange=${dateRange}&page=${paginationController.page}&rowsPerPage=${paginationController.rowsPerPage}`, - { - headers: { - Authorization: `Bearer ${authToken}`, - }, - } + const res = await networkService.getChecksByMonitor( + authToken, + monitorId, + "desc", + null, + dateRange, + null, + paginationController.page, + paginationController.rowsPerPage ); setChecks(res.data.data.checks); setChecksCount(res.data.data.checksCount); } catch (error) { - console.log(error); + logger.error(error); } }; fetchPage(); diff --git a/Client/src/Pages/Monitors/Details/index.jsx b/Client/src/Pages/Monitors/Details/index.jsx index f7b13a0e8..7a04a24e2 100644 --- a/Client/src/Pages/Monitors/Details/index.jsx +++ b/Client/src/Pages/Monitors/Details/index.jsx @@ -3,7 +3,7 @@ import PropTypes from "prop-types"; import { Box, Skeleton, Stack, Typography, useTheme } from "@mui/material"; import { useSelector } from "react-redux"; import { useNavigate, useParams } from "react-router-dom"; -import axiosInstance from "../../../Utils/axiosConfig"; +import { networkService } from "../../../main"; import MonitorDetailsAreaChart from "../../../Components/Charts/MonitorDetailsAreaChart"; import ButtonGroup from "@mui/material/ButtonGroup"; import Button from "../../../Components/Button"; @@ -17,6 +17,7 @@ import { } from "../../../Utils/timeUtils"; import "./index.css"; import Breadcrumbs from "../../../Components/Breadcrumbs"; +import { logger } from "../../../Utils/Logger"; const StatBox = ({ title, value }) => { return ( @@ -120,19 +121,19 @@ const DetailsPage = () => { const fetchMonitor = useCallback(async () => { try { - const res = await axiosInstance.get( - `/monitors/stats/${monitorId}?dateRange=${dateRange}&numToDisplay=50&normalize=true`, - { - headers: { - Authorization: `Bearer ${authToken}`, - }, - } + const res = await networkService.getStatsByMonitorId( + authToken, + monitorId, + null, + null, + dateRange, + 50, + true ); setMonitor(res?.data?.data ?? {}); } catch (error) { - console.error(error); - - navigate("/not-found"); + logger.error(error); + navigate("/not-found", { replace: true }); } }, [authToken, monitorId, navigate, dateRange]); @@ -143,18 +144,15 @@ const DetailsPage = () => { useEffect(() => { const fetchCertificate = async () => { try { - const res = await axiosInstance.get( - `/monitors/certificate/${monitorId}`, - { - headers: { - Authorization: `Bearer ${authToken}`, - }, - } - ); - setCertificateExpiry(res?.data?.data?.certificateDate ?? "N/A"); + const res = await networkService.getCertificateExpiry( + authToken, + monitorId + ); + setCertificateExpiry(res?.data?.data?.certificateDate ?? "N/A"); } catch (error) { console.error(error); } + }; fetchCertificate(); }, [authToken, monitorId]); diff --git a/Client/src/Pages/Monitors/index.jsx b/Client/src/Pages/Monitors/index.jsx index 1b541c72b..c33cf16dc 100644 --- a/Client/src/Pages/Monitors/index.jsx +++ b/Client/src/Pages/Monitors/index.jsx @@ -28,6 +28,7 @@ import { import Settings from "../../assets/icons/settings-bold.svg?react"; import PropTypes from "prop-types"; +import { logger } from "../../Utils/Logger"; const ActionsMenu = ({ monitor }) => { const [anchorEl, setAnchorEl] = useState(null); @@ -36,7 +37,6 @@ const ActionsMenu = ({ monitor }) => { const dispatch = useDispatch(); const theme = useTheme(); const authState = useSelector((state) => state.auth); - const handleRemove = async (event) => { event.preventDefault(); event.stopPropagation(); diff --git a/Client/src/Pages/PageSpeed/Configure/index.jsx b/Client/src/Pages/PageSpeed/Configure/index.jsx index 0dff8d7eb..1cb164fcf 100644 --- a/Client/src/Pages/PageSpeed/Configure/index.jsx +++ b/Client/src/Pages/PageSpeed/Configure/index.jsx @@ -18,6 +18,7 @@ import PauseCircleOutlineIcon from "@mui/icons-material/PauseCircleOutline"; import GreenCheck from "../../../assets/icons/checkbox-green.svg?react"; import RedCheck from "../../../assets/icons/checkbox-red.svg?react"; import Breadcrumbs from "../../../Components/Breadcrumbs"; +import { logger } from "../../../Utils/Logger"; import "./index.css"; @@ -92,8 +93,8 @@ const PageSpeedConfigure = () => { useEffect(() => { const data = monitors.find((monitor) => monitor._id === monitorId); if (!data) { - console.error("Error fetching pagespeed monitor of id: " + monitorId); - navigate("/not-found"); + logger.error("Error fetching pagespeed monitor of id: " + monitorId); + navigate("/not-found", { replace: true }); } setMonitor({ ...data, @@ -278,7 +279,7 @@ const PageSpeedConfigure = () => { id="notify-emails-list" placeholder="notifications@gmail.com" value="" - onChange={() => console.log("disabled")} + onChange={() => logger.warn("disabled")} error="" /> diff --git a/Client/src/Pages/PageSpeed/CreatePageSpeed/index.jsx b/Client/src/Pages/PageSpeed/CreatePageSpeed/index.jsx index 6b9e6dbde..c707db319 100644 --- a/Client/src/Pages/PageSpeed/CreatePageSpeed/index.jsx +++ b/Client/src/Pages/PageSpeed/CreatePageSpeed/index.jsx @@ -12,6 +12,7 @@ import { createToast } from "../../../Utils/toastUtils"; import { createPageSpeed } from "../../../Features/PageSpeedMonitor/pageSpeedMonitorSlice"; import Breadcrumbs from "../../../Components/Breadcrumbs"; import "./index.css"; +import { logger } from "../../../Utils/Logger"; const CreatePageSpeed = () => { const theme = useTheme(); @@ -175,7 +176,7 @@ const CreatePageSpeed = () => { id="notify-emails-list" placeholder="notifications@gmail.com" value="" - onChange={() => console.log("disabled")} + onChange={() => logger.warn("disabled")} error="" /> diff --git a/Client/src/Pages/PageSpeed/Details/index.jsx b/Client/src/Pages/PageSpeed/Details/index.jsx index 8ed0ec5c2..41f5892f2 100644 --- a/Client/src/Pages/PageSpeed/Details/index.jsx +++ b/Client/src/Pages/PageSpeed/Details/index.jsx @@ -9,7 +9,7 @@ import { formatDuration, formatDurationRounded, } from "../../../Utils/timeUtils"; -import axiosInstance from "../../../Utils/axiosConfig"; +import { networkService } from "../../../main"; import Button from "../../../Components/Button"; import SettingsIcon from "../../../assets/icons/settings-bold.svg?react"; import LastCheckedIcon from "../../../assets/icons/calendar-check.svg?react"; @@ -21,6 +21,7 @@ import PageSpeedLineChart from "../../../Components/Charts/PagespeedLineChart"; import Breadcrumbs from "../../../Components/Breadcrumbs"; import "./index.css"; import PropTypes from "prop-types"; +import { logger } from "../../../Utils/Logger"; const StatBox = ({ icon, title, value }) => { const theme = useTheme(); @@ -198,20 +199,20 @@ const PageSpeedDetails = () => { useEffect(() => { const fetchMonitor = async () => { try { - const res = await axiosInstance.get( - `/monitors/stats/${monitorId}?sortOrder=desc&limit=50`, - { - headers: { - Authorization: `Bearer ${authToken}`, - }, - } + const res = await networkService.getStatsByMonitorId( + authToken, + monitorId, + "desc", + 50, + null, + null, + null ); - setMonitor(res?.data?.data ?? {}); setAudits(res?.data?.data?.checks?.[0]?.audits ?? []); } catch (error) { - console.log(error); - navigate("/not-found"); + logger.error(logger); + navigate("/not-found", { replace: true }); } }; diff --git a/Client/src/Pages/Settings/index.jsx b/Client/src/Pages/Settings/index.jsx index 3ee029675..2b6f40682 100644 --- a/Client/src/Pages/Settings/index.jsx +++ b/Client/src/Pages/Settings/index.jsx @@ -4,7 +4,7 @@ import Button from "../../Components/Button"; import Field from "../../Components/Inputs/Field"; import Link from "../../Components/Link"; import Select from "../../Components/Inputs/Select"; - +import { logger } from "../../Utils/Logger"; import "./index.css"; const Settings = () => { @@ -40,14 +40,14 @@ const Settings = () => { id="display-timezone" label="Display timezone" value="est" - onChange={() => console.log("disabled")} + onChange={() => logger.warn("disabled")} items={[{ _id: "est", name: "America / Toronto" }]} />