Coder Social home page Coder Social logo

bluewave-uptime's Introduction

BlueWave Uptime

BlueWave Uptime is an open source server monitoring application. It is a tool used to track the operational status and performance of servers and websites. It regularly checks whether a server/website is accessible and performing optimally, providing real-time alerts and reports on the availability, downtime, and response time of the monitored services.

Contributing

You are welcome to provide contributions to the project. It uses React on the FE, and Nodejs and MongoDB on the BE, hence if you are comfortable with working with those technologies, you are encouraged to send your PRs. Please read Contributor's guideline

Note that We have a Figma file that includes:

  • All the dashboard elements and components
  • The design guideline for the app

You can see the designs here. Since it is read-only, we encourage you to copy to your own Figma page, then work on it.

Getting Started

  • Clone this repository to your local machine
  1. Installation (Client)
  2. Configuration(Client)
  3. Getting Started (Server)
  4. Endpoints
    Auth
    Monitors
    Checks
    Alerts
  5. Error Handling
  6. Contributors

Client

Installation

  1. Change directory to the Client directory
  2. Install all dependencies by running npm install

Configuration

Environmental Variables
ENV Variable Name Required/Optional Type Description Accepted Values
VITE_APP_API_BASE_URL Required string Base URL of server {host}/api/v1

Starting Development Server

  1. Run npm run dev to start the development server.

Getting Started (Server)

Docker Quickstart

The fastest way to start the server is to use our Dockerfiles and Docker Compose.

To get the server up and running you need to:

  1. In the Server/docker directory run the build script build_images.sh to build docker images for the server, Redis database, and MongoDB database.
  2. In the Server/docker directory, create a .env file with the requried environtmental variables. Sample file:
CLIENT_HOST="http://localhost:5173"
JWT_SECRET="my_secret"
DB_TYPE="MongoDB"
DB_CONNECTION_STRING="mongodb://mongodb:27017/uptime_db"
REDIS_HOST="redis"
REDIS_PORT=6379
SYSTEM_EMAIL_ADDRESS="<email>"
SENDGRID_API_KEY="<api_key>"
LOGIN_PAGE_URL="<login_page"
  1. In the Server/docker directory run docker compose up to run the docker-compose.yaml file and start all three images.

That's it, the server is ready to use.

Manual Install

Install Server
  1. Change directory to the Server directory
  2. Install all dependencies by running npm install

Environmental Variables

Configure the server with the following environmental variables:

ENV Variable Name Required/Optional Type Description Accepted Values
CLIENT_HOST Required string Frontend Host
JWT_SECRET Required string JWT secret
DB_TYPE Optional string Specify DB to use MongoDB | FakeDB
DB_CONNECTION_STRING Required string Specifies URL for MongoDB Database
PORT Optional integer Specifies Port for Server
SENDGRID_API_KEY Required string Specifies API KEY for SendGrid email service
SYSTEM_EMAIL_ADDRESS Required string Specifies System email to be used in emailing service, must be a verified email by sendgrid
LOGIN_PAGE_URL Required string Login url to be used in emailing service
REDIS_HOST Required string Host address for Redis database
REDIS_PORT Required integer Port for Redis database

Databases

This project requires a number of databases to run:

  1. Main database for the application. This project includes an implementation for a MongoDB database as well as a MongoDB Docker image.
  2. A Redis database is required for the Queue implementation in the PingService. This project includes a Redis docker image.

You may use the included Dockerfiles to spin up databases quickly if you wish.

(Optional) Dockerised Databases

Dockerfiles for the server and databases are located in the ./Server/docker directory

MongoDB Image Location: `./Server/docker/mongoDB.Dockerfile`

The ./Server/docker/mongo/data directory should be mounted to the MongoDB container in order to persist data.

From the Server/docker directory run

  1. Build the image: docker build -f mongoDB.Dockerfile -t uptime_database_mongo .
  2. Run the docker image: docker run -d -p 27017:27017 -v $(pwd)/mongo/data:/data/db --name uptime_database_mongo uptime_database_mongo
Redis Image Location `./Server/docker/redislDockerfile`

