Merge branch 'polishing-values' of https://github.com/MuhammadKhalilzadeh/bluewave-uptime into polishing-values
This commit is contained in:
commit
2b9cec9c10
11 files changed
+557
-161
No files matched your search
@@ -1,15 +1,20 @@
|
||||
.dashboard-menu-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.icon-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.text-container {
|
||||
.text-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
|
||||
.dashboard-menu-text {
|
||||
.dashboard-menu-text {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
.dashboard-sidebar {
|
||||
height: 100vh;
|
||||
width: 250px;
|
||||
background-color: #f4f4f4;
|
||||
box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
padding: 20px 0;
|
||||
}
|
||||
|
||||
.menu-container {
|
||||
margin-top: 60px;
|
||||
}
|
||||
|
||||
.support-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 10px 20px;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.support-text {
|
||||
margin-left: 8px;
|
||||
font-size: 16px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
import DashboardMenu from '../../Components/DashboardMenu';
|
||||
import SupportIcon from '@mui/icons-material/Support';
|
||||
import SvgIcon from '@mui/material/SvgIcon';
|
||||
import './index.css';
|
||||
|
||||
/**
|
||||
* @component
|
||||
* DashboardSidebar component serves as a sidebar containing the DashboardMenu and a Support icon at the bottom.
|
||||
*
|
||||
* @returns {JSX.Element} The JSX element representing the DashboardSidebar component.
|
||||
*/
|
||||
|
||||
function DashboardSidebar() {
|
||||
return (
|
||||
<div className="dashboard-sidebar">
|
||||
<div className="menu-container">
|
||||
<DashboardMenu />
|
||||
</div>
|
||||
<div className="support-container">
|
||||
<SvgIcon component={SupportIcon} />
|
||||
<span className="support-text">Support</span>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default DashboardSidebar;
|
||||
@@ -46,8 +46,8 @@ function NavBar() {
|
||||
};
|
||||
|
||||
return (
|
||||
<AppBar position="static">
|
||||
<Container maxWidth="xl">
|
||||
<AppBar position="fixed" sx={{ width: '100%' }}>
|
||||
<Container maxWidth="xxl" sx={{ width: '100%' }}>
|
||||
<Toolbar disableGutters>
|
||||
<Typography
|
||||
variant="h6"
|
||||
|
||||
@@ -1 +1,11 @@
|
||||
/*Homelayout styles*/
|
||||
.home-layout {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.main-content {
|
||||
margin-left: 250px;
|
||||
flex: 1;
|
||||
padding: 20px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
@@ -1,21 +1,17 @@
|
||||
import NavBar from '../../Components/NavBar'
|
||||
import { Outlet } from 'react-router'
|
||||
import Home from '../../Pages/Home'
|
||||
import './index.css'
|
||||
import ChartsOverviewDemo from '../../Components/DashboardProgressBars'
|
||||
import DashboardSettings from '../../Components/DashboardSettingsIcon'
|
||||
|
||||
import NavBar from '../../Components/NavBar';
|
||||
import { Outlet } from 'react-router';
|
||||
import DashboardSidebar from '../../Components/DashboardSidebar';
|
||||
import './index.css';
|
||||
|
||||
const HomeLayout = () => {
|
||||
return (
|
||||
<>
|
||||
<div className="home-layout">
|
||||
<DashboardSidebar />
|
||||
<div className="main-content">
|
||||
<NavBar />
|
||||
<Home />
|
||||
<Outlet />
|
||||
<ChartsOverviewDemo />
|
||||
<DashboardSettings />
|
||||
</>
|
||||
)
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default HomeLayout
|
||||
export default HomeLayout;
|
||||
@@ -656,21 +656,53 @@ curl --request POST \
|
||||
###### Response Payload
|
||||
|
||||
> | Type | Notes |
|
||||
> | ---- | ------------------- |
|
||||
> | None | No payload returned |
|
||||
> | ------- | --------------------------- |
|
||||
> | `Check` | Returns newly created check |
|
||||
|
||||
###### Body
|
||||
|
||||
> | Name | Type | Notes |
|
||||
> | ------------ | --------- | -------------------------------------- |
|
||||
> | monitorId | `string` | Monitor associated with Check |
|
||||
> | status | `boolean` | `true` for up and `false` for down |
|
||||
> | responseTime | `number` | How long it took the server to respond |
|
||||
> | statusCode | `number` | HTTP Status code of response |
|
||||
> | message | `string` | |
|
||||
|
||||
##### Sample CURL request
|
||||
|
||||
```
|
||||
|
||||
curl --request POST \
|
||||
--url http://localhost:5000/api/v1/checks/66562414035c4ce6a8a610ac \
|
||||
--header 'Authorization: <bearer_token>' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{
|
||||
"monitorId": "66562414035c4ce6a8a610ac",
|
||||
"status": true,
|
||||
"responseTime": 1,
|
||||
"statusCode": 200,
|
||||
"message": "good"
|
||||
}'
|
||||
```
|
||||
|
||||
###### Sample Response
|
||||
|
||||
```json
|
||||
|
||||
{
|
||||
"success": true,
|
||||
"msg": "Check created",
|
||||
"data": {
|
||||
"monitorId": "66562414035c4ce6a8a610ac",
|
||||
"status": true,
|
||||
"responseTime": 1,
|
||||
"statusCode": 200,
|
||||
"message": "good",
|
||||
"_id": "66576decba9f70148ea1f354",
|
||||
"createdAt": "2024-05-29T18:03:24.445Z",
|
||||
"updatedAt": "2024-05-29T18:03:24.445Z",
|
||||
"__v": 0
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
@@ -682,7 +714,7 @@ curl --request POST \
|
||||
|
||||
> | Method/Headers | Value |
|
||||
> | -------------- | ----- |
|
||||
> | Method | POST |
|
||||
> | Method | GET |
|
||||
|
||||
###### Response Payload
|
||||
|
||||
@@ -693,13 +725,42 @@ curl --request POST \
|
||||
##### Sample CURL request
|
||||
|
||||
```
|
||||
|
||||
curl --request GET \
|
||||
--url http://localhost:5000/api/v1/checks/66562414035c4ce6a8a610ac \
|
||||
--header 'Authorization: <bearer_token>' \
|
||||
```
|
||||
|
||||
###### Sample Response
|
||||
|
||||
```json
|
||||
|
||||
{
|
||||
"success": true,
|
||||
"msg": "Checks retrieved",
|
||||
"data": [
|
||||
{
|
||||
"_id": "66576c0194e11c0d4409d3c1",
|
||||
"monitorId": "66562414035c4ce6a8a610ac",
|
||||
"status": true,
|
||||
"responseTime": 1,
|
||||
"statusCode": 200,
|
||||
"message": "good",
|
||||
"createdAt": "2024-05-29T17:55:13.581Z",
|
||||
"updatedAt": "2024-05-29T17:55:13.581Z",
|
||||
"__v": 0
|
||||
},
|
||||
{
|
||||
"_id": "66576c0994e11c0d4409d3c5",
|
||||
"monitorId": "66562414035c4ce6a8a610ac",
|
||||
"status": true,
|
||||
"responseTime": 2,
|
||||
"statusCode": 200,
|
||||
"message": "good",
|
||||
"createdAt": "2024-05-29T17:55:21.127Z",
|
||||
"updatedAt": "2024-05-29T17:55:21.127Z",
|
||||
"__v": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
@@ -716,21 +777,27 @@ curl --request POST \
|
||||
###### Response Payload
|
||||
|
||||
> | Type | Notes |
|
||||
> | ---- | ------------------- |
|
||||
> | None | No payload returned |
|
||||
|
||||
###### Body
|
||||
> | -------- | -------------------------------------------------------------------- |
|
||||
> | `Object` | `{deletedCount: n}` Returns an object showing how many items deleted |
|
||||
|
||||
##### Sample CURL request
|
||||
|
||||
```
|
||||
|
||||
curl --request POST \
|
||||
--url http://localhost:5000/api/v1/checks/delete/66562414035c4ce6a8a610ac \
|
||||
--header 'Authorization: <bearer_token>' \
|
||||
```
|
||||
|
||||
###### Sample Response
|
||||
|
||||
```json
|
||||
|
||||
{
|
||||
"success": true,
|
||||
"msg": "Checks deleted",
|
||||
"data": {
|
||||
"deletedCount": 3
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
@@ -756,6 +823,24 @@ curl --request POST \
|
||||
|
||||
###### Body
|
||||
|
||||
"checkId": "66577a3fd16dcf7c1ce35148",
|
||||
"monitorId": "6657789ebf6766ee8e2d2edb",
|
||||
"userId": "6654d1a2634754f789e1f115",
|
||||
"status": false,
|
||||
"message": "This is a test alert",
|
||||
"notifiedStatus": "false",
|
||||
"acknowledgeStatus": false
|
||||
|
||||
> | Name | Type | Notes |
|
||||
> | ----------------- | --------- | --------------------------------------- |
|
||||
> | checkId | `string` | Id of `Check` associated with `Alert` |
|
||||
> | monitorId | `string` | Id of `Monitor` associated with `Alert` |
|
||||
> | userId | `string` | Id of `User` associated with `Alert` |
|
||||
> | status | `boolean` | Status of `Alert` |
|
||||
> | message | `string` | `Alert` message |
|
||||
> | notifiedStatus | `boolean` | |
|
||||
> | acknowledgeStatus | `boolean` | |
|
||||
|
||||
##### Sample CURL request
|
||||
|
||||
```
|
||||
@@ -788,13 +873,33 @@ curl --request POST \
|
||||
##### Sample CURL request
|
||||
|
||||
```
|
||||
|
||||
curl --request GET \
|
||||
--url http://localhost:5000/api/v1/alerts/user/6654d1a2634754f789e1f115 \
|
||||
--header 'Authorization: <bearer_token>'
|
||||
```
|
||||
|
||||
###### Sample Response
|
||||
|
||||
```json
|
||||
|
||||
{
|
||||
"success": true,
|
||||
"msg": "Got alerts",
|
||||
"data": [
|
||||
{
|
||||
"_id": "6657813d809adfded891a6b7",
|
||||
"checkId": "66577a3fd16dcf7c1ce35148",
|
||||
"monitorId": "6657789ebf6766ee8e2d2edb",
|
||||
"userId": "6654d1a2634754f789e1f115",
|
||||
"status": false,
|
||||
"message": "This is a test alert",
|
||||
"notifiedStatus": false,
|
||||
"acknowledgeStatus": false,
|
||||
"createdAt": "2024-05-29T19:25:49.317Z",
|
||||
"updatedAt": "2024-05-29T19:25:49.317Z",
|
||||
"__v": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
@@ -816,13 +921,33 @@ curl --request POST \
|
||||
##### Sample CURL request
|
||||
|
||||
```
|
||||
|
||||
curl --request GET \
|
||||
--url http://localhost:5000/api/v1/alerts/monitor/6657789ebf6766ee8e2d2edb \
|
||||
--header 'Authorization: <bearer_token>' \
|
||||
```
|
||||
|
||||
###### Sample Response
|
||||
|
||||
```json
|
||||
|
||||
{
|
||||
"success": true,
|
||||
"msg": "Got alerts by Monitor",
|
||||
"data": [
|
||||
{
|
||||
"_id": "6657813d809adfded891a6b7",
|
||||
"checkId": "66577a3fd16dcf7c1ce35148",
|
||||
"monitorId": "6657789ebf6766ee8e2d2edb",
|
||||
"userId": "6654d1a2634754f789e1f115",
|
||||
"status": false,
|
||||
"message": "This is a test alert",
|
||||
"notifiedStatus": false,
|
||||
"acknowledgeStatus": false,
|
||||
"createdAt": "2024-05-29T19:25:49.317Z",
|
||||
"updatedAt": "2024-05-29T19:25:49.317Z",
|
||||
"__v": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
@@ -845,13 +970,31 @@ curl --request POST \
|
||||
##### Sample CURL request
|
||||
|
||||
```
|
||||
|
||||
curl --request GET \
|
||||
--url http://localhost:5000/api/v1/alerts/66577ddae5ff3c91437d0887 \
|
||||
--header 'Authorization: <bearer_token>' \
|
||||
```
|
||||
|
||||
###### Sample Response
|
||||
|
||||
```json
|
||||
|
||||
{
|
||||
"success": true,
|
||||
"msg": "Got Alert By alertID",
|
||||
"data": {
|
||||
"_id": "66577ddae5ff3c91437d0887",
|
||||
"checkId": "66577a3fd16dcf7c1ce35148",
|
||||
"monitorId": "6657789ebf6766ee8e2d2edb",
|
||||
"userId": "6654d1a2634754f789e1f115",
|
||||
"status": false,
|
||||
"message": "This is a test alert",
|
||||
"notifiedStatus": false,
|
||||
"acknowledgeStatus": false,
|
||||
"createdAt": "2024-05-29T19:11:22.205Z",
|
||||
"updatedAt": "2024-05-29T19:11:22.205Z",
|
||||
"__v": 0
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
@@ -868,21 +1011,53 @@ curl --request POST \
|
||||
###### Response Payload
|
||||
|
||||
> | Type | Notes |
|
||||
> | ------- | -------------------- |
|
||||
> | `Alert` | Returns edited alert |
|
||||
> | ------- | ---------------------- |
|
||||
> | `Alert` | Returns edited `Alert` |
|
||||
|
||||
###### Body
|
||||
|
||||
> | Name | Type | Notes |
|
||||
> | ----------------- | --------- | ------------------------------------------ |
|
||||
> | checkId | `string` | ID of `Check` associated with `Alert` |
|
||||
> | monitorId | `string` | ID of `Monitor` id associated with `Alert` |
|
||||
> | userId | `string` | ID of `User` associated with `Alert` |
|
||||
> | status | `boolean` | Alert status |
|
||||
> | message | `string` | Alert message |
|
||||
> | notifiedStatus | `boolean` | |
|
||||
> | acknowledgeStatus | `boolean` | |
|
||||
|
||||
##### Sample CURL request
|
||||
|
||||
```
|
||||
|
||||
curl --request POST \
|
||||
--url http://localhost:5000/api/v1/alerts/edit/66577ddae5ff3c91437d0887 \
|
||||
--header 'Authorization: <bearer_token>' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{
|
||||
"acknowledgeStatus": true
|
||||
}'
|
||||
```
|
||||
|
||||
###### Sample Response
|
||||
|
||||
```json
|
||||
|
||||
{
|
||||
"success": true,
|
||||
"msg": "Edited alert",
|
||||
"data": {
|
||||
"_id": "66577ddae5ff3c91437d0887",
|
||||
"checkId": "66577a3fd16dcf7c1ce35148",
|
||||
"monitorId": "6657789ebf6766ee8e2d2edb",
|
||||
"userId": "6654d1a2634754f789e1f115",
|
||||
"status": false,
|
||||
"message": "This is a test alert",
|
||||
"notifiedStatus": false,
|
||||
"acknowledgeStatus": true,
|
||||
"createdAt": "2024-05-29T19:11:22.205Z",
|
||||
"updatedAt": "2024-05-29T19:12:23.951Z",
|
||||
"__v": 0
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
@@ -898,21 +1073,37 @@ curl --request POST \
|
||||
###### Response Payload
|
||||
|
||||
> | Type | Notes |
|
||||
> | ---- | ------------------- |
|
||||
> | None | No payload returned |
|
||||
|
||||
###### Body
|
||||
> | ------- | --------------------------- |
|
||||
> | `Alert` | Returns the deleted `Alert` |
|
||||
|
||||
##### Sample CURL request
|
||||
|
||||
```
|
||||
|
||||
curl --request POST \
|
||||
--url http://localhost:5000/api/v1/alerts/delete/66577ddae5ff3c91437d0887 \
|
||||
--header 'Authorization: <bearer_token>' \
|
||||
```
|
||||
|
||||
###### Sample Response
|
||||
|
||||
```json
|
||||
|
||||
{
|
||||
"success": true,
|
||||
"msg": "Deleted alert",
|
||||
"data": {
|
||||
"_id": "66577ddae5ff3c91437d0887",
|
||||
"checkId": "66577a3fd16dcf7c1ce35148",
|
||||
"monitorId": "6657789ebf6766ee8e2d2edb",
|
||||
"userId": "6654d1a2634754f789e1f115",
|
||||
"status": false,
|
||||
"message": "This is a test alert",
|
||||
"notifiedStatus": false,
|
||||
"acknowledgeStatus": true,
|
||||
"createdAt": "2024-05-29T19:11:22.205Z",
|
||||
"updatedAt": "2024-05-29T19:12:23.951Z",
|
||||
"__v": 0
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
@@ -11,6 +11,7 @@ const {
|
||||
editAlertBodyValidation,
|
||||
deleteAlertParamValidation,
|
||||
} = require("../validation/joi");
|
||||
const { get } = require("mongoose");
|
||||
|
||||
const SERVICE_NAME = "alerts";
|
||||
|
||||
@@ -35,7 +36,11 @@ const createAlert = async (req, res, next) => {
|
||||
}
|
||||
|
||||
try {
|
||||
req.db.createAlert(req, res);
|
||||
const alertData = { ...req.body };
|
||||
const alert = await req.db.createAlert(alertData);
|
||||
return res
|
||||
.status(200)
|
||||
.json({ success: true, msg: "Alert created", data: alert });
|
||||
} catch (error) {
|
||||
error.service = SERVICE_NAME;
|
||||
next(error);
|
||||
@@ -62,7 +67,10 @@ const getAlertsByUserId = async (req, res, next) => {
|
||||
}
|
||||
|
||||
try {
|
||||
req.db.getAlertsByUserId(req, res);
|
||||
const alerts = await req.db.getAlertsByUserId(req.params.userId);
|
||||
return res
|
||||
.status(200)
|
||||
.json({ success: true, msg: "Got alerts", data: alerts });
|
||||
} catch (error) {
|
||||
error.service = SERVICE_NAME;
|
||||
next(error);
|
||||
@@ -72,29 +80,30 @@ const getAlertsByUserId = async (req, res, next) => {
|
||||
const getAlertsByMonitorId = async (req, res, next) => {
|
||||
try {
|
||||
await getAlertsByMonitorIdParamValidation.validateAsync(req.params);
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
msg: "Get Alerts By MonitorID",
|
||||
data: req.params.monitorId,
|
||||
});
|
||||
} catch (error) {
|
||||
error.status = 422;
|
||||
res.status(200).json({ success: true, msg: "Edit alert" });
|
||||
|
||||
error.message = error.details[0].message;
|
||||
error.service = SERVICE_NAME;
|
||||
next(error);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const alerts = await req.db.getAlertsByMonitorId(req.params.monitorId);
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
msg: "Got alerts by Monitor",
|
||||
data: alerts,
|
||||
});
|
||||
} catch (error) {
|
||||
error.service = SERVICE_NAME;
|
||||
next(error);
|
||||
}
|
||||
};
|
||||
|
||||
const getAlertById = async (req, res, next) => {
|
||||
try {
|
||||
await getAlertByIdParamValidation.validateAsync(req.params);
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
msg: "Get Alert By alertID",
|
||||
data: req.params.alertId,
|
||||
});
|
||||
} catch (error) {
|
||||
error.status = 422;
|
||||
error.message = error.details[0].message;
|
||||
@@ -102,24 +111,49 @@ const getAlertById = async (req, res, next) => {
|
||||
next(error);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const alert = await req.db.getAlertById(req.params.alertId);
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
msg: "Got Alert By alertID",
|
||||
data: alert,
|
||||
});
|
||||
} catch (error) {
|
||||
error.service = SERVICE_NAME;
|
||||
next(error);
|
||||
}
|
||||
};
|
||||
|
||||
const editAlert = async (req, res, next) => {
|
||||
try {
|
||||
await editAlertParamValidation(req.params);
|
||||
await editAlertBodyValidation(req.body);
|
||||
res.status(200).json({ success: true, msg: "Edit alert" });
|
||||
await editAlertParamValidation.validateAsync(req.params);
|
||||
await editAlertBodyValidation.validateAsync(req.body);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
error.status = 422;
|
||||
error.message = error.details[0].message;
|
||||
error.service = SERVICE_NAME;
|
||||
next(error);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const alertData = { ...req.body };
|
||||
const alert = await req.db.editAlert(req.params.alertId, alertData);
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
msg: "Edited alert",
|
||||
data: alert,
|
||||
});
|
||||
} catch (error) {
|
||||
error.service = SERVICE_NAME;
|
||||
next(error);
|
||||
}
|
||||
};
|
||||
const deleteAlert = async (req, res, next) => {
|
||||
try {
|
||||
await deleteAlertParamValidation(req.params);
|
||||
res.status(200).json({ success: true, msg: "Delete alert" });
|
||||
await deleteAlertParamValidation.validateAsync(req.params);
|
||||
} catch (error) {
|
||||
error.status = 422;
|
||||
error.message = error.details[0].message;
|
||||
@@ -127,6 +161,18 @@ const deleteAlert = async (req, res, next) => {
|
||||
next(error);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const deleted = await req.db.deleteAlert(req.params.alertId);
|
||||
return res.status(200).json({
|
||||
success: true,
|
||||
msg: "Deleted alert",
|
||||
data: deleted,
|
||||
});
|
||||
} catch (error) {
|
||||
error.service = SERVICE_NAME;
|
||||
next(error);
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
|
||||
@@ -1,29 +1,73 @@
|
||||
var jwt = require("jsonwebtoken");
|
||||
const {
|
||||
createCheckParamValidation,
|
||||
createCheckBodyValidation,
|
||||
getChecksParamValidation,
|
||||
deleteChecksParamValidation,
|
||||
} = require("../validation/joi");
|
||||
const SERVICE_NAME = "check";
|
||||
|
||||
const createCheck = (req, res, next) => {
|
||||
const createCheck = async (req, res, next) => {
|
||||
try {
|
||||
req.db.createCheck(req, res);
|
||||
await createCheckParamValidation.validateAsync(req.params);
|
||||
await createCheckBodyValidation.validateAsync(req.body);
|
||||
} catch (error) {
|
||||
error.status = 422;
|
||||
error.service = SERVICE_NAME;
|
||||
error.message = error.details[0].message;
|
||||
next(error);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const checkData = { ...req.body };
|
||||
const check = await req.db.createCheck(checkData);
|
||||
return res
|
||||
.status(200)
|
||||
.json({ success: true, msg: "Check created", data: check });
|
||||
} catch (error) {
|
||||
error.service = SERVICE_NAME;
|
||||
next(error);
|
||||
}
|
||||
};
|
||||
|
||||
const getChecks = (req, res, next) => {
|
||||
const getChecks = async (req, res, next) => {
|
||||
try {
|
||||
req.db.getChecks(req, res);
|
||||
// Return all checks for a monitor
|
||||
await getChecksParamValidation.validateAsync(req.params);
|
||||
} catch (error) {
|
||||
error.status = 422;
|
||||
error.service = SERVICE_NAME;
|
||||
error.message = error.details[0].message;
|
||||
next(error);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const checks = await req.db.getChecks(req.params.monitorId);
|
||||
return res
|
||||
.status(200)
|
||||
.json({ success: true, msg: "Checks retrieved", data: checks });
|
||||
} catch (error) {
|
||||
error.service = SERVICE_NAME;
|
||||
next(error);
|
||||
}
|
||||
};
|
||||
|
||||
const deleteChecks = (req, res, next) => {
|
||||
const deleteChecks = async (req, res, next) => {
|
||||
try {
|
||||
req.db.deleteChecks(req, res);
|
||||
// Delete all checks for a monitor
|
||||
await deleteChecksParamValidation.validateAsync(req.params);
|
||||
} catch (error) {
|
||||
error.status = 422;
|
||||
error.service = SERVICE_NAME;
|
||||
error.message = error.details[0].message;
|
||||
next(error);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const deletedCount = await req.db.deleteChecks(req.params.monitorId);
|
||||
return res
|
||||
.status(200)
|
||||
.json({ success: true, msg: "Checks deleted", data: { deletedCount } });
|
||||
} catch (error) {
|
||||
error.service = SERVICE_NAME;
|
||||
next(error);
|
||||
|
||||
+77
-71
@@ -1,6 +1,8 @@
|
||||
const Monitor = require("../models/Monitor");
|
||||
const mongoose = require("mongoose");
|
||||
const UserModel = require("../models/user");
|
||||
const Check = require("../models/Check");
|
||||
const Alert = require("../models/Alert");
|
||||
|
||||
const verifyId = (userId, monitorId) => {
|
||||
return userId.toString() === monitorId.toString();
|
||||
@@ -59,10 +61,6 @@ const getUserByEmail = async (req, res) => {
|
||||
}
|
||||
};
|
||||
|
||||
//****************************************
|
||||
// Monitors
|
||||
//****************************************
|
||||
|
||||
/**
|
||||
* Update a user by ID
|
||||
* @async
|
||||
@@ -88,6 +86,10 @@ const updateUser = async (req, res) => {
|
||||
}
|
||||
};
|
||||
|
||||
//****************************************
|
||||
// Monitors
|
||||
//****************************************
|
||||
|
||||
/**
|
||||
* Get all monitors
|
||||
* @async
|
||||
@@ -209,17 +211,21 @@ const editMonitor = async (req, res) => {
|
||||
/**
|
||||
* Create a check for a monitor
|
||||
* @async
|
||||
* @param {Express.Request} req
|
||||
* @param {Express.Response} res
|
||||
* @param {Object} checkData
|
||||
* @param {string} checkData.monitorId
|
||||
* @param {boolean} checkData.status
|
||||
* @param {number} checkData.responseTime
|
||||
* @param {number} checkData.statusCode
|
||||
* @param {string} checkData.message
|
||||
* @returns {Promise<Check>}
|
||||
* @throws {Error}
|
||||
*/
|
||||
|
||||
const createCheck = async (req, res) => {
|
||||
const createCheck = async (checkData) => {
|
||||
try {
|
||||
// Create check with monitor id
|
||||
res
|
||||
.status(200)
|
||||
.json({ success: true, msg: "Create check", data: req.params.monitorId });
|
||||
console.log(checkData);
|
||||
const check = await new Check({ ...checkData }).save();
|
||||
return check;
|
||||
} catch (error) {
|
||||
throw error;
|
||||
}
|
||||
@@ -228,17 +234,15 @@ const createCheck = async (req, res) => {
|
||||
/**
|
||||
* Get all checks for a monitor
|
||||
* @async
|
||||
* @param {Express.Request} req
|
||||
* @param {Express.Response} res
|
||||
* @param {string} monitorId
|
||||
* @returns {Promise<Array<Check>>}
|
||||
* @throws {Error}
|
||||
*/
|
||||
|
||||
const getChecks = async (req, res) => {
|
||||
const getChecks = async (monitorId) => {
|
||||
try {
|
||||
// TODO get all checks for a monitor from DB
|
||||
res
|
||||
.status(200)
|
||||
.json({ success: true, msg: "Get checks", data: req.params.monitorId });
|
||||
const checks = await Check.find({ monitorId });
|
||||
return checks;
|
||||
} catch (error) {
|
||||
throw error;
|
||||
}
|
||||
@@ -247,19 +251,19 @@ const getChecks = async (req, res) => {
|
||||
/**
|
||||
* Delete all checks for a monitor
|
||||
* @async
|
||||
* @param {Express.Request} req
|
||||
* @param {Express.Response} res
|
||||
* @param {string} monitorId
|
||||
* @returns {number}
|
||||
* @throws {Error}
|
||||
*/
|
||||
|
||||
const deleteChecks = async (req, res) => {
|
||||
const deleteChecks = async (monitorId) => {
|
||||
try {
|
||||
// TODO Delete all checks for a monitor
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
msg: "Deleted checks",
|
||||
data: req.params.monitorId,
|
||||
});
|
||||
const result = await Check.deleteMany({ monitorId });
|
||||
if (result.deletedCount > 0) {
|
||||
return result.deletedCount;
|
||||
} else {
|
||||
throw new Error(`No checks found for monitor with id ${monitorId}`);
|
||||
}
|
||||
} catch (error) {
|
||||
throw error;
|
||||
}
|
||||
@@ -272,16 +276,21 @@ const deleteChecks = async (req, res) => {
|
||||
/**
|
||||
* Creates an Alert associated with a Monitor and User
|
||||
* @async
|
||||
* @param {Express.Request} req
|
||||
* @param {Express.Response} res
|
||||
* @param {Object} alertData
|
||||
* @param {string} alertData.checkId
|
||||
* @param {string} alert.monitorId
|
||||
* @param {string} alert.userId
|
||||
* @param {boolean} alert.status
|
||||
* @param {string} alert.message
|
||||
* @param {boolean} alert.notifiedStatus
|
||||
* @param {boolean} alert.acknowledgeStatus
|
||||
* @returns {<Promise<Alert>>}
|
||||
* @throws {Error}
|
||||
*/
|
||||
const createAlert = async (req, res) => {
|
||||
const createAlert = async (alertData) => {
|
||||
try {
|
||||
res
|
||||
.status(200)
|
||||
.json({ success: true, msg: "Create Alert", data: req.params.monitorId });
|
||||
const alert = await new Alert({ ...alertData }).save();
|
||||
return alert;
|
||||
} catch (error) {
|
||||
throw error;
|
||||
}
|
||||
@@ -290,18 +299,14 @@ const createAlert = async (req, res) => {
|
||||
/**
|
||||
* Gets all alerts a User has set
|
||||
* @async
|
||||
* @param {Express.Request} req
|
||||
* @param {Express.Response} res
|
||||
* @param {string} userId
|
||||
* @returns {<Promise<Array<Alert>>}
|
||||
* @throws {Error}
|
||||
*/
|
||||
const getAlertsByUserId = async (req, res) => {
|
||||
const getAlertsByUserId = async (userId) => {
|
||||
try {
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
msg: "Get Alerts By UserID",
|
||||
data: req.params.userId,
|
||||
});
|
||||
const alerts = await Alert.find({ userId });
|
||||
return alerts;
|
||||
} catch (error) {
|
||||
throw error;
|
||||
}
|
||||
@@ -310,73 +315,74 @@ const getAlertsByUserId = async (req, res) => {
|
||||
/**
|
||||
* Gets all alerts a for an associated Monitor
|
||||
* @async
|
||||
* @param {Express.Request} req
|
||||
* @param {Express.Response} res
|
||||
* @param {string} monitorId
|
||||
* @returns {<Promise<Array<Alert>>}
|
||||
* @throws {Error}
|
||||
*/
|
||||
const getAlertsByMonitorId = async (req, res) => {
|
||||
const getAlertsByMonitorId = async (monitorId) => {
|
||||
try {
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
msg: "Get Alerts By MonitorID",
|
||||
data: req.params.monitorId,
|
||||
});
|
||||
const alerts = await Alert.find({ monitorId });
|
||||
return alerts;
|
||||
} catch (error) {
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets an alert with specified ID
|
||||
* Returns an alert with specified ID
|
||||
* @async
|
||||
* @param {Express.Request} req
|
||||
* @param {Express.Response} res
|
||||
* @param {string} alertId
|
||||
* @returns {Promise<Alert>}
|
||||
* @throws {Error}
|
||||
*/
|
||||
const getAlertById = async (req, res) => {
|
||||
const getAlertById = async (alertId) => {
|
||||
try {
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
msg: "Get Alert By alertID",
|
||||
data: req.params.alertId,
|
||||
});
|
||||
const alert = await Alert.findById(alertId);
|
||||
return alert;
|
||||
} catch (error) {
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns an edited monitor with the specified ID
|
||||
* Returns an edited alert with the specified ID
|
||||
* @async
|
||||
* @param {Express.Request} req
|
||||
* @param {string} alertId
|
||||
* @param {Object} alertData
|
||||
* @param {string} alertData.checkId
|
||||
* @param {string} alertData.monitorId
|
||||
* @param {string} alertData.userId
|
||||
* @param {boolean} alertData.status
|
||||
* @param {string} alertData.message
|
||||
* @param {boolean} alertData.notifiedStatus
|
||||
* @param {boolean} alertData.acknowledgeStatus
|
||||
* @param {Express.Response} res
|
||||
* @returns {Promise<Alert>>}
|
||||
* @throws {Error}
|
||||
*/
|
||||
const editAlert = async (req, res) => {
|
||||
const editAlert = async (alertId, alertData) => {
|
||||
try {
|
||||
res
|
||||
.status(200)
|
||||
.json({ success: true, msg: "Edit alert", data: req.params.alertId });
|
||||
const editedAlert = await Alert.findByIdAndUpdate(alertId, alertData, {
|
||||
new: true,
|
||||
});
|
||||
return editedAlert;
|
||||
} catch (error) {
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Deletes a monitor with the specified ID
|
||||
* Deletes an alert with the specified ID
|
||||
* @async
|
||||
* @param {Express.Request} req
|
||||
* @param {Express.Response} res
|
||||
* @param {string} alertId
|
||||
* @throws {Error}
|
||||
*/
|
||||
const deleteAlert = async (req, res) => {
|
||||
const deleteAlert = async (alertId) => {
|
||||
try {
|
||||
res
|
||||
.status(200)
|
||||
.json({ success: true, msg: "Delete alert", data: req.params.alertId });
|
||||
const result = await Alert.findByIdAndDelete(alertId);
|
||||
if (result) {
|
||||
return result;
|
||||
} else throw new Error(`Alert with id ${alertId} not found`);
|
||||
} catch (error) {
|
||||
throw error;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
const joi = require("joi");
|
||||
|
||||
//****************************************
|
||||
// Auth
|
||||
//****************************************
|
||||
|
||||
const loginValidation = joi.object({
|
||||
email: joi.string().email().required(),
|
||||
password: joi.string().min(8).required(),
|
||||
@@ -11,6 +15,20 @@ const registerValidation = joi.object({
|
||||
password: joi.string().min(8).required(),
|
||||
});
|
||||
|
||||
const editUserParamValidation = joi.object({
|
||||
userId: joi.string().required(),
|
||||
});
|
||||
|
||||
const editUserBodyValidation = joi.object({
|
||||
firstname: joi.string(),
|
||||
lastname: joi.string(),
|
||||
profilePicUrl: joi.string(),
|
||||
});
|
||||
|
||||
//****************************************
|
||||
// Monitors
|
||||
//****************************************
|
||||
|
||||
const getMonitorByIdValidation = joi.object({
|
||||
monitorId: joi.string().required(),
|
||||
});
|
||||
@@ -29,15 +47,9 @@ const monitorValidation = joi.object({
|
||||
interval: joi.number(),
|
||||
});
|
||||
|
||||
const editUserParamValidation = joi.object({
|
||||
userId: joi.string().required(),
|
||||
});
|
||||
|
||||
const editUserBodyValidation = joi.object({
|
||||
firstname: joi.string(),
|
||||
lastname: joi.string(),
|
||||
profilePicUrl: joi.string(),
|
||||
});
|
||||
//****************************************
|
||||
// Alerts
|
||||
//****************************************
|
||||
|
||||
const createAlertParamValidation = joi.object({
|
||||
monitorId: joi.string().required(),
|
||||
@@ -80,6 +92,30 @@ const deleteAlertParamValidation = joi.object({
|
||||
alertId: joi.string().required(),
|
||||
});
|
||||
|
||||
//****************************************
|
||||
// Checks
|
||||
//****************************************
|
||||
|
||||
const createCheckParamValidation = joi.object({
|
||||
monitorId: joi.string().required(),
|
||||
});
|
||||
|
||||
const createCheckBodyValidation = joi.object({
|
||||
monitorId: joi.string().required(),
|
||||
status: joi.boolean().required(),
|
||||
responseTime: joi.number().required(),
|
||||
statusCode: joi.number().required(),
|
||||
message: joi.string().required(),
|
||||
});
|
||||
|
||||
const getChecksParamValidation = joi.object({
|
||||
monitorId: joi.string().required(),
|
||||
});
|
||||
|
||||
const deleteChecksParamValidation = joi.object({
|
||||
monitorId: joi.string().required(),
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
loginValidation,
|
||||
registerValidation,
|
||||
@@ -96,4 +132,8 @@ module.exports = {
|
||||
editAlertParamValidation,
|
||||
editAlertBodyValidation,
|
||||
deleteAlertParamValidation,
|
||||
createCheckParamValidation,
|
||||
createCheckBodyValidation,
|
||||
getChecksParamValidation,
|
||||
deleteChecksParamValidation,
|
||||
};
|
||||
Reference in new issue
Block a user