Monitorización de líneas de producción

Proyecto para la asignatura de Cloud Computing en el Máster en Ingeniería Informática UGR.

License: GPL v3 Build Status codecov Open Source Love


Bases de datos

Se usarán PostgreSQL para gestionar y consultar mejor los datos de tipo DATE y MongoDB para almacenar a donde hay qué mandar las notificaciones, para que sea más cómodo gestionar las listas.

Para la implementación de ambas bases de datos se ha usado un ORM para mapear los objetos de la base de datos a objetos de Pyhton y marcar los esquemas que deben seguir estos. Para los dos microservicos se ha usado en mismo patrón: una clase para definir cómo son los objetos y que realiza la conexión a la base de datos y otra clase que define las operaciones con la base de datos.

Para el Microservicio Notifier estas clases son:

Para el Microservicio Monitor estas clases son:

Notifier

El ORM que se ha usado es PyMODM que está construido sobre Pymongo. Aquí se puede encontrar un enlace a la documentación oficial.

El motivo por el cual se elegió usar un ORM en vez de directamente el drive de MongoDB que existe para Python fue la necesidad de indicar unas restricciones sobre los datos. En concreto, en los emails que se almacenan, no deben ser una cadena cualquiera si no un email válido. Con el ORM es tan simple como hacer una clase que sea tu modelo (NotificationList_model.py) donde se indica los datos que vas a usar y de que tipo van a ser. En este caso tenemos dos tipos:

  1. Un String que sirve como ID para el documento y para guardar el nombre de la lista de correo. De este modo una lista de correo es única en toda la BD.
  2. Una lista de Emails, cada email único en la lista en la que se encuentra. De este modo, la BD no nos deja insertar emails que no son válidos y los emails solo se pueden insertar una vez en una lista de correo.

Después se ha implementado una clase que utiliza este modelo e implementa todas las operaciones con la BD(NotificationList.py). Un objeto de la clase NotificationList es el que se usará más tarde para realizar la inyección de dependencias.

Por último, la clase Notifier.py hace uso de un objeto que implemente una conexión a base de datos.

En el fichero [db.py][enlace_db_notifier] se puede ver como se realiza la inyección de dependencias.

Para más información se puede consultar cualquier enlace a los archivos anteriores que contienen más documentación.

Monitor

Este microservicio usa una BD SQL, concretamente PostgreSQL. El motivo principal de usar una BD de este tipo era que fuese más cómodo organizar los datos de downtime.

Para la implementación se ha usado el ORM SQLAlchemy. Aquí se puede consultar la documentación oficial.

El motivo por el cual se ha usado un ORM aquí es facilitar las consultas SQL que se realizan sobre la BD. De esta forma no hace falta usar SQL directamente en el código. sino que tenemos ina abstracción. Además los resultados de estas consultas se mapean a objetos Python directamente. Al igual que en el microservicio anterior se ha usado dos clases:

Y también, al igual que en el microservicio anterior, la clase Monitor.py hace uso de un objeto que implementa una conexión a base de datos.

En el fichero [db.py][enlace_db_monitor] se puede ver como se realiza la inyección de dependencias.

Para más información se puede consultar cualquier enlace a los archivos anteriores que contienen más documentación.