the ./Server/docker/redis/data directory should be mounted to the Redis container in order to persist data.

From the Server/docker directory run

  1. Build the image: docker build -f redis.Dockerfile -t uptime_redis .
  2. Run the image: docker run -d -p 6379:6379 -v $(pwd)/redis/data:/data --name uptime_redis uptime_redis

Starting the Development Server
  • run npm run dev to start the development server

OR

  • run node index.js to start server

Endpoints

All endpoints return a response in this format:

Name Type Notes
success boolean Success or failure of request
msg string Message describing response
data Object Arbitrary Payload

Example:

{success: true, msg: "Successful Request", data: {test: testData}}

Data Types
User
Name Type Notes
firstname string First name
lastname string Last name
email string User's email
profilePicUrl string URL to User's picture
isActive boolean Default to true
isVerified boolean Default to false
updated_at Date Last update time
created_at Date Time created at
Monitor
Name Type Notes
userId string Unique ID identifying monitor creator
name string Name of the monitor
description string Description of the monitor
url string Url the monitor will ping
isActive boolean Whether or not the monitor is active
interval integer Interval with which to ping monitor (ms)
updatedAt Date Last time the monitor was updated
CreatedAt Date When the monitor was updated
Check
Name Type Notes
monitorId string Unique ID for the monitor
status boolean Indicates the service is Up or Down
responseTime integer Indicates the response time of the service (ms)
statusCode integer Status Code returned from the service
message string Message returned from the service
updatedAt Date Last time the check was updated
CreatedAt Date When the check was created
Alert
Name Type Notes
checkId string Unique ID for the associated check
monitorId string Unique ID for the associated monitor
userId string Unique ID for the associated user
status boolean Indicates the service is Up or Down
message string Message for the user about the down service
notifiedStatus boolean Indicates whether the user is notified
acknowledgeStatus boolean Indicates whether the user acknowledged the alert
updatedAt Date Last time the alert was updated
CreatedAt Date When the alert was created

