Installing Uptime Manager

Quickstart for users (quick method)

  1. Download our Docker compose file

  2. Run docker compose up to start the application

  3. Now the application is running at http://localhost


Quickstart for users (remote server)

  1. Download our Docker compose file

  2. Edit the UPTIME_APP_API_BASE_URL variable in the docker-compose file to point to your remote server.

  3. Run docker compose up to start the application

  4. Now the application is running at http://<remote_server_ip>


Quickstart for developers

Make sure you change the directory to the specified directories, as paths in commands are relative.

Cloning and initial setup

  1. Clone this repository.

  2. Checkout the develop branch git checkout develop

Setting up Docker images

  1. Change directory to the Docker/dev directory

  2. Build the docker images by running the build_images.sh script

  3. Run docker run -d -p 6379:6379 -v $(pwd)/redis/data:/data --name uptime_redis uptime_redis

  4. Run docker run -d -p 27017:27017 -v $(pwd)/mongo/data:/data/db --name uptime_database_mongo uptime_database_mongo

Server setup

  1. CD to Server directory, and run npm install

  2. While in Server directory, create a .env file with the required environmental variables

  3. While in the Server directory, run npm run dev

Client setup

  1. CD to Client directory run npm install

  2. While in the Client directory, create a .env file with the required environmental variables

  3. While in the Client directory run npm run dev

Access the application

  1. Client is now running at localhost:5173

  2. Server is now running at localhost:5000


Manual installation

Client installation

  1. Change directory to the Client directory

  2. Install all dependencies by running npm install

  3. Add a .env file to the Client directory with the following options:

Environment variables

Starting the Client development server

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

Server Installation

  1. Change the directory to the Server directory

  2. Install all dependencies by running npm install

  3. Add a .env file to the Server directory with the following options:

Environment variables

Configure the server with the following environmental variables:


Databases

This project requires two databases:

  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

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

  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 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

  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


API documentation

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

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

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.

Last updated