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.
Roadmap (short term):
Roadmap (long term):
We love contributors. Here's how you can contribute:
Check Contributor's guideline .
Have a look at our Figma designs here . We encourage you to copy to your own Figma page, then work on it as it is read-only.
Open an issue if you believe you've encountered a bug
Make a pull request to add new features/make quality-of-life improvements/fix bugs.
Made with contrib.rocks .
Also check other developer and contributor-friendly projects of BlueWave:
Clone this repository to your local machine
Quickstart for Developers
Docker Compose
Installation (Client)
Configuration(Client)
Getting Started (Server)
Endpoints
Error Handling
Contributors
Quickstart for Developers
MAKE SURE YOU CD TO THE SPECIFIED DIRECTORIES AS PATHS IN COMMANDS ARE RELATIVE
Cloning and Initial Setup
Clone this repository
Checkout the develop
branch git checkout develop
CD to the Docker
directory
Run docker run -d -p 6379:6379 -v $(pwd)/redis/data:/data --name uptime_redis uptime_redis
Run docker run -d -p 27017:27017 -v $(pwd)/mongo/data:/data/db --name uptime_database_mongo uptime_database_mongo
CD to Server
directory, run npm install
While in Server
directory, create a .env
file with the required environmental variables
While in the Server
directory, run npm run dev
CD to Client
directory run npm install
While in the Client
directory, create a .env
file with the required environmental variables
While in the Client
cirectory run npm run dev
Client is running at localhost:5173
Server is running at localhost:5000
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=<jwt_secret>
DB_TYPE="MongoDB"
DB_CONNECTION_STRING="mongodb://mongodb:27017/uptime_db"
REDIS_HOST="redis"
REDIS_PORT=6379
TOKEN_TTL="99d"
PAGESPEED_API_KEY=<api_key>
SYSTEM_EMAIL_HOST="smtp.gmail.com"
SYSTEM_EMAIL_PORT=465
SYSTEM_EMAIL_ADDRESS=<system_email>
SYSTEM_EMAIL_PASSWORD=<system_email_password>
In the Client
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"
VITE_APP_API_LOG_LEVEL="debug"
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 80.
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
VITE_APP_LOG_LEVEL
Optional
string
Log level
"none"
|"error"
| "warn"
|
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
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
PAGESPEED_API_KEY
Optional
string
API Key for PageSpeed requests
SYSTEM_EMAIL_HOST
Required
string
Host to send System Emails From
SYSTEM_EMAIL_PORT
Required
number
Port for System Email Host
SYSTEM_EMAIL_ADDRESS
Required
string
System Email Address
SYSTEM_EMAIL_PASSWORD
Required
string
System Email Password
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
multipart/form-data
Name
Type
Notes
firstName
string
lastName
string
email
string
Valid email address
password
string
Min 8 chars, One Upper, one number, one special
role
Array<string>
Array of user roles
Type
Notes
User
User data
JWT
JSON web token
curl --request POST \
--url http://localhost:5000/api/v1/auth/register \
--header 'Content-Type: multipart/form-data' \
--form firstName=Alex \
--form lastName=Hollidaty \
--form [email protected] \
--form 'password=Testtest1!' \
--form 'role[]=admin'
{
"success" : true ,
"msg" : " User created successfully" ,
"data" : {
"user" : {
"_id" : " 66a1425b873da2207443f192" ,
"firstName" : " First Name" ,
"lastName" : " Last Name" ,
"email" : " [email protected] " ,
"isActive" : true ,
"isVerified" : false ,
"role" : [" admin" ],
"createdAt" : " 2024-07-24T18:05:15.852Z" ,
"updatedAt" : " 2024-07-24T18:05:15.852Z" ,
"__v" : 0
},
"token" : " <token>"
}
}
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
Type
Notes
User
User data
JWT
JSON web token
curl --request POST \
--url http://localhost:5000/api/v1/auth/login \
--header 'Authorization: Bearer undefined' \
--header 'Content-Type: application/json' \
--data '{
"email" : "[email protected] ",
"password": "Testtest1!"
}'
{
{
"success" : true ,
"msg" : " User logged in successfully" ,
"data" : {
"user" : {
"_id" : " 66a1425b873da2207443f192" ,
"firstName" : " First Name" ,
"lastName" : " Last Name" ,
"email" : " [email protected] " ,
"isActive" : true ,
"isVerified" : false ,
"role" : [" admin" ],
"createdAt" : " 2024-07-24T18:05:15.852Z" ,
"updatedAt" : " 2024-07-24T18:05:15.852Z" ,
"__v" : 0
},
"token" : " <token>"
}
}
}
POST
/api/v1/auth/user/{userId}
Method/Headers
Method/Headers
Value
Method
POST
content-type
multipart/form-data
Name
Type
Notes
firstName
string
Optional
lastName
string
Optional
profileIame
file
Optional
password
string
Required to change password
newPassword
string
Required to change password
Type
Notes
User
Returns the updated user
curl --request POST \
--url http://localhost:5000/api/v1/auth/user/66a1425b873da2207443f192 \
--header 'Authorization: <bearer_token>' \
--header 'Content-Type: multipart/form-data' \
--form firstName=Test \
--form lastName=Test \
--form profileImage=@/home/user/Desktop/cat.jpg \
--form 'newPassword=Testtest1!' \
--form 'password=Testtest2!'
{
"success" : true ,
"msg" : " User updated successfully" ,
"data" : {
"_id" : " 66a1425b873da2207443f192" ,
"firstName" : " First name" ,
"lastName" : " Last name" ,
"email" : " [email protected] " ,
"isActive" : true ,
"isVerified" : false ,
"role" : [" admin" ],
"createdAt" : " 2024-07-24T18:05:15.852Z" ,
"updatedAt" : " 2024-07-24T18:31:32.314Z" ,
"__v" : 0 ,
"avatarImage" : " <Base64 Image>"
}
}
GET
/api/v1/auth/users
Method/Headers
Method/Headers
Value
Method
GET
content-type
application/json
Type
Notes
Array<User>
Returns an array containing all users
curl --request GET \
--url http://localhost:5000/api/v1/auth/users \
--header 'Authorization: <bearer_token>\
{
"success" : true ,
"msg" : " Got all users" ,
"data" : [
{
"_id" : " 669e90072d5663d25808bc7b" ,
"firstName" : " First name" ,
"lastName" : " Last name" ,
"email" : " [email protected] " ,
"isActive" : true ,
"isVerified" : false ,
"role" : [" admin" ],
"createdAt" : " 2024-07-22T16:59:51.695Z" ,
"updatedAt" : " 2024-07-22T16:59:51.695Z" ,
"__v" : 0
}
]
}
POST
/api/v1/auth/recovery/request
Method/Headers
Method/Headers
Value
Method
POST
content-type
application/json
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" : "[email protected] "
}'
{
"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
content-type
application/json
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" : " [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
content-type
application/json
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" : " First Name" ,
"lastname" : " 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
}
}
GET
/api/v1/monitors
Method/Headers
Method/Headers
Value
Method
GET
content-type
application/json
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}?status
Method/Headers
Method/Headers
Value
Method
GET
content-type
application/json
Name
Type
Required
Notes
status
boolean
Optional
Check status
limit
number
Optional
Number of checks to return
sortOrder
string
Optional
desc
:Newest -> Oldest, asc
: Oldest -> Newest
Type
Notes
Monitor
Single monitor with the id in the request parameter
curl --request GET \
--url http://localhost:5000/api/v1/monitors/664d070786e62625ac612ca1?status=true?limit=0 \
--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
content-type
application/json
Name
Type
Required
Notes
status
boolean
Optional
Check status
type
string
Optional
Multiple allowed: http
| ping
| pagespeed
limit
number
Optional
Monitor status
sortOrder
string
Optional
desc
:Newest -> Oldest, asc
: Oldest -> Newest
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
content-type
application/json
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"
|pagespeed
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' \
--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
content-type
application/json
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
content-type
application/json
Name
Type
Notes
Accepted Values
name
string
Monitor name
description
string
Monitor Description
interval
number
In ms
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 '
{
"name": "Edited monitor",
"description": "Description",
"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.