An open source server monitoring application
BlueWave Uptime is an open source server monitoring application used to track the operational status and performance of servers and websites. It regularly checks whether a server/website is accessible and performs optimally, providing real-time alerts and reports on the monitored services' availability, downtime, and response time.
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 . Once you start contributing, we can also add you to our weekly team calls (every Thursday).
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.
Clone this repository to your local machine
Docker Quickstart
Installation (Client)
Configuration(Client)
Getting Started (Server)
Endpoints
Error Handling
Contributors
The fastest way to start the application is to use our Dockerfiles and Docker Compose .
To get the application up and running you need to:
In the Docker
directory run the build script build_images.sh
to build docker images for the client, server, Redis database, and MongoDB database.
In the Docker
directory, create a server.env
file with the requried environtmental variables for the server. 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"
In the Docker
directory, create a client.env
file with the required environtmental variables for the client. Sample file:
VITE_APP_API_BASE_URL="http://localhost:5000/api/v1"
In the Docker
directory run docker compose up
to run the docker-compose.yaml
file and start all four images.
That's it, the application is ready to use on port 5173.
Change directory to the Client
directory
Install all dependencies by running npm install
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
Run npm run dev
to start the development server.
Change directory to the Server
directory
Install all dependencies by running npm install
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
TOKEN_TTL
Optional
string
Time for token to live
In vercel/ms format https://github.com/vercel/ms
This project requires a number of databases to run:
Main database for the application. This project includes an implementation for a MongoDB database as well as a MongoDB Docker image.
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 Docker
directory
MongoDB Image
Location: Docker/mongoDB.Dockerfile
The Docker/mongo/data
directory should be mounted to the MongoDB container in order to persist data.
From the Docker
directory run
Build the image: docker build -f mongoDB.Dockerfile -t uptime_database_mongo .
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 Docker/redis.Dockerfile
the Docker/redis/data
directory should be mounted to the Redis container in order to persist data.
From the Docker
directory run
Build the image: docker build -f redis.Dockerfile -t uptime_redis .
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
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}}
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
POST
/api/v1/auth/register
Method/Headers
Method/Headers
Value
Method
POST
content-type
application/json
Name
Type
Notes
firstname
string
lastname
string
email
string
Valid email address
password
string
Min 8 chars
Type
Notes
JWT
JSON Web Token containing a User
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" : "user@gmail.com",
"password": "user_password"
}'
{
"success" : true ,
"msg" : " User created" ,
"data" : " <encoded_user>"
}
POST
/api/v1/auth/login
Method/Headers
Method/Headers
Value
Method
POST
content-type
application/json
Name
Type
Notes
email
string
Valid email address
password
string
Min 8 chars
Type
Notes
JWT
JSON Web Token Containing a User
curl --request POST \
--url http://localhost:5000/api/v1/auth/login \
--header 'Content-Type: application/json' \
--data '{
"email" : "user@gmail.com",
"password": "user_password"
}'
{
"success" : true ,
"msg" : " Found user" ,
"data" : " <encoded_user>"
}
POST
/api/v1/auth/user/{userId}
Method/Headers
Method/Headers
Value
Method
POST
Name
Type
Notes
firstname
string
lastname
string
profilePicUrl
string
password
string
Min 8 chars
Type
Notes
User
Returns the updated user
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"
}'
{
"success" : true ,
"msg" : " User updated" ,
"data" : {
"_id" : " 6654d156634754f789e1f10e" ,
"firstname" : " First Name" ,
"lastname" : " Last Name" ,
"email" : " me@gmail.com" ,
"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
Name
Type
Notes
email
string
User's email
Type
Notes
RecoveryToken
Returns a recovery token if email found
curl --request POST \
--url http://localhost:5000/api/v1/auth/recovery/request \
--header 'Content-Type: application/json' \
--data '{
"email" : "ajhollid@gmail.com"
}'
{
"success" : true ,
"msg" : " Created recovery token" ,
"data" : {
"email" : " your_email@gmail.com" ,
"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
Name
Type
Notes
recoveryToken
string
Token issued in /recovery/request
Type
Notes
RecoveryToken
Returns the recovery token
curl --request POST \
--url http://localhost:5000/api/v1/auth/recovery/validate \
--header 'Content-Type: application/json' \
--data '{
"recoveryToken" : "f519da5e4a9be40cfc3c0fde97e60c0e6d17bdaa613f5ba537a45073f3865193"
}'
{
"success" : true ,
"msg" : " Token is valid" ,
"data" : {
"_id" : " 6668894263587f30748e969a" ,
"email" : " ajhollid@gmail.com" ,
"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
Name
Type
Notes
recoveryToken
string
Token issued returned by /recovery/validate
password
string
User's new password`
Type
Notes
User
Returns the updated user
curl --request POST \
--url http://localhost:5000/api/v1/auth/recovery/reset \
--header 'Content-Type: application/json' \
--data '{
"recoveryToken" : "f519da5e4a9be40cfc3c0fde97e60c0e6d17bdaa613f5ba537a45073f3865193",
"password": "testtest"
}'
{
"success" : true ,
"msg" : " Password reset" ,
"data" : {
"_id" : " 66675891cb17336d84c25d9f" ,
"firstname" : " User First Name" ,
"lastname" : " User Last Name" ,
"email" : " your_email@gmail.com" ,
"isActive" : true ,
"isVerified" : false ,
"createdAt" : " 2024-06-10T19:48:33.863Z" ,
"updatedAt" : " 2024-06-11T17:21:22.289Z" ,
"__v" : 0
}
}
GET
/api/v1/monitors
Method/Headers
Method/Headers
Value
Method
GET
Type
Notes
Array<Monitor>
Array of all monitors
curl --request GET \
--url http://localhost:5000/api/v1/monitors \
--header '<bearer_token>' \
{
"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
Type
Notes
Monitor
Single monitor with the id in the request parameter
curl --request GET \
--url http://localhost:5000/api/v1/monitors/664d070786e62625ac612ca1 \
--header '<bearer_token>' \
{
"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}?limit
Method/Headers
Method/Headers
Value
Method
GET
Type
Notes
Array<Monitor>
Array of monitors created by user with specified UserID
curl --request GET \
--url http://localhost:5000/api/v1/monitors/user/6645079aae0b439371913972?limit=25 \
--header '<bearer_token>' \
{
"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
Name
Type
Notes
Accepted Values
userId
string
UserId of current user
name
string
Monitor name
description
string
Monitor Description
type
string
Valid email address
"ping"
|"http"
url
string
URL of service or IP
isActive
boolean
interval
number
In ms
Type
Notes
Monitor
Returns newly created Monitor
curl --request POST \
--url http://localhost:5000/api/v1/monitors \
--header <bearer_token> \
--header 'Content-Type: application/json' \
--header 'User-Agent: insomnia/2023.5.8' \
--data '{
"userId": "66675891cb17336d84c25d9f",
"name": "Ping Google",
"description": "Google",
"type": "ping",
"url": "8.8.8.8",
"isActive": true,
"interval": 5000}'
{
"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
Type
Notes
None
No payload returned
curl --request POST \
--url http://localhost:5000/api/v1/monitors/delete/664e632a7a3ee9d620761938 \
--header '<bearer_token>' \
--header 'Content-Type: application/json' \
{
"success" : true ,
"msg" : " Monitor deleted"
}
POST
/api/v1/monitors/edit/{monitorId}
Method/Headers
Method/Headers
Value
Method
POST
Type
Notes
Monitor
Returns the updated monitor
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
}'
{
"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
}
}
POST
/api/v1/checks/{monitorId}
Method/Headers
Method/Headers
Value
Method
POST
Type
Notes
Check
Returns newly created check
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
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"
}'
{
"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
Type
Notes
Array<Checks>
Array of Check
objects
curl --request GET \
--url http://localhost:5000/api/v1/checks/66562414035c4ce6a8a610ac \
--header 'Authorization: <bearer_token>' \
{
"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
Type
Notes
Object
{deletedCount: n}
Returns an object showing how many items deleted
curl --request POST \
--url http://localhost:5000/api/v1/checks/delete/66562414035c4ce6a8a610ac \
--header 'Authorization: <bearer_token>' \
{
"success" : true ,
"msg" : " Checks deleted" ,
"data" : {
"deletedCount" : 3
}
}
POST
/api/v1/alerts/{monitorId}
Method/Headers
Method/Headers
Value
Method
POST
Type
Notes
Alert
Returns newly created Alert
"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
GET
/api/v1/alerts/user/{userId}
Method/Headers
Method/Headers
Value
Method
GET
Type
Notes
Array<Alert>
Returns all Alert
created by a User
curl --request GET \
--url http://localhost:5000/api/v1/alerts/user/6654d1a2634754f789e1f115 \
--header 'Authorization: <bearer_token>'
{
"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
Type
Notes
Array<Alert>
Returns an array of Alert
belonging to a specified Monitor
curl --request GET \
--url http://localhost:5000/api/v1/alerts/monitor/6657789ebf6766ee8e2d2edb \
--header 'Authorization: <bearer_token>' \
{
"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
Type
Notes
Alert
Returns specified Alert
curl --request GET \
--url http://localhost:5000/api/v1/alerts/66577ddae5ff3c91437d0887 \
--header 'Authorization: <bearer_token>' \
{
"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
Type
Notes
Alert
Returns edited Alert
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
curl --request POST \
--url http://localhost:5000/api/v1/alerts/edit/66577ddae5ff3c91437d0887 \
--header 'Authorization: <bearer_token>' \
--header 'Content-Type: application/json' \
--data '{
"acknowledgeStatus": true
}'
{
"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
Type
Notes
Alert
Returns the deleted Alert
curl --request POST \
--url http://localhost:5000/api/v1/alerts/delete/66577ddae5ff3c91437d0887 \
--header 'Authorization: <bearer_token>' \
{
"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
}
}
POST
/api/v1/checks/{monitorId}
Method/Headers
Method/Headers
Value
Method
POST
Type
Notes
Check
Returns newly created check
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
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"
}'
{
"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
Type
Notes
Array<Checks>
Array of Check
objects
curl --request GET \
--url http://localhost:5000/api/v1/checks/66562414035c4ce6a8a610ac \
--header 'Authorization: <bearer_token>' \
{
"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
Type
Notes
Object
{deletedCount: n}
Returns an object showing how many items deleted
curl --request POST \
--url http://localhost:5000/api/v1/checks/delete/66562414035c4ce6a8a610ac \
--header 'Authorization: <bearer_token>' \
{
"success" : true ,
"msg" : " Checks deleted" ,
"data" : {
"deletedCount" : 3
}
}
POST
/api/v1/alerts/{monitorId}
Method/Headers
Method/Headers
Value
Method
POST
Type
Notes
Alert
Returns newly created Alert
"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
GET
/api/v1/alerts/user/{userId}
Method/Headers
Method/Headers
Value
Method
GET
Type
Notes
Array<Alert>
Returns all Alert
created by a User
curl --request GET \
--url http://localhost:5000/api/v1/alerts/user/6654d1a2634754f789e1f115 \
--header 'Authorization: <bearer_token>'
{
"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
Type
Notes
Array<Alert>
Returns an array of Alert
belonging to a specified Monitor
curl --request GET \
--url http://localhost:5000/api/v1/alerts/monitor/6657789ebf6766ee8e2d2edb \
--header 'Authorization: <bearer_token>' \
{
"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
Type
Notes
Alert
Returns specified Alert
curl --request GET \
--url http://localhost:5000/api/v1/alerts/66577ddae5ff3c91437d0887 \
--header 'Authorization: <bearer_token>' \
{
"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
Type
Notes
Alert
Returns edited Alert
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
curl --request POST \
--url http://localhost:5000/api/v1/alerts/edit/66577ddae5ff3c91437d0887 \
--header 'Authorization: <bearer_token>' \
--header 'Content-Type: application/json' \
--data '{
"acknowledgeStatus": true
}'
{
"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
Type
Notes
Alert
Returns the deleted Alert
curl --request POST \
--url http://localhost:5000/api/v1/alerts/delete/66577ddae5ff3c91437d0887 \
--header 'Authorization: <bearer_token>' \
{
"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
}
}
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.
Made with contrib.rocks .