Middleware
✨ Open-source DORA metrics platform for engineering teams ✨
Install / Use
/learn @middlewarehq/MiddlewareREADME
<br /><br />
<p align="center"> <a href="https://www.middlewarehq.com/"><img src="https://github.com/middlewarehq/middleware/blob/main/media_files/logo.png" alt="Middleware Logo" width=300px></a> </p> <p align="center"><b>Open-source engineering management that unlocks developer potential</b></p> <p align="center"> <a href="https://github.com/middlewarehq/middleware/actions/workflows/build.yml"><img alt="continuous integration" src="https://img.shields.io/github/actions/workflow/status/middlewarehq/middleware/build.yml?branch=main&label=build&style=for-the-badge"></a> <a href="https://github.com/middlewarehq/middleware/graphs/commit-activity"><img alt="Commit activity per month" src="https://img.shields.io/github/commit-activity/m/middlewarehq/middleware?style=for-the-badge" /></a> <a href="https://github.com/middlewarehq/middleware/graphs/contributors"><img alt="contributors" src="https://img.shields.io/github/contributors-anon/middlewarehq/middleware?color=yellow&style=for-the-badge" /></a> <br/> <a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/apache%202.0-purple.svg?style=for-the-badge&label=license" alt="license" /></a> <img src="https://img.shields.io/github/stars/middlewarehq/middleware?style=for-the-badge" alt="Stars" /> <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=d3133c9b-3562-4048-863a-04bee8ad4818" /> </p> <p align="center"><a href="https://mhq.link/oss-community">Join our Open Source Community</a></p>
Introduction
Middleware is an open-source tool designed to help engineering leaders measure and analyze the effectiveness of their teams using the DORA metrics. The DORA metrics are a set of four key values that provide insights into software delivery performance and operational efficiency.
They are:
- Deployment Frequency: The frequency of code deployments to production or an operational environment.
- Lead Time for Changes: The time it takes for a commit to make it into production.
- Mean Time to Restore: The time it takes to restore service after an incident or failure.
- Change Failure Rate: The percentage of deployments that result in failures or require remediation.
Table of Contents
🚀 Features
- Integration with various CI/CD tools
- Automated collection and analysis of DORA metrics
- Visualization of key performance indicators
- Customizable reports and dashboards
- Integration with popular project management platforms
✨ Quick Start
⭐ Installing Middleware
-
Ensure that you have docker installed and running.
-
Open the terminal and run the following command:
docker volume create middleware_postgres_data docker volume create middleware_keys docker run --name middleware \ -p 3333:3333 \ -p 9696:9696 \ -p 9697:9697 \ -v middleware_postgres_data:/var/lib/postgresql/data \ -v middleware_keys:/app/keys \ -d middlewareeng/middleware:latest docker logs -f middleware
-
Wait for sometime for the services to be up.
-
The app shall be available on your host at http://localhost:3333.
🛠️ Troubleshooting
-
In case you want to stop the container, run the following command:
docker stop middleware -
In order to fetch latest version from remote and then starting the system, use following command:
docker pull middlewareeng/middleware:latest docker rm -f middleware || true docker run --name middleware \ -p 3333:3333 \ -v middleware_postgres_data:/var/lib/postgresql/data \ -v middleware_keys:/app/keys \ -d middlewareeng/middleware:latest docker logs -f middleware -
If you see an error like:
Conflict. The container name "/middleware" is already in use by container.
Then run following command before running the container again:docker rm -f middleware -
If you wish to delete all the data saved in the container, you can delete the volumes created by running the following command:
docker volume rm middleware_postgres_data middleware_keys
👩💻 Developer Setup
☁️ Using GitPod
Gitpod enables development on remote machines and helps you get started with Middleware if your machine does not support running the project locally.
If you want to run the project locally you can setup using docker or setup everything manually.
-
Click the button below to open this project in Gitpod.
-
This will open a fully configured workspace in your browser with all the necessary dependencies already installed.
After initialization, you can access the server at port 3333 of the gitpod instance.
🐳 Using Docker
[!IMPORTANT] We recommend minimum 16GB RAM when developing locally.
If you don't have docker installed, please install docker over here. Make sure docker is running.
-
Clone the Repository:
git clone https://github.com/middlewarehq/middleware -
Navigate to the Project Directory:
cd middleware -
Run
dev.shscript in the project root 🪄
./dev.shcreates a.envfile with required development environments and runs a CLI with does all the heavy lifting from tracking the container withdocker compose watchto providing you with logs from different services.
The usage is as follows:./local-setup.sh # Optional; See note ./dev.shYou may update the
env.exampleand setENVIRONMENT=prodto run it in production setup.
Further if any changes are required to be made to ports, you may update thedocker-compose.ymlfile, accordingly.Note about
local-setup.sh: While you don't need to run this script, it takes care of any local environment setup for automatic linting without which your PRs may fail the linter check. -
Access the Application: Once the project is running, access the application through your web browser at http://localhost:3333. Further, other services can be accessed at:
- The analytics server is available at http://localhost:9696.
- The sync server can be accessed at http://localhost:9697.
- The postgres database can be accessed at host:
localhost, port:5434, username:postgres, password:postgres, db name:mhq-oss. - The redis server can be accessed at host:
localhost, port:6385.
-
View the logs: Although the CLI tracks all logs, the logs of services running inside the container can be viewed in different terminals using the following commands:
Frontend logs
docker exec -it middleware-dev tail --lines 500 -f /var/log/web-server/web-server.logBackend api server logs
docker exec -it middleware-dev tail --lines 500 -f /var/log/apiserver/apiserver.logBackend sync server logs
docker exec -it middleware-dev tail --lines 500 -f /var/log/sync_server/sync_server.logRedis logs
docker exec -it middleware-dev tail --lines 500 -f /var/log/redis/redis.logPostgres logs
docker exec -it middleware-dev tail --lines 500 -f /var/log/postgres/postgres.log
🛠️ Manual Setup
To set up middleware locally, follow these steps:
-
Clone the Repository:
git clone https://github.com/middlewarehq/middleware.git -
Navigate to the Project Directory:
cd middleware -
Run Redis and Postgres Containers:
If you don't have docker installed, please install docker over here
Run the following commands to run Postgres and Redis using docker.
cd database-docker && docker-compose up -dIf you don't prefer Docker, you can choose to install Postgres and Redis manually.
Once you are done with using or developing Middleware, you can choose to close these running container. (NOTE: Don't do this if you are following this document and trying to run Middleware.)
cd database-docker/ docker-compose down -v -
Generate Encryption keys:
Generate encryption keys for the project by running the following command in the project root directory:
cd setup_utils && . ./generate_config_ini.sh && cd .. -
Backend Server Setup
-
Install python version
3.11.6-
For this you can install python from over here if you don't have it on your machine.
-
Install pyenev
git clone https://github.com/pyenv/pyenv.git ~/.pyenv -
A
-
-