Auth
POST /api/v1/auth/register
Method/Headers
Method/Headers Value
Method POST
content-type application/json
Body
Name Type Notes
firstname string
lastname string
email string Valid email address
password string Min 8 chars
Response Payload
Type Notes
JWT JSON Web Token containing a User
Sample CURL request
curl --request POST \
  --url http://localhost:5000/api/v1/auth/register \
  --header 'Content-Type: application/json' \
  --data '{
	"firstname" : "User First Name",
	"lastname": "User Last Name",
	"email" : "[email protected]",
	"password": "user_password"
}'
Sample Response
{
  "success": true,
  "msg": "User created",
  "data": "<encoded_user>"
}
POST /api/v1/auth/login
Method/Headers
Method/Headers Value
Method POST
content-type application/json
Body
Name Type Notes
email string Valid email address
password string Min 8 chars
Response Payload
Type Notes
JWT JSON Web Token Containing a User
Sample CURL request
curl --request POST \
  --url http://localhost:5000/api/v1/auth/login \
  --header 'Content-Type: application/json' \
  --data '{
	"email" : "[email protected]",
	"password": "user_password"
}'
Sample response
{
  "success": true,
  "msg": "Found user",
  "data": "<encoded_user>"
}
POST/api/v1/auth/user/{userId}
Method/Headers
Method/Headers Value
Method POST
Body
Name Type Notes
firstname string
lastname string
profilePicUrl string
password string Min 8 chars
Response Payload
Type Notes
User Returns the updated user
Sample CURL request
curl --request POST \
  --url http://localhost:5000/api/v1/auth/user/6654d156634754f789e1f10e \
  --header 'Authorization: <bearer_token>' \
  --header 'Content-Type: application/json' \
  --data '{
	"firstname": "First Name",
  "lastname: "Last Name"
}'
Sample Response
{
  "success": true,
  "msg": "User updated",
  "data": {
    "_id": "6654d156634754f789e1f10e",
    "firstname": "First Name",
    "lastname": "Last Name",
    "email": "[email protected]",
    "isActive": true,
    "isVerified": false,
    "createdAt": "2024-05-27T18:30:46.358Z",
    "updatedAt": "2024-05-27T19:21:51.747Z",
    "__v": 0
  }
}
POST/api/v1/auth/recovery/request
Method/Headers
Method/Headers Value
Method POST
Body
Name Type Notes
email string User's email
Response Payload
Type Notes
RecoveryToken Returns a recovery token if email found
Sample CURL request
curl --request POST \
  --url http://localhost:5000/api/v1/auth/recovery/request \
  --header 'Content-Type: application/json' \
  --data '{
	"email" : "[email protected]"
}'
Sample Response
{
  "success": true,
  "msg": "Created recovery token",
  "data": {
    "email": "[email protected]",
    "token": "f519da5e4a9be40cfc3c0fde97e60c0e6d17bdaa613f5ba537a45073f3865193",
    "_id": "6668878263587f30748e968e",
    "expiry": "2024-06-11T17:21:06.984Z",
    "createdAt": "2024-06-11T17:21:06.985Z",
    "updatedAt": "2024-06-11T17:21:06.985Z",
    "__v": 0
  }
}
POST/api/v1/auth/recovery/validate
Method/Headers
Method/Headers Value
Method POST
Body
Name Type Notes
recoveryToken string Token issued in /recovery/request
Response Payload
Type Notes
RecoveryToken Returns the recovery token
Sample CURL request
curl --request POST \
  --url http://localhost:5000/api/v1/auth/recovery/validate \
  --header 'Content-Type: application/json' \
  --data '{
	"recoveryToken" : "f519da5e4a9be40cfc3c0fde97e60c0e6d17bdaa613f5ba537a45073f3865193"
}'
Sample Response
{
  "success": true,
  "msg": "Token is valid",
  "data": {
    "_id": "6668894263587f30748e969a",
    "email": "[email protected]",
    "token": "457d9926b24dedf613f120eeb524ef00ac45b3f0fc5c70bd25b1cc8aa83a64a0",
    "expiry": "2024-06-11T17:28:34.349Z",
    "createdAt": "2024-06-11T17:28:34.349Z",
    "updatedAt": "2024-06-11T17:28:34.349Z",
    "__v": 0
  }
}
POST/api/v1/auth/recovery/reset
Method/Headers
Method/Headers Value
Method POST
Body
Name Type Notes
recoveryToken string Token issued returned by /recovery/validate
password string User's new password`
Response Payload
Type Notes
User Returns the updated user
Sample CURL request
curl --request POST \
  --url http://localhost:5000/api/v1/auth/recovery/reset \
  --header 'Content-Type: application/json' \
  --data '{
	"recoveryToken" : "f519da5e4a9be40cfc3c0fde97e60c0e6d17bdaa613f5ba537a45073f3865193",
	"password": "testtest"
}'
Sample Response
{
  "success": true,
  "msg": "Password reset",
  "data": {
    "_id": "66675891cb17336d84c25d9f",
    "firstname": "User First Name",
    "lastname": "User Last Name",
    "email": "[email protected]",
    "isActive": true,
    "isVerified": false,
    "createdAt": "2024-06-10T19:48:33.863Z",
    "updatedAt": "2024-06-11T17:21:22.289Z",
    "__v": 0
  }
}

Monitors
GET /api/v1/monitors
Method/Headers
Method/Headers Value
Method GET
Response Payload
Type Notes
Array<Monitor> Array of all monitors
Sample cURL Request
curl --request GET \
  --url http://localhost:5000/api/v1/monitors \
  --header '<bearer_token>' \
