An open source server monitoring application
(yes, we have a light theme as well, but this looks better on readme.md)
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.
See BlueWave Uptime in action. The username is [email protected] and the password is Demouser1!
- Completely open source, deployable on your servers
- Website monitoring
- Port monitoring
- Ping monitoring
- Incidents at a glance
- Page speed monitoring
- E-mail notifications
- Scheduled maintenance (in the works)
Roadmap (short term):
- Memory, disk and CPU monitoring
- 3rd party integrations
- DNS monitoring
- SSL monitoring
Roadmap (long term):
- Status pages
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 Users
- Quickstart for Developers
- Docker Compose
- Installation (Client)
- Configuration(Client)
- Getting Started (Server)
- API Documentation
- Error Handling
- Contributors
- Download our Docker Compose File
- Download our Quickstart script
- Place these files in a directory of your choice
- Run
quickstart.sh
and generate config files - Run
docker compose up
to start the application - Application is running at
http://localhost
MAKE SURE YOU CD TO THE SPECIFIED DIRECTORIES AS PATHS IN COMMANDS ARE RELATIVE
- Clone this repository
- Checkout the
develop
branchgit 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, runnpm install
- While in
Server
directory, create a.env
file with the required environmental variables - While in the
Server
directory, runnpm run dev
- CD to
Client
directoryrun npm install
- While in the
Client
directory, create a.env
file with the required environmental variables - While in the
Client
cirectory runnpm 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 scriptbuild_images.sh
to build docker images for the client, server, Redis database, and MongoDB database. -
In the
Dokcer
directory create amongo.env
file with a username and password:
USERNAME_ENV_VAR=user
PASSWORD_ENV_VAR=password
- In the
Docker
directory, create aserver.env
file with the requried environmental variables for the server. Sample file:
CLIENT_HOST="http://localhost:5173"
JWT_SECRET=<jwt_secret>
DB_TYPE="MongoDB"
DB_CONNECTION_STRING="mongodb://<username>:<password>@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 aclient.env
file with the required environmental 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 rundocker compose up
to run thedocker-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" | |
VITE_APP_DEMO | Optional | boolean |
Demo server or not | true |false | |
- 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 two databases:
- Main Application Database: The project uses MongoDB for its primary database, with a MongoDB Docker image provided for easy setup.
- Redis for Queue Management: A Redis database is used for the PingService’s queue system, and a Redis Docker image is included for deployment.
You may use the included Dockerfiles to spin up databases quickly if you wish.
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
- run
npm run dev
to start the development server
OR
- run
node index.js
to start server
Our API is documented in accordance with the OpenAPI spec.
You can see the documentation on your local development server at http://localhost:{port}/api-docs
You can also view the documentation on our demo server at https://uptime-demo.bluewavelabs.ca/api-docs
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.