Files
Checkmate/README.md
T

337 lines
14 KiB
Markdown
Raw Normal View History

2024-06-07 13:38:32 -07:00
![](https://img.shields.io/github/license/bluewave-labs/bluewave-uptime)
![](https://img.shields.io/github/repo-size/bluewave-labs/bluewave-uptime)
![](https://img.shields.io/github/commit-activity/w/bluewave-labs/bluewave-uptime)
![](https://img.shields.io/github/last-commit/bluewave-labs/bluewave-uptime)
![](https://img.shields.io/github/languages/top/bluewave-labs/bluewave-uptime)
![](https://img.shields.io/github/issues-pr/bluewave-labs/bluewave-uptime)
![](https://img.shields.io/github/issues/bluewave-labs/bluewave-uptime)
2024-07-25 14:54:50 -07:00
<h1 align="center"><a href="https://bluewavelabs.ca" target="_blank">BlueWave Uptime</a></h1>
2024-07-25 14:54:50 -07:00
<p align="center"><strong>An open source server monitoring application</strong></p>
2024-09-04 21:50:26 -04:00
![Dashboard-dark](https://github.com/user-attachments/assets/db875138-164f-453c-a75e-889f88747578)
(yes, we have a light theme as well, but this looks better on readme.md)
2024-08-23 22:15:19 -04:00
2024-07-25 14:54:50 -07:00
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.
2024-09-19 07:41:42 -04:00
## Demo
See [BlueWave Uptime](https://uptime-demo.bluewavelabs.ca/) in action. The username is uptimedemo@demo.com and the password is Demouser1!
2024-07-28 17:34:23 -04:00
## Features
2024-08-09 16:42:37 -04:00
- [x] Completely open source, deployable on your servers
- [x] Website monitoring
- [x] Port monitoring
- [x] Ping monitoring
- [x] Incidents at a glance
- [x] Page speed monitoring
2024-08-19 14:28:18 -07:00
- [x] E-mail notifications
2024-08-09 16:42:37 -04:00
- [ ] Scheduled maintenance (in the works)
2024-07-28 17:36:54 -04:00
2024-08-09 15:48:10 -04:00
**Roadmap (short term):**
2024-08-13 13:29:12 -07:00
2024-08-13 10:33:28 -04:00
- [ ] Memory, disk and CPU monitoring
2024-08-09 16:42:37 -04:00
- [ ] 3rd party integrations
- [ ] DNS monitoring
- [ ] SSL monitoring
2024-07-28 17:34:23 -04:00
2024-08-09 15:48:10 -04:00
**Roadmap (long term):**
2024-08-13 13:29:12 -07:00
2024-08-13 10:33:28 -04:00
- [ ] Status pages
2024-08-09 15:48:10 -04:00
2024-07-28 17:34:23 -04:00
## Tech stack
2024-08-13 13:29:12 -07:00
- [ReactJs](https://react.dev/)
- [MUI (React framework)](https://mui.com/)
- [Node.js](https://nodejs.org/en)
- [MongoDB](https://mongodb.com)
2024-07-28 17:34:23 -04:00
2024-06-18 13:19:58 -07:00
## Contributing
We love contributors. Here's how you can contribute:
2024-08-13 13:29:12 -07:00
- Check [Contributor's guideline](https://github.com/bluewave-labs/bluewave-uptime/blob/master/CONTRIBUTING.md).
- Have a look at our Figma designs [here](https://www.figma.com/design/RPSfaw66HjzSwzntKcgDUV/Uptime-Genie?node-id=0-1&t=WqOFv9jqNTFGItpL-1). 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.
<a href="https://github.com/bluewave-labs/bluewave-uptime/graphs/contributors">
<img src="https://contrib.rocks/image?repo=bluewave-labs/bluewave-uptime" />
</a>
Made with [contrib.rocks](https://contrib.rocks).
2024-07-28 19:42:19 -04:00
![Alt](https://repobeats.axiom.co/api/embed/c35d999c82dbb31e967427ea4166c14da4172e73.svg "Repobeats analytics image")
2024-08-18 01:57:16 -04:00
[![Star History Chart](https://api.star-history.com/svg?repos=bluewave-labs/bluewave-uptime&type=Date)](https://star-history.com/#bluewave-labs/bluewave-uptime&Date)
2024-08-19 14:28:18 -07:00
Also check other developer and contributor-friendly projects of BlueWave:
2024-08-17 19:14:22 -04:00
- [BlueWave HRM](https://github.com/bluewave-labs/bluewave-hrm)
- [BlueWave Onboarding](https://github.com/bluewave-labs/bluewave-onboarding)
- [BlueWave DataRoom](https://github.com/bluewave-labs/bluewave-dataroom)
2024-09-25 23:39:56 -04:00
- [VerifyWise](https://github.com/bluewave-labs/verifywise)
2024-08-17 19:14:22 -04:00
## Getting Started
- Clone this repository to your local machine
2024-09-23 13:17:05 +08:00
1. [Quickstart for Users](#user-quickstart)
2024-08-13 13:29:12 -07:00
1. [Quickstart for Developers](#dev-quickstart)
1. [Docker Compose](#docker-compose)
2024-05-15 12:40:56 -07:00
1. [Installation (Client)](#client)
2024-06-24 16:04:06 -07:00
1. [Configuration(Client)](#config-client)
- [Environment](#env-vars-client)
2024-06-24 16:04:06 -07:00
1. [Getting Started (Server)](#server)
- [Install Server](#install-server)
- [Environment](#env-vars-server)
- [Database](#databases)
- [(Optional) Dockerised Databases](#optional-docker-databases)
- [Start Server](#start-server)
1. [API Documentation](#api-documentation)
2024-06-24 16:04:06 -07:00
1. [Error Handling](#error-handling)
1. [Contributors](#contributors)
2024-05-15 12:40:56 -07:00
---
2024-09-23 13:17:05 +08:00
#### <u> Quickstart for Users</u><a id="user-quickstart"></a>
2024-09-23 13:26:42 +08:00
1. Download our [Docker Compose File](/Docker/quickstart/docker-compose.yaml)
2. Download our [Quickstart script](/Docker/quickstart/quickstart.sh)
2024-09-23 13:17:05 +08:00
3. Place these files in a directory of your choice
4. Run `quickstart.sh` and generate config files
5. Run `docker compose up` to start the application
6. Application is running at `http://localhost`
2024-08-13 13:29:12 -07:00
#### <u>Quickstart for Developers</u> <a id="dev-quickstart"></a>
2024-08-13 13:46:25 -07:00
<span style="color: red; font-weight: bold;">MAKE SURE YOU CD TO THE SPECIFIED DIRECTORIES AS PATHS IN COMMANDS ARE RELATIVE</span>
2024-08-13 13:29:12 -07:00
##### Cloning and Initial Setup
1. Clone this repository
2. Checkout the `develop` branch `git checkout develop`
##### Docker Images Setup
3. <span style="color: red; font-weight: bold;">CD</span> to the `Docker` directory
4. Run `docker run -d -p 6379:6379 -v $(pwd)/redis/data:/data --name uptime_redis uptime_redis`
5. Run `docker run -d -p 27017:27017 -v $(pwd)/mongo/data:/data/db --name uptime_database_mongo uptime_database_mongo`
2024-06-24 16:04:06 -07:00
2024-08-13 13:29:12 -07:00
##### Server Setup
6. <span style="color: red; font-weight: bold;">CD</span> to `Server` directory, run `npm install`
7. While in `Server` directory, create a `.env` file with the [required environmental variables](#env-vars-server)
8. While in the `Server` directory, run `npm run dev`
##### Client Setup
9. <span style="color: red; font-weight: bold;">CD</span> to `Client` directory `run npm install`
10. While in the `Client` directory, create a `.env` file with the [required environmental variables](#env-vars-client)
11. While in the `Client` cirectory run `npm run dev`
##### Access Application
12. Client is running at `localhost:5173`
13. Server is running at `localhost:5000`
---
#### <u>Docker Compose</u> <a id="docker-compose"></a>
2024-06-24 16:04:06 -07:00
The fastest way to start the application is to use our Dockerfiles and [Docker Compose](https://docs.docker.com/compose/).
To get the application up and running you need to:
1. In the `Docker` directory run the build script `build_images.sh` to build docker images for the client, server, Redis database, and MongoDB database.
2024-09-08 14:37:21 -07:00
2. In the `Dokcer` directory create a `mongo.env` file with a username and password:
```
USERNAME_ENV_VAR=user
PASSWORD_ENV_VAR=password
```
2024-09-25 23:39:56 -04:00
3. In the `Docker` directory, create a `server.env` file with the [requried environmental variables](#env-vars-server) for the server. Sample file:
2024-06-24 16:04:06 -07:00
```
CLIENT_HOST="http://localhost:5173"
2024-07-26 18:57:32 -07:00
JWT_SECRET=<jwt_secret>
2024-06-24 16:04:06 -07:00
DB_TYPE="MongoDB"
2024-09-08 14:36:33 -07:00
DB_CONNECTION_STRING="mongodb://<username>:<password>@mongodb:27017/uptime_db"
2024-06-24 16:04:06 -07:00
REDIS_HOST="redis"
REDIS_PORT=6379
2024-07-26 18:57:32 -07:00
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>
2024-06-24 16:04:06 -07:00
```
2024-09-25 23:39:56 -04:00
4. In the `Client` directory, create a `client.env` file with the [required environmental variables](#env-vars-client) for the client. Sample file:
2024-06-24 16:04:06 -07:00
```
VITE_APP_API_BASE_URL="http://localhost:5000/api/v1"
2024-08-19 14:28:18 -07:00
VITE_APP_API_LOG_LEVEL="debug"
2024-06-24 16:04:06 -07:00
```
2024-09-08 14:37:21 -07:00
5. In the `Docker` directory run `docker compose up` to run the `docker-compose.yaml` file and start all four images.
2024-06-24 16:04:06 -07:00
2024-08-13 13:46:59 -07:00
That's it, the application is ready to use on port 80.
2024-06-24 16:04:06 -07:00
<br/>
### Client
2024-06-12 11:25:51 -07:00
#### <u>Installation</u>
1. Change directory to the `Client` directory
2. Install all dependencies by running `npm install`
<br/>
2024-06-12 11:25:51 -07:00
#### <u>Configuration</u> <a id="config-client"></a>
##### Environmental Variables <a id="env-vars-client"></a>
2024-09-06 11:51:55 -07:00
| 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` \| |
<br/>
2024-06-12 11:25:51 -07:00
#### <u>Starting Development Server</u>
1. Run `npm run dev` to start the development server.
---
### Getting Started (Server) <a id="server"></a>
#### <u>Manual Install</u> <a id="manual-install"></a>
##### Install Server <a id="install-server"></a>
1. Change directory to the `Server` directory
2. Install all dependencies by running `npm install`
<br/>
2024-05-10 14:34:04 -07:00
##### Environmental Variables <a id="env-vars-server"></a>
Configure the server with the following environmental variables:
2024-05-10 14:34:04 -07:00
2024-07-26 18:57:32 -07:00
| 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 | |
2024-05-10 14:34:04 -07:00
<br/>
2024-05-10 14:34:04 -07:00
##### Databases <a id="databases"></a>
2024-09-25 23:39:56 -04:00
This project requires two databases:
2024-09-25 23:39:56 -04:00
1. **Main Application Database:** The project uses MongoDB for its primary database, with a MongoDB Docker image provided for easy setup.
2. **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.
###### (Optional) Dockerised Databases <a id="optional-docker-databases"></a>
2024-06-24 16:04:06 -07:00
Dockerfiles for the server and databases are located in the `Docker` directory
<details>
<summary><b>MongoDB Image</b></summary>
Location: `Docker/mongoDB.Dockerfile`
2024-06-24 16:04:06 -07:00
The `Docker/mongo/data` directory should be mounted to the MongoDB container in order to persist data.
2024-06-24 16:04:06 -07:00
From the `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`
</details>
<details>
<summary><b>Redis Image</b></summary>
Location `Docker/redis.Dockerfile`
2024-06-24 16:04:06 -07:00
the `Docker/redis/data` directory should be mounted to the Redis container in order to persist data.
2024-06-24 16:04:06 -07:00
From the `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`
</details>
<br/>
##### Starting the Development Server <a id="start-server"></a>
- run `npm run dev` to start the development server
OR
- run `node index.js` to start server
2024-05-10 02:16:50 -04:00
2024-05-10 14:34:04 -07:00
---
#### API Documentation<a id="api-documentation"></a>
2024-05-10 14:34:04 -07:00
Our API is documented in accordance with the [OpenAPI spec](https://www.openapis.org/).
2024-05-10 14:34:04 -07:00
You can see the documentation on your local development server at [http://localhost:{port}/api-docs](http://localhost:5000/api-docs)
2024-05-10 14:34:04 -07:00
You can also view the documentation on our demo server at [https://uptime-demo.bluewavelabs.ca/api-docs](https://uptime-demo.bluewavelabs.ca/api-docs)
### Error handling
2024-05-27 11:03:12 -07:00
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.