Sample Response
{
  "success": true,
  "msg": "Monitors found",
  "data": [
    {
      "_id": "664d070786e62625ac612ca1",
      "userId": "6645079aae0b439371913972",
      "name": "Wha3",
      "description": "Description",
      "url": "https://monitor0.com",
      "isActive": true,
      "interval": 60000,
      "createdAt": "2024-05-21T20:41:43.051Z",
      "updatedAt": "2024-05-21T20:45:10.496Z",
      "__v": 0
    },
    {
      "_id": "664e5ccf189c864800debc16",
      "userId": "6645079aae0b439371913972",
      "name": "Inserting a new Monitor",
      "description": "Description",
      "url": "https://monitor0.com",
      "isActive": true,
      "interval": 60000,
      "createdAt": "2024-05-22T20:59:59.295Z",
      "updatedAt": "2024-05-22T20:59:59.295Z",
      "__v": 0
    }
  ]
}
GET /api/v1/monitor/{id}
Method/Headers
Method/Headers Value
Method GET
Response Payload
Type Notes
Monitor Single monitor with the id in the request parameter
Sample cURL Request
curl --request GET \
  --url http://localhost:5000/api/v1/monitors/664d070786e62625ac612ca1 \
  --header '<bearer_token>' \
Sample Response
{
  "success": true,
  "msg": "Got monitor by Id successfully",
  "data": {
    "_id": "6671eb54f7040ece47892f53",
    "userId": "666c9146c9bfa20db790b1df",
    "name": "Google Monitor",
    "description": "Google",
    "type": "http",
    "url": "https://www.google.com/404",
    "isActive": true,
    "interval": 10000,
    "createdAt": "2024-06-18T20:17:24.112Z",
    "updatedAt": "2024-06-18T20:17:24.112Z",
    "__v": 0,
    "checks": [
      {
        "_id": "6671eb5af7040ece47892f61",
        "monitorId": "6671eb54f7040ece47892f53",
        "status": false,
        "responseTime": 145,
        "expiry": "2024-06-18T20:17:30.246Z",
        "statusCode": 404,
        "createdAt": "2024-06-18T20:17:30.246Z",
        "updatedAt": "2024-06-18T20:17:30.246Z",
        "__v": 0
      },
      {
        "_id": "6671eb64f7040ece47892f6b",
        "monitorId": "6671eb54f7040ece47892f53",
        "status": false,
        "responseTime": 170,
        "expiry": "2024-06-18T20:17:40.209Z",
        "statusCode": 404,
        "createdAt": "2024-06-18T20:17:40.210Z",
        "updatedAt": "2024-06-18T20:17:40.210Z",
        "__v": 0
      }
    ]
  }
}
GET /api/v1/monitors/user/{userId}
Method/Headers
Method/Headers Value
Method GET
Response Payload
Type Notes
Array<Monitor> Array of monitors created by user with specified UserID
Sample cURL Request
curl --request GET \
  --url http://localhost:5000/api/v1/monitors/user/6645079aae0b439371913972 \
  --header '<bearer_token>' \
Sample Response
{
  "success": true,
  "msg": "Got monitor for 666c9146c9bfa20db790b1df successfully\"",
  "data": [
    {
      "_id": "6671eb54f7040ece47892f53",
      "userId": "666c9146c9bfa20db790b1df",
      "name": "Google Monitor",
      "description": "Google",
      "type": "http",
      "url": "https://www.google.com/404",
      "isActive": true,
      "interval": 10000,
      "createdAt": "2024-06-18T20:17:24.112Z",
      "updatedAt": "2024-06-18T20:17:24.112Z",
      "__v": 0,
      "checks": [
        {
          "_id": "6671eb5af7040ece47892f61",
          "monitorId": "6671eb54f7040ece47892f53",
          "status": false,
          "responseTime": 145,
          "expiry": "2024-06-18T20:17:30.246Z",
          "statusCode": 404,
          "createdAt": "2024-06-18T20:17:30.246Z",
          "updatedAt": "2024-06-18T20:17:30.246Z",
          "__v": 0
        }
      ]
    }
  ]
}
POST/api/v1/monitors
Method/Headers
Method/Headers Value
Method POST
Response Payload
Type Notes
Monitor Returns newly created Monitor
Sample CURL request
curl --request POST \
  --url http://localhost:5000/api/v1/monitors \
  --header <bearer_token> \
  --header 'Content-Type: application/json' \
  --data '{"userId": "6645079aae0b439371913972",
			"name": "Inserting a new Monitor",
			"description": "Description",
			"url": "https://monitor0.com",
			"isActive": true,
			"interval": 60000}'
