From f148e2d9ad9bf49b2b8f0d60789de48ab1f5ff8f Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Fri, 6 Dec 2024 14:25:11 +0800 Subject: [PATCH 01/18] Refactor Create PageSpeed --- .../Pages/PageSpeed/CreatePageSpeed/index.jsx | 313 ++++++++---------- 1 file changed, 142 insertions(+), 171 deletions(-) diff --git a/Client/src/Pages/PageSpeed/CreatePageSpeed/index.jsx b/Client/src/Pages/PageSpeed/CreatePageSpeed/index.jsx index ba3a7bb4a..6823cfe21 100644 --- a/Client/src/Pages/PageSpeed/CreatePageSpeed/index.jsx +++ b/Client/src/Pages/PageSpeed/CreatePageSpeed/index.jsx @@ -1,42 +1,52 @@ +// React, Redux, Router +import { useNavigate, useParams } from "react-router-dom"; +import { useEffect } from "react"; import { useState } from "react"; -import { Box, Button, ButtonGroup, Stack, Typography } from "@mui/material"; -import LoadingButton from "@mui/lab/LoadingButton"; import { useSelector, useDispatch } from "react-redux"; + +// Utility and Network +import { logger } from "../../../Utils/Logger"; import { monitorValidation } from "../../../Validation/validation"; -import { useNavigate } from "react-router-dom"; -import { useTheme } from "@emotion/react"; import { createPageSpeed, checkEndpointResolution, } from "../../../Features/PageSpeedMonitor/pageSpeedMonitorSlice"; -import { createToast } from "../../../Utils/toastUtils"; -import { logger } from "../../../Utils/Logger"; -import { ConfigBox } from "../../Monitors/styled"; -import Radio from "../../../Components/Inputs/Radio"; +import { parseDomainName } from "../../../Utils/monitorUtils"; + +// MUI +import { useTheme } from "@emotion/react"; +import { Box, Stack, Typography, Button, ButtonGroup } from "@mui/material"; +import LoadingButton from "@mui/lab/LoadingButton"; + +//Components +import Breadcrumbs from "../../../Components/Breadcrumbs"; import TextInput from "../../../Components/Inputs/TextInput"; import { HttpAdornment } from "../../../Components/Inputs/TextInput/Adornments"; -import Select from "../../../Components/Inputs/Select"; +import { ConfigBox } from "../../Monitors/styled"; + +import { createToast } from "../../../Utils/toastUtils"; +import Radio from "../../../Components/Inputs/Radio"; import Checkbox from "../../../Components/Inputs/Checkbox"; -import Breadcrumbs from "../../../Components/Breadcrumbs"; -import { parseDomainName } from "../../../Utils/monitorUtils"; -import "./index.css"; +import Select from "../../../Components/Inputs/Select"; const CreatePageSpeed = () => { const MS_PER_MINUTE = 60000; - const { user, authToken } = useSelector((state) => state.auth); - const { isLoading } = useSelector((state) => state.pageSpeedMonitors); - const dispatch = useDispatch(); - const navigate = useNavigate(); - const theme = useTheme(); - const idMap = { - "monitor-url": "url", - "monitor-name": "name", - "monitor-checks-http": "type", - "monitor-checks-ping": "type", - "notify-email-default": "notification-email", - }; + const CRUMBS = [ + { name: "pagespeed", path: "/pagespeed" }, + { name: "create", path: `/pagespeed/create` }, + ]; + const SELECT_VALUES = [ + { _id: 3, name: "3 minutes" }, + { _id: 5, name: "5 minutes" }, + { _id: 10, name: "10 minutes" }, + { _id: 20, name: "20 minutes" }, + { _id: 60, name: "1 hour" }, + { _id: 1440, name: "1 day" }, + { _id: 10080, name: "1 week" }, + ]; + // State const [monitor, setMonitor] = useState({ url: "", name: "", @@ -44,71 +54,20 @@ const CreatePageSpeed = () => { notifications: [], interval: 3, }); + const [https, setHttps] = useState(true); const [errors, setErrors] = useState({}); + const { user, authToken } = useSelector((state) => state.auth); + const { isLoading } = useSelector((state) => state.pageSpeedMonitors); - const handleChange = (event, name) => { - const { value, id } = event.target; - if (!name) name = idMap[id]; - - if (name.includes("notification-")) { - name = name.replace("notification-", ""); - let hasNotif = monitor.notifications.some( - (notification) => notification.type === name - ); - setMonitor((prev) => { - const notifs = [...prev.notifications]; - if (hasNotif) { - return { - ...prev, - notifications: notifs.filter((notif) => notif.type !== name), - }; - } else { - return { - ...prev, - notifications: [ - ...notifs, - name === "email" - ? { type: name, address: value } - : // TODO - phone number - { type: name, phone: value }, - ], - }; - } - }); - } else { - setMonitor((prev) => ({ - ...prev, - [name]: value, - })); - - const { error } = monitorValidation.validate( - { [name]: value }, - { abortEarly: false } - ); - - setErrors((prev) => { - const updatedErrors = { ...prev }; - if (error) updatedErrors[name] = error.details[0].message; - else delete updatedErrors[name]; - return updatedErrors; - }); - } - }; - - const onUrlBlur = (event) => { - const { value } = event.target; - if (monitor.name === "") { - setMonitor((prev) => ({ - ...prev, - name: parseDomainName(value), - })); - } - }; + // Setup + const dispatch = useDispatch(); + const navigate = useNavigate(); + const theme = useTheme(); + // Handlers const handleCreateMonitor = async (event) => { event.preventDefault(); - //obj to submit let form = { url: `http${https ? "s" : ""}://` + monitor.url, name: monitor.name === "" ? monitor.url : monitor.name, @@ -126,46 +85,98 @@ const CreatePageSpeed = () => { newErrors[err.path[0]] = err.message; }); setErrors(newErrors); - createToast({ body: "Error validation data." }); - } else { - const checkEndpointAction = await dispatch( - checkEndpointResolution({ authToken, monitorURL: form.url }) - ); - if (checkEndpointAction.meta.requestStatus === "rejected") { - createToast({ - body: "The endpoint you entered doesn't resolve. Check the URL again.", - }); - setErrors({ url: "The entered URL is not reachable." }); - return; - } + createToast({ body: "Please check the form for errors." }); + return; + } - form = { - ...form, - description: form.name, - teamId: user.teamId, - userId: user._id, - notifications: monitor.notifications, - }; - const action = await dispatch(createPageSpeed({ authToken, monitor: form })); - if (action.meta.requestStatus === "fulfilled") { - createToast({ body: "Monitor created successfully!" }); - navigate("/pagespeed"); - } else { - createToast({ body: "Failed to create monitor." }); - } + const checkEndpointAction = await dispatch( + checkEndpointResolution({ authToken, monitorURL: form.url }) + ); + + if (checkEndpointAction.meta.requestStatus === "rejected") { + createToast({ + body: "The endpoint you entered doesn't resolve. Check the URL again.", + }); + setErrors({ url: "The entered URL is not reachable." }); + return; + } + + form = { + ...form, + description: form.name, + teamId: user.teamId, + userId: user._id, + notifications: monitor.notifications, + }; + + const action = await dispatch(createPageSpeed({ authToken, monitor: form })); + if (action.meta.requestStatus === "fulfilled") { + createToast({ body: "Monitor created successfully!" }); + navigate("/pagespeed"); + } else { + createToast({ body: "Failed to create monitor." }); + } + }; + + const handleChange = (event, formItemName) => { + const { value } = event.target; + setMonitor({ + ...monitor, + [formItemName]: value, + }); + + const { error } = monitorValidation.validate( + { [formItemName]: value }, + { abortEarly: false } + ); + + setErrors((prev) => ({ + ...prev, + ...(error + ? { [formItemName]: error.details[0].message } + : { [formItemName]: undefined }), + })); + }; + + const handleNotifications = (event, type) => { + const { value } = event.target; + let notifications = [...monitor.notifications]; + const notificationExists = notifications.some((notification) => { + if (notification.type === type && notification.address === value) { + return true; + } + return false; + }); + if (notificationExists) { + notifications = notifications.filter((notification) => { + if (notification.type === type && notification.address === value) { + return false; + } + return true; + }); + } else { + notifications.push({ type, address: value }); + } + + setMonitor((prev) => ({ + ...prev, + notifications, + })); + }; + + const handleBlur = (event, formItemName) => { + if (formItemName === "url") { + const { value } = event.target; + if (monitor.name !== "") { + return; + } + setMonitor((prev) => ({ + ...prev, + name: parseDomainName(value), + })); } }; - //select values - const frequencies = [ - { _id: 3, name: "3 minutes" }, - { _id: 5, name: "5 minutes" }, - { _id: 10, name: "10 minutes" }, - { _id: 20, name: "20 minutes" }, - { _id: 60, name: "1 hour" }, - { _id: 1440, name: "1 day" }, - { _id: 10080, name: "1 week" }, - ]; return ( { }, }} > - + { fontWeight="inherit" color={theme.palette.text.secondary} > - pagespeed monitor + PageSpeed monitor @@ -224,8 +230,8 @@ const CreatePageSpeed = () => { startAdornment={} placeholder="google.com" value={monitor.url} - onChange={handleChange} - onBlur={onUrlBlur} + onChange={(event) => handleChange(event, "url")} + onBlur={(event) => handleBlur(event, "url")} error={errors["url"] ? true : false} helperText={errors["url"]} /> @@ -236,7 +242,7 @@ const CreatePageSpeed = () => { isOptional={true} placeholder="Google" value={monitor.name} - onChange={handleChange} + onChange={(event) => handleChange(event, "name")} error={errors["name"] ? true : false} helperText={errors["name"]} /> @@ -253,8 +259,8 @@ const CreatePageSpeed = () => { { HTTPS + + + { placeholder="Google" isOptional={true} value={infrastructureMonitor.name} - onBlur={handleBlur} - onChange={handleChange} + onChange={(event) => handleChange(event, "name")} error={errors["name"]} /> { id="secret" label="Authorization secret" value={infrastructureMonitor.secret} - onBlur={handleBlur} - onChange={handleChange} + onChange={(event) => handleChange(event, "secret")} error={errors["secret"] ? true : false} helperText={errors["secret"]} /> @@ -311,12 +342,11 @@ const CreateInfrastructureMonitor = () => { (notification) => notification.type === "email" )} value={user?.email} - onChange={(e) => handleChange(e)} + onChange={(event) => handleNotifications(event, "email")} onBlur={handleBlur} /> - Customize alerts @@ -326,25 +356,30 @@ const CreateInfrastructureMonitor = () => { - {HARDWARE_MONITOR_TYPES.map((type, idx) => ( - - ))} - {alertErrKeyLen > 0 && ( + {METRICS.map((metric) => { + return ( + handleCheckboxChange(event, metric)} + isChecked={infrastructureMonitor[metric]} + fieldId={METRIC_PREFIX + metric} + fieldValue={infrastructureMonitor[METRIC_PREFIX + metric]} + onFieldChange={(event) => handleChange(event, METRIC_PREFIX + metric)} + onFieldBlur={(event) => handleBlur(event, METRIC_PREFIX + metric)} + alertUnit={metric == "temperature" ? "°C" : "%"} + /> + ); + })} + {/* Error text */} + {hasAlertError(errors) && ( { opacity: 0.8, }} > - { - errors[ - THRESHOLD_FIELD_PREFIX + - HARDWARE_MONITOR_TYPES.filter( - (type) => errors[THRESHOLD_FIELD_PREFIX + type] - )[0] - ] - } + {getAlertError(errors)} )} @@ -377,7 +405,7 @@ const CreateInfrastructureMonitor = () => { value={infrastructureMonitor.interval || 15} onChange={(e) => handleChange(e, "interval")} onBlur={(e) => handleBlur(e, "interval")} - items={frequencies} + items={SELECT_VALUES} /> From b306a4ac7b97c9adede6501775d51b99753beba4 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Tue, 10 Dec 2024 11:17:17 +0800 Subject: [PATCH 05/18] Add name to all inputs, use event.target.name instead of passing extra variable --- .../Pages/PageSpeed/CreatePageSpeed/index.jsx | 66 +++++++++---------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/Client/src/Pages/PageSpeed/CreatePageSpeed/index.jsx b/Client/src/Pages/PageSpeed/CreatePageSpeed/index.jsx index 6823cfe21..ccab3442f 100644 --- a/Client/src/Pages/PageSpeed/CreatePageSpeed/index.jsx +++ b/Client/src/Pages/PageSpeed/CreatePageSpeed/index.jsx @@ -1,11 +1,9 @@ // React, Redux, Router -import { useNavigate, useParams } from "react-router-dom"; -import { useEffect } from "react"; +import { useNavigate } from "react-router-dom"; import { useState } from "react"; import { useSelector, useDispatch } from "react-redux"; // Utility and Network -import { logger } from "../../../Utils/Logger"; import { monitorValidation } from "../../../Validation/validation"; import { createPageSpeed, @@ -29,23 +27,24 @@ import Radio from "../../../Components/Inputs/Radio"; import Checkbox from "../../../Components/Inputs/Checkbox"; import Select from "../../../Components/Inputs/Select"; +const MS_PER_MINUTE = 60000; + +const CRUMBS = [ + { name: "pagespeed", path: "/pagespeed" }, + { name: "create", path: `/pagespeed/create` }, +]; + +const SELECT_VALUES = [ + { _id: 3, name: "3 minutes" }, + { _id: 5, name: "5 minutes" }, + { _id: 10, name: "10 minutes" }, + { _id: 20, name: "20 minutes" }, + { _id: 60, name: "1 hour" }, + { _id: 1440, name: "1 day" }, + { _id: 10080, name: "1 week" }, +]; + const CreatePageSpeed = () => { - const MS_PER_MINUTE = 60000; - - const CRUMBS = [ - { name: "pagespeed", path: "/pagespeed" }, - { name: "create", path: `/pagespeed/create` }, - ]; - - const SELECT_VALUES = [ - { _id: 3, name: "3 minutes" }, - { _id: 5, name: "5 minutes" }, - { _id: 10, name: "10 minutes" }, - { _id: 20, name: "20 minutes" }, - { _id: 60, name: "1 hour" }, - { _id: 1440, name: "1 day" }, - { _id: 10080, name: "1 week" }, - ]; // State const [monitor, setMonitor] = useState({ url: "", @@ -118,23 +117,21 @@ const CreatePageSpeed = () => { } }; - const handleChange = (event, formItemName) => { - const { value } = event.target; + const handleChange = (event) => { + const { value, name } = event.target; setMonitor({ ...monitor, - [formItemName]: value, + [name]: value, }); const { error } = monitorValidation.validate( - { [formItemName]: value }, + { [name]: value }, { abortEarly: false } ); setErrors((prev) => ({ ...prev, - ...(error - ? { [formItemName]: error.details[0].message } - : { [formItemName]: undefined }), + ...(error ? { [name]: error.details[0].message } : { [name]: undefined }), })); }; @@ -164,8 +161,9 @@ const CreatePageSpeed = () => { })); }; - const handleBlur = (event, formItemName) => { - if (formItemName === "url") { + const handleBlur = (event) => { + const { name } = event.target; + if (name === "url") { const { value } = event.target; if (monitor.name !== "") { return; @@ -225,24 +223,26 @@ const CreatePageSpeed = () => { } placeholder="google.com" value={monitor.url} - onChange={(event) => handleChange(event, "url")} - onBlur={(event) => handleBlur(event, "url")} + onChange={handleChange} + onBlur={handleBlur} error={errors["url"] ? true : false} helperText={errors["url"]} /> handleChange(event, "name")} + onChange={handleChange} error={errors["name"] ? true : false} helperText={errors["name"]} /> @@ -264,7 +264,6 @@ const CreatePageSpeed = () => { size="small" value="http" checked={monitor.type === "pagespeed"} - onChange={(event) => handleChange(event)} /> )} + {noMonitors && } {loading ? ( @@ -77,20 +79,20 @@ const Monitors = ({ isAdmin }) => { > @@ -101,7 +103,7 @@ const Monitors = ({ isAdmin }) => { ); }; -Monitors.propTypes = { +UptimeMonitors.propTypes = { isAdmin: PropTypes.bool, }; -export default Monitors; +export default UptimeMonitors; diff --git a/Client/src/Pages/Monitors/Home/skeleton.jsx b/Client/src/Pages/Uptime/Home/skeleton.jsx similarity index 100% rename from Client/src/Pages/Monitors/Home/skeleton.jsx rename to Client/src/Pages/Uptime/Home/skeleton.jsx diff --git a/Client/src/Pages/Monitors/styled.jsx b/Client/src/Pages/Uptime/styled.jsx similarity index 100% rename from Client/src/Pages/Monitors/styled.jsx rename to Client/src/Pages/Uptime/styled.jsx diff --git a/Client/src/Pages/Monitors/utils.jsx b/Client/src/Pages/Uptime/utils.jsx similarity index 100% rename from Client/src/Pages/Monitors/utils.jsx rename to Client/src/Pages/Uptime/utils.jsx From c11726c920754b7474e673cd6a070a7e5ae5828d Mon Sep 17 00:00:00 2001 From: Indhu Date: Wed, 11 Dec 2024 15:03:43 +0530 Subject: [PATCH 11/18] Changed text from Usage --> usage in UI --- Client/src/Pages/Infrastructure/Details/index.jsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Client/src/Pages/Infrastructure/Details/index.jsx b/Client/src/Pages/Infrastructure/Details/index.jsx index 06fb1296a..7c5da5177 100644 --- a/Client/src/Pages/Infrastructure/Details/index.jsx +++ b/Client/src/Pages/Infrastructure/Details/index.jsx @@ -283,7 +283,7 @@ const InfrastructureDetails = () => { { type: "memory", value: decimalToPercentage(memoryUsagePercent), - heading: "Memory Usage", + heading: "Memory usage", metricOne: "Used", valueOne: formatBytes(memoryUsedBytes), metricTwo: "Total", @@ -292,7 +292,7 @@ const InfrastructureDetails = () => { { type: "cpu", value: decimalToPercentage(cpuUsagePercent), - heading: "CPU Usage", + heading: "CPU usage", metricOne: "Cores", valueOne: cpuPhysicalCores ?? 0, metricTwo: "Frequency", @@ -364,7 +364,7 @@ const InfrastructureDetails = () => { heading: "Memory usage", strokeColor: theme.palette.primary.main, gradientStartColor: theme.palette.primary.main, - yLabel: "Memory Usage", + yLabel: "Memory usage", yDomain: [0, 1], yTick: , xTick: , @@ -372,7 +372,7 @@ const InfrastructureDetails = () => { ), }, @@ -383,7 +383,7 @@ const InfrastructureDetails = () => { heading: "CPU usage", strokeColor: theme.palette.success.main, gradientStartColor: theme.palette.success.main, - yLabel: "CPU Usage", + yLabel: "CPU usage", yDomain: [0, 1], yTick: , xTick: , @@ -391,7 +391,7 @@ const InfrastructureDetails = () => { ), }, From b41fe1e70ef828edb58997464237e037cf55947a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mert=20=C5=9Ei=C5=9Fmano=C4=9Flu?= Date: Thu, 12 Dec 2024 00:31:27 +0300 Subject: [PATCH 12/18] fix: update demo server URLs to 'checkmate-demo.bluewavelabs.ca' --- Docker/dist/nginx/conf.d/default.conf | 2 +- Docker/test/docker-compose.yaml | 2 +- Docker/test/prod/docker-compose.yaml | 2 +- Docker/test/prod/nginx/conf.d/default.conf | 8 ++++---- Server/openapi.json | 2 +- guides/README.md | 2 +- guides/developers-guide/general-project-structure.md | 2 +- guides/users-guide/quickstart.md | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Docker/dist/nginx/conf.d/default.conf b/Docker/dist/nginx/conf.d/default.conf index a3ad90ead..0592dcd06 100644 --- a/Docker/dist/nginx/conf.d/default.conf +++ b/Docker/dist/nginx/conf.d/default.conf @@ -2,7 +2,7 @@ server { listen 80; listen [::]:80; - server_name uptime-demo.bluewavelabs.ca; + server_name checkmate-demo.bluewavelabs.ca; server_tokens off; location /.well-known/acme-challenge/ { diff --git a/Docker/test/docker-compose.yaml b/Docker/test/docker-compose.yaml index 24e6d1165..e262ef1a2 100644 --- a/Docker/test/docker-compose.yaml +++ b/Docker/test/docker-compose.yaml @@ -2,7 +2,7 @@ services: client: image: uptime_client:latest environment: - UPTIME_APP_API_BASE_URL: "https://uptime-demo.bluewavelabs.ca/api/v1" + UPTIME_APP_API_BASE_URL: "https://checkmate-demo.bluewavelabs.ca/api/v1" ports: - "80:80" - "443:443" diff --git a/Docker/test/prod/docker-compose.yaml b/Docker/test/prod/docker-compose.yaml index 24e6d1165..e262ef1a2 100644 --- a/Docker/test/prod/docker-compose.yaml +++ b/Docker/test/prod/docker-compose.yaml @@ -2,7 +2,7 @@ services: client: image: uptime_client:latest environment: - UPTIME_APP_API_BASE_URL: "https://uptime-demo.bluewavelabs.ca/api/v1" + UPTIME_APP_API_BASE_URL: "https://checkmate-demo.bluewavelabs.ca/api/v1" ports: - "80:80" - "443:443" diff --git a/Docker/test/prod/nginx/conf.d/default.conf b/Docker/test/prod/nginx/conf.d/default.conf index 5f37d48b7..98e1bd97d 100644 --- a/Docker/test/prod/nginx/conf.d/default.conf +++ b/Docker/test/prod/nginx/conf.d/default.conf @@ -2,7 +2,7 @@ server { listen 80; listen [::]:80; - server_name uptime-demo.bluewavelabs.ca; + server_name checkmate-demo.bluewavelabs.ca; server_tokens off; location /.well-known/acme-challenge/ { @@ -38,10 +38,10 @@ server { listen 443 default_server ssl http2; listen [::]:443 ssl http2; - server_name uptime-demo.bluewavelabs.ca; + server_name checkmate-demo.bluewavelabs.ca; - ssl_certificate /etc/nginx/ssl/live/uptime-demo.bluewavelabs.ca/fullchain.pem; - ssl_certificate_key /etc/nginx/ssl/live/uptime-demo.bluewavelabs.ca/privkey.pem; + ssl_certificate /etc/nginx/ssl/live/checkmate-demo.bluewavelabs.ca/fullchain.pem; + ssl_certificate_key /etc/nginx/ssl/live/checkmate-demo.bluewavelabs.ca/privkey.pem; location / { root /usr/share/nginx/html; diff --git a/Server/openapi.json b/Server/openapi.json index 7ba2fc222..662efb19b 100644 --- a/Server/openapi.json +++ b/Server/openapi.json @@ -44,7 +44,7 @@ } }, { - "url": "https://uptime-demo.bluewavelabs.ca/{API_PATH}", + "url": "https://checkmate-demo.bluewavelabs.ca/{API_PATH}", "description": "Bluewave Demo Server", "variables": { "PORT": { diff --git a/guides/README.md b/guides/README.md index 3de3c7e59..841bfe37a 100644 --- a/guides/README.md +++ b/guides/README.md @@ -26,7 +26,7 @@ It regularly checks whether a server/website is accessible and performs optimall ## Demo -We have a [demo](https://uptime-demo.bluewavelabs.ca/) where you can test how the Uptime Manager works. The username is [uptimedemo@demo.com](mailto:uptimedemo@demo.com) and the password is Demouser1! +We have a [demo](https://checkmate-demo.bluewavelabs.ca/) where you can test how the Uptime Manager works. The username is [uptimedemo@demo.com](mailto:uptimedemo@demo.com) and the password is Demouser1! ## Questions & ideas diff --git a/guides/developers-guide/general-project-structure.md b/guides/developers-guide/general-project-structure.md index da274f0f7..8f62c86c4 100644 --- a/guides/developers-guide/general-project-structure.md +++ b/guides/developers-guide/general-project-structure.md @@ -20,7 +20,7 @@ When making changes to the Front end please always keep future developers in min ### Back end -The back end of this project is not especially complex and is built around Express. The back end is a RESTful API and the [documentation can be found here](https://uptime-demo.bluewavelabs.ca/api-docs). +The back end of this project is not especially complex and is built around Express. The back end is a RESTful API and the [documentation can be found here](https://checkmate-demo.bluewavelabs.ca/api-docs). The application consists of several main conceptual models: diff --git a/guides/users-guide/quickstart.md b/guides/users-guide/quickstart.md index 57fde99b6..506cdb178 100644 --- a/guides/users-guide/quickstart.md +++ b/guides/users-guide/quickstart.md @@ -201,7 +201,7 @@ Our API is documented in accordance with the [OpenAPI spec](https://www.openapis You can see the documentation on your local development server at http://localhost:{port}/api-docs -You can also view the documentation on our demo server at [https://uptime-demo.bluewavelabs.ca/api-docs](https://uptime-demo.bluewavelabs.ca/api-docs) +You can also view the documentation on our demo server at [https://checkmate-demo.bluewavelabs.ca/api-docs](https://checkmate-demo.bluewavelabs.ca/api-docs) ### Error handling From f57b9a0fa1d43578724f5aa3aba3aa5b049d2870 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Thu, 12 Dec 2024 12:26:24 +0800 Subject: [PATCH 13/18] remove daterange from dependency array --- Client/src/Pages/Uptime/Details/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Client/src/Pages/Uptime/Details/index.jsx b/Client/src/Pages/Uptime/Details/index.jsx index 60b67fdc8..ac89041ec 100644 --- a/Client/src/Pages/Uptime/Details/index.jsx +++ b/Client/src/Pages/Uptime/Details/index.jsx @@ -100,7 +100,7 @@ const DetailsPage = ({ isAdmin }) => { } }; fetchCertificate(); - }, [authToken, monitorId, monitor, dateRange, uiTimezone, dateFormat]); + }, [authToken, monitorId, monitor, uiTimezone, dateFormat]); const splitDuration = (duration) => { const { time, format } = formatDurationSplit(duration); From 3840b3ec2dfbb19f157fe30b1a170235e20d4a72 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Thu, 12 Dec 2024 12:38:43 +0800 Subject: [PATCH 14/18] remove log statement --- Client/src/Pages/Infrastructure/CreateMonitor/index.jsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/Client/src/Pages/Infrastructure/CreateMonitor/index.jsx b/Client/src/Pages/Infrastructure/CreateMonitor/index.jsx index ff05b9ef2..74c257bae 100644 --- a/Client/src/Pages/Infrastructure/CreateMonitor/index.jsx +++ b/Client/src/Pages/Infrastructure/CreateMonitor/index.jsx @@ -148,8 +148,6 @@ const CreateInfrastructureMonitor = () => { thresholds, }; - console.log(form); - const action = await dispatch( createInfrastructureMonitor({ authToken, monitor: form }) ); From e33091f1821db8b5a8fe1a3cdc2e45f8775fffbd Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Thu, 12 Dec 2024 12:42:32 +0800 Subject: [PATCH 15/18] remove --- Client/src/Pages/Infrastructure/CreateMonitor/index.jsx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Client/src/Pages/Infrastructure/CreateMonitor/index.jsx b/Client/src/Pages/Infrastructure/CreateMonitor/index.jsx index 74c257bae..39a07c530 100644 --- a/Client/src/Pages/Infrastructure/CreateMonitor/index.jsx +++ b/Client/src/Pages/Infrastructure/CreateMonitor/index.jsx @@ -185,10 +185,6 @@ const CreateInfrastructureMonitor = () => { }); }; - const handleBlur = (event) => { - console.log("handleBlur", event); - }; - const handleNotifications = (event, type) => { const { value } = event.target; let notifications = [...infrastructureMonitor.notifications]; @@ -340,7 +336,6 @@ const CreateInfrastructureMonitor = () => { )} value={user?.email} onChange={(event) => handleNotifications(event, "email")} - onBlur={handleBlur} /> @@ -372,7 +367,6 @@ const CreateInfrastructureMonitor = () => { fieldName={METRIC_PREFIX + metric} fieldValue={infrastructureMonitor[METRIC_PREFIX + metric]} onFieldChange={handleChange} - onFieldBlur={handleBlur} alertUnit={metric == "temperature" ? "°C" : "%"} /> ); @@ -404,7 +398,7 @@ const CreateInfrastructureMonitor = () => { label="Check frequency" value={infrastructureMonitor.interval || 15} onChange={handleChange} - onBlur={handleBlur} + onBlur={} items={SELECT_VALUES} /> From 2145be5160cd1cb33a5f93a7befa2e5c4753a64f Mon Sep 17 00:00:00 2001 From: "Gorkem Cetin (BWL)" <167266851+gorkem-bwl@users.noreply.github.com> Date: Thu, 12 Dec 2024 00:13:10 -0500 Subject: [PATCH 16/18] Minor update to pull_request_template.md --- .github/PULL_REQUEST_TEMPLATE/pull_request_template.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md index 3d9b31e2d..d54352dac 100644 --- a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -1,6 +1,6 @@ ## Describe your changes -Provide a brief description of the changes you’ve made and their purpose. +Briefly describe the changes you made and their purpose. ## Issue number @@ -11,4 +11,10 @@ Mention the issue number(s) this PR addresses (e.g., #123). - [ ] I have performed a self-review of my code. - [ ] I have included the issue # in the PR. - [ ] I have labelled the PR correctly. -- [ ] My PR is granular and targeted to one specific feature only. +- [ ] I didn't use any hardcoded values (otherwise it will not scale, and will make it difficult to maintain consistency across the application). +- [ ] I made sure font sizes, color choices etc are all referenced from the theme. +- [ ] My PR is granular and targeted to one specific feature. +- [ ] I took a screenshot or a video and attached to this PR if there is a UI change. + + + From 52234531db69ed2ae544158f2a39b824544c82ba Mon Sep 17 00:00:00 2001 From: "Gorkem Cetin (BWL)" <167266851+gorkem-bwl@users.noreply.github.com> Date: Thu, 12 Dec 2024 00:17:25 -0500 Subject: [PATCH 17/18] Update pull_request_template.md --- .github/PULL_REQUEST_TEMPLATE/pull_request_template.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md index d54352dac..55d456545 100644 --- a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -11,6 +11,7 @@ Mention the issue number(s) this PR addresses (e.g., #123). - [ ] I have performed a self-review of my code. - [ ] I have included the issue # in the PR. - [ ] I have labelled the PR correctly. +- [ ] The issue I am working on is assigned to me. - [ ] I didn't use any hardcoded values (otherwise it will not scale, and will make it difficult to maintain consistency across the application). - [ ] I made sure font sizes, color choices etc are all referenced from the theme. - [ ] My PR is granular and targeted to one specific feature. From 7d33ac11b5588568d28a634fbe6c297310a9cafa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=20D=C3=B6rr?= Date: Thu, 12 Dec 2024 06:33:32 +0100 Subject: [PATCH 18/18] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aec89be80..ca3c19c95 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ We've just launched our [Discussions](https://github.com/bluewave-labs/bluewave- ## 🤝 Contributing -We pride ourselves on building strong connections with contributors at every level. Despite being a young project, Checkmate has already earned 600+ stars and attracted 30+ contributors from around the globe. So, don’t hold back — jump in, contribute and learn with us! +We pride ourselves on building strong connections with contributors at every level. Despite being a young project, Checkmate has already earned 1300+ stars and attracted 30+ contributors from around the globe. So, don’t hold back — jump in, contribute and learn with us! Here's how you can contribute: