RoboMetrics
RoboMetrics is a tool developed to messure system usage in a distribuited manner. Is a Python library for measuring system resources. Specially focused on CPU, Memory and GPU usage. It is designed to be used in a wide range of applications, from monitoring system resources to testing and benchmarking.
Goals of RoboMetrics:
- Provide a simple way to measure resources without losing data in the process.
- Be able to measure resources in real-time.
- Interconnect workers in a network.
https://github.com/RoBorregos/robometrics
Installation
To install the client install it via pip:
To install the server:
Architecture
RoboMetrics is designed to be modular, extensible and distributed. It is composed of four main components:
- Process: This represent your normal Python/C++ process/application. Inn order to measure its resources, you only need to import the
robometrics.lib.register
module and callregister
.
from robometrics.lib.register import Register
Register.async_auto_register() # Recomended for non-blocking calls
Register.auto_unregister()
- Workers: The worker is a module made to run in the background in a host machine. The worker is responsible for collecting data from the registered processes and sending it to the intake server (or in its defect, save the data locally).
To start a worker, you only need to run the entry point robometrics.worker.worker
.
- Intake Server: The intake server is a server that receives data from the workers and stores it in a database. The server is responsible for managing the data and providing an API to access it.
The current implementation relies on a mongo database, but can be worked towards a more general solution. There is a docker-compose file that can be used to start the db.
To start the server, you only need to run the entry point robometrics.server.server
.
- RoboMetrics-Viz: The visualization module is a web application that connects to the intake server and displays the data in a user-friendly way. The web application is built using Next.js and Vega-Lite.
Refer to the viz repo: RoboMetrics-Viz
Recomendations
The modules are pretend to used in a robotics enviroment or a distributed system. This way each host sould be responsible to run a worker and a process. The intake server can be run in a central server or in a server that is always on. (Other alternative is to run the worker and process without a central server and run robometrics-sync
to sync the data to a central server)