Skip to content

Service to Check Local Utilities Health and Alert Their Owners.

License

Notifications You must be signed in to change notification settings

antonioscardace/NetWatch

Repository files navigation

NetWatch • Utilities Health Monitor

Project for "Distributed Systems Engineering" course
Grade: 30 with honors / 30
Antonio Scardace @ Dept of Math and Computer Science, University of Catania

CodeFactor License Open Issues

Introduction

The project is a health checker. It aims to check in real-time the health of each observed local utility.
The utility can be a Docker Container, a Machine, or a Network Device in your local network.
If a utility changes its state (i.e. goes offline or comes back online), the monitor notifies the utility referent.
The alert can be a Slack message, an Email, or a Telegram message like these:

Telegram

Telegram

Exam Goals

An accurate report can be found in /docs/report.pdf
This project was created as an exam project to test a set of skills, including:

  • Knowledge of Microservices
  • Knowledge of Design Patterns
  • Knowledge of Java, Maven, and Spring Boot
  • Knowledge of Messaging Systems (RabbitMQ) and their Patterns
  • Knowledge of Git & GitHub

I also had the opportunity to practice the following skills:

  • Knowledge of ORMs (Hibernate)
  • Knowledge of Redis
  • Use of the Static Analysis Tools (CodeFactor, Snyk Code, and Sonar Qube)

System Infrastructure

Each microservice is contained in a Docker Container.
The only reachable containers in the Docker Network are Frontend, API Gateway, and Grafana.
The UML of the internal structure of each microservice is stored in /docs/uml/.

Infrastructure

Main Notes:

  • RabbitMQ provides an Exchange implementing the Publish-Subscribe Design Pattern.
  • The HTTP connection between Monitor and Data Manager is a Keep-Alive (persistent) connection.
  • Monitor implements the Factory-Method Design Pattern for the request module.
  • Notification implements the Factory-Method Design Pattern for the sender module.
  • Both Identity Manager and Monitor microservices use a Redis cache to store, respectively, active tokens and offline utilities. Storing data in a Redis cache rather than a local data structure (e.g. Hash Maps) offers several advantages like scalability, distribution, and persistence.

Here are some useful links for communication:

Grafana Demo

Grafana Logs

Getting Started

So that the repository is successfully cloned and the project runs, there are a few prerequisites:

  • A stable internet connection.
  • A certain amount of RAM and CPU is required.
  • Any set of valid credentials or tokens (e.g. for Telegram) to send notifications.
  • Need to download and install Docker.

Then, the repo can be cloned, dependencies can be installed, and the project can be run.

   $ git clone https://github.com/antonioscardace/NetWatch.git
   $ cd YOUR_PATH/NetWatch/
   $ bash run.sh

Useful Links

Container URL Description
grafana-charts https://localhost:8800/ Grafana Logs
rabbitmq http://localhost:15672/ RabbitMQ UI