Sample Response
{
  "success": true,
  "msg": "Monitor created",
  "data": {
    "userId": "6645079aae0b439371913972",
    "name": "Inserting a new Monitor",
    "description": "Description",
    "url": "https://monitor0.com",
    "isActive": true,
    "interval": 60000,
    "_id": "664e5ccf189c864800debc16",
    "createdAt": "2024-05-22T20:59:59.295Z",
    "updatedAt": "2024-05-22T20:59:59.295Z",
    "__v": 0
  }
}
POST/api/v1/monitors/delete/{monitorId}
Method/Headers
Method/Headers Value
Method POST
Response Payload
Type Notes
None No payload returned
Sample CURL request
curl --request POST \
  --url http://localhost:5000/api/v1/monitors/delete/664e632a7a3ee9d620761938 \
  --header '<bearer_token>' \
  --header 'Content-Type: application/json' \
Sample Response
{
  "success": true,
  "msg": "Monitor deleted"
}

POST/api/v1/monitors/edit/{monitorId}
Method/Headers
Method/Headers Value
Method POST
Response Payload
Type Notes
Monitor Returns the updated monitor
Sample CURL request
curl --request POST \
  --url http://localhost:5000/api/v1/monitors/edit/664e5ccf189c864800debc16 \
  --header '<bearer_token' \
  --header 'Content-Type: application/json' \
  --data '
		{
			"_id": "664e5ccf189c864800debc16",
			"userId": "6645079aae0b439371913972",
			"name": "Edited monitor",
			"description": "Description",
			"url": "https://monitor0.com",
			"isActive": true,
			"interval": 60000
		}'
Sample Response
{
  "success": true,
  "msg": "Monitor edited",
  "data": {
    "_id": "664e5ccf189c864800debc16",
    "userId": "6645079aae0b439371913972",
    "name": "Edited monitor",
    "description": "Description",
    "url": "https://monitor0.com",
    "isActive": true,
    "interval": 60000,
    "createdAt": "2024-05-22T20:59:59.295Z",
    "updatedAt": "2024-05-22T21:34:33.893Z",
    "__v": 0
  }
}

Checks
POST/api/v1/checks/{monitorId}
Method/Headers
Method/Headers Value
Method POST
Response Payload
Type Notes
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
{
  "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
  }
}
GET/api/v1/checks/{monitorId}
Method/Headers
Method/Headers Value
Method GET
Response Payload
Type Notes
Array<Checks> Array of Check objects
Sample CURL request
curl --request GET \
  --url http://localhost:5000/api/v1/checks/66562414035c4ce6a8a610ac \
  --header 'Authorization: <bearer_token>' \
Sample Response
{
  "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
    }
  ]
}
POST/api/v1/checks/delete/{monitorId}
Method/Headers
Method/Headers Value
Method POST
Response Payload
Type Notes
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
{
  "success": true,
  "msg": "Checks deleted",
  "data": {
    "deletedCount": 3
  }
}

Alerts
POST/api/v1/alerts/{monitorId}
Method/Headers
Method/Headers Value
Method POST
Response Payload
Type Notes
Alert Returns newly created Alert
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

Sample Response
GET/api/v1/alerts/user/{userId}
Method/Headers
Method/Headers Value
Method GET
Response Payload
Type Notes
Array<Alert> Returns all Alert created by a User
Sample CURL request
curl --request GET \
  --url http://localhost:5000/api/v1/alerts/user/6654d1a2634754f789e1f115 \
  --header 'Authorization: <bearer_token>'
Sample Response
{
  "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
    }
  ]
}
GET/api/v1/alerts/monitor/{monitorId}
Method/Headers
Method/Headers Value
Method GET
Response Payload
Type Notes
Array<Alert> Returns an array of Alert belonging to a specified Monitor
Sample CURL request
curl --request GET \
  --url http://localhost:5000/api/v1/alerts/monitor/6657789ebf6766ee8e2d2edb \
  --header 'Authorization: <bearer_token>' \
