Data Project - Máster en Big Data & Cloud (EDEM) Equipo 2: Rafael Morata, Germán Devís, Salvador Gisbert, Noelia Andrade.
Lungium es una plataforma de monitorización y predicción de calidad del aire en tiempo real. Utiliza una arquitectura orientada a eventos para ingerir datos abiertos, procesarlos y generar alertas predictivas (a 1 hora vista) mediante un microservicio de Inteligencia Artificial.
El proyecto se basa en datos Open Data del Ayuntamiento de València y utiliza una estrategia ELT (Extract, Load, Transform) con almacenamiento Schema-on-Read para garantizar la resiliencia y escalabilidad.
- Docker y Docker Compose instalados.
- Git.
-
Clonar el repositorio y entrar en la carpeta:
git clone <https://github.com/salvador-gisbert/DataProject1.git> cd DATAPROJECT1
-
Levantar el entorno:
docker-compose up --build
Espera unos segundos hasta que todos los contenedores estén "healthy".
Una vez levantado el Docker, puedes acceder a las diferentes interfaces en tu navegador:
- URL: http://localhost:3000
- Usuario/Contraseña:
admin/admin123(si te pide cambiarla, puedes saltar el paso o poner una nueva).
- Ve al menú de Configuration (o Connections) -> Data Sources.
- Selecciona PostgreSQL.
- Baja hasta el final de la página (scroll down).
- Pulsa el botón "Save & Test" (debe salir un tick verde indicando conexión exitosa).
- Ve a la sección Dashboards y abre el dashboard principal ("Dashboard Aire" o similar).
- IMPORTANTE: En la esquina superior derecha, cambia el rango de tiempo a "Last 6 hours" (o "Last 12 hours") para ver los datos recién ingestados.
- URL: http://localhost:8501
- Aquí verás la interfaz visual para el usuario final con los mapas interactivos y las alertas de contaminación en tiempo real.
- URL: http://localhost:8000/mediciones
- Devuelve el JSON crudo con las últimas mediciones procesadas por el sistema.
El sistema sigue una arquitectura de microservicios desacoplada:
- Ingesta Robusta: Un
Producerconsulta la API OpenData de Valencia con lógica de reintentos (Backoff strategy). - Bus de Eventos (Kafka): Núcleo del sistema que garantiza persistencia.
- Procesamiento:
Consumer DB: Guarda el dato crudo (JSONB) en PostgreSQL.ML Worker: Genera predicciones y las escribe en DB.
- Almacenamiento: PostgreSQL 15 utilizando Vistas SQL para la capa de servicio.
DataProject1/
├── dashboard/ # Código del Frontend (Streamlit/Plotly)
├── grafana_config/ # Provisioning de Dashboards y Datasources
├── init-db/ # Scripts SQL (Tablas y Vistas)
├── api_db.py # API Gateway (FastAPI)
├── consumer_to_db.py # Consumer Kafka
├── ingesta_producer.py # Producer Kafka (Ingesta OpenData)
├── ml_worker.py # Worker IA: Genera predicciones
├── docker-compose.yml # Orquestación de contenedores
└── requirements.txt # Dependencias Python