Repository relativo al codice sviluppato per il capitolato C4 dell'azienda proponente Sync Lab S.r.L. per il progetto didattico di Ingegneria del Software A.A. 2024/25 del CdL Triennale in Informatica (L31) dell'Università degli Studi di Padova.
Le tecnologie adottate dal nostro Minimum Viable Product sono:
- TypeScript per la simulazione dei sensori che interagiscono con il sistema, inviando messaggi in formato JSON (
serializzati) al sistema tramite un message broker (nel nostro caso Apache Kafka) nel seguente formato:
{ "rentId": 1, "latitude": 78.32432, "longitude": 90.43567, "timestamp": 1234567890 }
- Apache Flink (Java) per sviluppare il cuore pulsante, ovvero il sistema a cui viene delegato il compito di
processare in tempo reale lo stream di dati in entrata provenienti dai sensori installati sui mezzi (nel nostro caso
specifico, i
simulatori) e arricchirli in maniera tale da inviare un prompt alla LLM il più completo possibile. Oltre ad Apache
Flink, per lo sviluppo del sistema sono state utilizzate altre tecnologie. Meritano di essere menzionate:
- R2DBC, ovvero un driver studiato appositamente secondo la specifica dei Reactive Streams, fornendo a noi un API non-bloccante per interagire con il database, come richiesto da Apache Flink per le richieste asincrone
- Project Reactor libreria per la gestione degli stream, non bloccante, utilizzata per realizzare le richieste asincrone al nostro database e alla LLM per la generazione dell'annuncio
- LangChain4j porting di LangChain per Java per effettuare le generazioni tramite la LLM
- Grafana come tool di osservabilità per i dati che vengono mandati dai sensori e le generazioni che vengono effettuate per i vari punti di interesse registrati in database.
Il sistema presenta un file compose.yml
necessario ad avviare l'intero sistema.
Per avviare il sistema, sarà quindi necessario eseguire semplicemente il comando docker compose up -d --build
.
Per terminare il sistema, basterà eseguire il comando docker compose down -v
.
Viene demandata a Docker anche la compilazione del job per Apache Flink (esente da test).
Per eseguire i test (compilando il job mediante il comando mvn clean package
o eseguendo esplicitamente i test con mvn test
) sarà necessario aver installato Maven e avere un Docker Engine avviato all'interno dell'ambiente dove il job verrà testato in maniera tale da poter eseguire i test di integrazione mediante TestContainers.
Per eseguire in locale il simulatore, sarà necessario aver installato Node all'interno del proprio ambiente di sviluppo (viene fornito il file .nvmrc
contenente la versione di Node).
Per avviare il simulatore, basterà eseguire il comando npm run app
.
Per avviare invece i relativi test, sarà necessario eseguire il comando npm test
.
Nominativo | Matricola |
---|---|
Andrea Perozzo | 2082849 |
Andrea Precoma | 2068227 |
Davide Marin | 2068234 |
Davide Martinelli | 2034341 |
Davide Picello | 2034825 |
Klaudio Merja | 2075538 |
Riccardo Milan | 2068231 |