Sample Response
{
  "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
    }
  ]
}
GET/api/v1/alerts/{alertId}
Method/Headers
Method/Headers Value
Method GET
Response Payload
Type Notes
Alert Returns specified Alert
Sample CURL request
curl --request GET \
  --url http://localhost:5000/api/v1/alerts/66577ddae5ff3c91437d0887 \
  --header 'Authorization: <bearer_token>' \
Sample Response
{
  "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
  }
}
POST/api/v1/alerts/edit/{alertId}
Method/Headers
Method/Headers Value
Method POST
Response Payload
Type Notes
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
{
  "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
  }
}
POST/api/v1/alerts/delete/{alertId}
Method/Headers
Method/Headers Value
Method POST
Response Payload
Type Notes
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
{
  "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
  }
}

Checks
POST/api/v1/checks/{monitorId}
Method/Headers
Method/Headers Value
Method POST
Response Payload
Type Notes
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
{
  "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
  }
}
GET/api/v1/checks/{monitorId}
Method/Headers
Method/Headers Value
Method GET
Response Payload
Type Notes
Array<Checks> Array of Check objects
Sample CURL request
curl --request GET \
  --url http://localhost:5000/api/v1/checks/66562414035c4ce6a8a610ac \
  --header 'Authorization: <bearer_token>' \
Sample Response
{
  "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
    }
  ]
}
POST/api/v1/checks/delete/{monitorId}
Method/Headers
Method/Headers Value
Method POST
Response Payload
Type Notes
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
{
  "success": true,
  "msg": "Checks deleted",
  "data": {
    "deletedCount": 3
  }
}

Alerts
POST/api/v1/alerts/{monitorId}
Method/Headers
Method/Headers Value
Method POST
Response Payload
Type Notes
Alert Returns newly created Alert
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

Sample Response
GET/api/v1/alerts/user/{userId}
Method/Headers
Method/Headers Value
Method GET
Response Payload
Type Notes
Array<Alert> Returns all Alert created by a User
Sample CURL request
curl --request GET \
  --url http://localhost:5000/api/v1/alerts/user/6654d1a2634754f789e1f115 \
  --header 'Authorization: <bearer_token>'
Sample Response
{
  "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
    }
  ]
}
GET/api/v1/alerts/monitor/{monitorId}
Method/Headers
Method/Headers Value
Method GET
Response Payload
Type Notes
Array<Alert> Returns an array of Alert belonging to a specified Monitor
Sample CURL request
curl --request GET \
  --url http://localhost:5000/api/v1/alerts/monitor/6657789ebf6766ee8e2d2edb \
  --header 'Authorization: <bearer_token>' \
Sample Response
{
  "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
    }
  ]
}
GET/api/v1/alerts/{alertId}
Method/Headers
Method/Headers Value
Method GET
Response Payload
Type Notes
Alert Returns specified Alert
Sample CURL request
curl --request GET \
  --url http://localhost:5000/api/v1/alerts/66577ddae5ff3c91437d0887 \
  --header 'Authorization: <bearer_token>' \
Sample Response
{
  "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
  }
}
POST/api/v1/alerts/edit/{alertId}
Method/Headers
Method/Headers Value
Method POST
Response Payload
Type Notes
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
{
  "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
  }
}
POST/api/v1/alerts/delete/{alertId}
Method/Headers
Method/Headers Value
Method POST
Response Payload
Type Notes
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
{
  "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
  }
}

Error handling

Errors are returned in a standard format:

{"success": false, "msg": "No token provided"}

Errors are handled by error handling middleware and should be thrown with the following parameters

Name Type Default Notes
status integer 500 Standard HTTP codes
message string "Something went wrong" An error message
service string "Unknown Service" Name of service that threw the error

Example:

const myRoute = async(req, res, next) => {
  try{
    const result = myRiskyOperationHere();
  }
  catch(error){
    error.status = 404
    error.message = "Resource not found"
    error.service = service name
    next(error)
    return;
  }
}

Errors should not be handled at the controller level and should be left to the middleware to handle.

Contributors

Made with contrib.rocks.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.