The goal of this project is to implement a systems monitoring appliance deployed across several interconnected services.
The source code of the components is available under the components direcotry.
The services comprising the appliance are:
This is the authentication service. It provides the user credentials, sessions and rights functionalities of the application.
See the README.md file for further details on the service.
This service takes several measurements on the system, letting the clients know about the status of the system during a period of time.
See the README.md file for further details on the service.
The applications of the appliance.
A client application, serving as a console to configure and monitor the different services.
See the README.md file for further details on the application.
These are auxiliar components shared by several services.
The shared core functionalities.
See the README.md file for further details on the component.
The application comes with a pre-configured Docker setup to help with the development and testing (though it can be used as a base for more complex deployments).
To run the application using Docker Compose:
docker-compose -f docker/config/dev.yml up -dWhen run for the first time, the required Docker images will be built. Should images be rebuilt, do it with:
docker-compose -f docker/config/dev.yml buildTo stop and remove the containers:
docker-compose -f docker/config/dev.yml rm -sfvBy default data will not be persisted across executions. The configuration file docker/config/dev.yml can be edited to mount persistent volumes and use them for the persistent data.
The client service/application is run detached when run using the above Docker Compose call, but ready to accept input through a TTY. To attach the current shell to the container (this will redirect the current shell STDIN, STDOUT and STDERR to/from the container):
docker container attach dms2021client(use the sequence Ctrl+P,Ctrl+Q to detach again without interrupting the process)
To see the output of a container:
docker logs CONTAINER_NAME
# To keep printing the output as its streamed until interrupted with Ctrl+C:
# docker logs CONTAINER_NAME -fTo enter a running service as another subprocess to operate inside through a terminal:
docker exec -it CONTAINER_NAME /bin/bashTo see the status of the different containers:
docker container ps -aFor testing convenience, container path /tmp/sensor-volume in dms2021sensor1 and dms2021sensor2 are mapped to host directories /tmp/sensor1-volume and /tmp/sensor2-volume respectively. These can be used to test the sensor detection functionalities on a given file system without opening shells inside each sensor manually.
The directory scripts contain several helper scripts.
-
verify-style.sh: Runs linting (using pylint) on the components' code. This is used to verify a basic code quality. On GitHub, this CI pass will fail if the overall score falls below 7.00. -
verify-type-correctness.sh: Runs mypy to assess the type correctness in the components' code. It is used by GitHub to verify that no typing rules are broken in a commit. -
verify-commit.sh: Runs some validations before committing a changeset. Right now enforces type correctness (usingverify-type-correctness.sh). Can be used as a Git hook to avoid committing a breaking change: Append at the end of.git/hooks/pre-commit:scripts/verify-commit.sh