Componente del sistema ServeEasy.
Il microservizio Gestione Cucina si occupa di implementare i seguenti casi d'uso del gruppo cucina:
UC-5 “visualizzare lista ordini”, dettagliato:
- UC-5.1 : visualizzazione ordini per postazione, il cuoco deve visualizzare gli ordini destinati alla sua postazione
UC-6 “gestione preparazione ordini”, dettagliato:
- UC-6.1 : notifica preparazione ordine, il cuoco deve segnalare la presa in carico dell’ordine
- UC-6.2 : notifica completamento ordine, il cuoco deve segnalare il completamento dell’ordine così da passare al successivo
- UC-6.3 : gestione priorità postazione, il cuoco può modificare la priorità di un certo ingrediente così da ridurre la pressione su una certa postazione o, viceversa, per aumentarne il traffico. In tal modo può manualmente agire sulla gestione del traffico verso la cucina.
Nello specifico quindi GestioneCucina risolve gli use case del gruppo “cucina”, espone le chiamate destinate ai dispositivi di cucina. Questo servizio conterrà un sistema a code, dove l’ordine in arrivo verrà classificato ed inserito in base al suo ingrediente principale. Gli ordini verranno gestiti dalle postazioni della cucina seguendo una politica FIFO.
La comunicazione con gli altri microservizi avviene tramite Message Broker come segue:
- Il microservizio GestioneComanda comunica verso GestioneCucina tramite il topic Kafka SendOrderEvent.
- Il microservizio GestioneCucina comunica verso GestioneComanda tramite il topic Kafka NotifyPrepEvent.
La comunicazione con il databse avviene tramite un adapter JPA
Il microservizio è stato implementato seguendo lo stile architetturale esagonale, seguendo lo schema port/adapter, per questo motivo viene strutturato in 3 parti:
-
Adattatori ponte tra il mondo esterno e il core del sistema, consentono al microservizio di comunicare con altre applicazioni, servizi o dispositivi esterni in modo indipendente dall'implementazione interna del sistema stesso. Sono presenti i seguenti Interface Adapter:
- EventControllers: SubOrderAdapter, permette la ricezione di messaggi tramite message broker dal microservizio GestioneComanda;
- HTTPControllers: RestApiCucina, permette di esporre API verso l'esterno.
-
Definisce gli oggetti, le entità e le operazioni che sono pertinenti al problema che il microservizio gestisce.
-
Adattatori ponte tra il core del sistema e l'infrastruttura esterna, gestendo le chiamate e le operazioni necessarie per accedere e utilizzare le risorse infrastrutturali. Sono presenti i seguenti Infrastructure Adapters:
- Repository: JPADBAdapter per la comunicazione con il database;
- MessageBroker: PubOrderAdapter per l'invio di messaggi sul topic verso il microservizio di GestioneComanda.
Apri Docker Desktop, apri un terminale e vai alla root directory del progetto e digita:
docker compose upManda in run il microservizio usando qualsiasi IDE oppure tramite Maven Wrapper con la seguente istruzione:
./mvnw clean install
./mvnw spring-boot:runKafdrop è un'interfaccia utente Web per visualizzare i topic di Kafka e sfogliare i gruppi dei consumers. Lo strumento visualizza informazioni circa: brokers, topics, partitions, consumers, e consente di visualizzare i messaggi.
Apri un browser e vai all'indirizzo http://localhost:9001.
phpMyAdmin è un'applicazione web che consente di amministrare un database MariaDB tramite un qualsiasi browser.
Apri un browser e vai all'indirizzo http://localhost:3307.
Il microservizio GestioneCucina espone 3 API verso l'esterno per mezzo dell'adattarore RestApiCucina in HTTPControllers, per la documentazione si rimanda alla documentazione completa via documenter.getpostman: https://documenter.getpostman.com/view/32004409/2sA3JF9iav
E' possibile usufruire delle API per verificare il corretto funzionamento del sistema via Postman tramite l'API all'indirizzo http://localhost:8080/...
-
Utilizzare il seguente comando per pubblicare sul topic specificato un messaggio
docker exec --interactive --tty broker kafka-console-producer --bootstrap-server broker:9092 --topic "sendOrderEvent"
docker exec --interactive --tty broker kafka-console-producer --bootstrap-server broker:9092 --topic "notifyPrepEvent"
-
Utilizzare il seguente comando per restare in ascolto sul topic specifico
docker exec --interactive --tty broker kafka-console-consumer --bootstrap-server broker:9092 --topic "sendOrderEvent" --from-beginning
docker exec --interactive --tty broker kafka-console-consumer --bootstrap-server broker:9092 --topic "notifyPrepEvent" --from-beginning
E' possibile eseguire i test di integrazione e di unità tramite il Maven Wrapper, che è uno strumento che consente di eseguire i comandi Maven senza dover avere Maven installato globalmente sul sistema, tramite l'istruzione:
./mvnw clean verifyIn questo progetto è integrato un tool per l'analisi statica: Apache Maven Checkstyle Plugin Per generare il sito del progetto e i report eseguire:
./mvnw siteI file di report si troveranno in target/site, in particolare il file di interesse è
checkstyle.html che è possibile aprire tramite un qualsiasi browser.
Per poter personalizzare le regole è possibile modificare il file checkstyle.xml e seguire le indicazioni
dei commenti in apertura.
Il report è disponibile grazie a Github pages della repository ServeEasy al seguente link: checkstyle.html
Inoltre è presente uno script python per generare i file csv e i grafici associati ai report, per poterlo avviare è necessario avere python installato sulla propria macchina ed eseguire il seguente comando per installare le librerie necessarie:
pip install -r python/requirements.txtSuccesivamente eseguire il seguente per poter avviare lo script:
python main.pyI file csv e le immagini png verranno salvati in target/output.
SonarQube è uno strumento open source di Continuous Inspection per il controllo della qualità del codice. Analizza il codice sorgente per individuare bug, vulnerabilità, code smell e problemi di mantenibilità. Fornisce un'analisi dettagliata del codice e suggerisce miglioramenti per garantire che il codice sia di alta qualità, sicuro e mantenibile.
All'inerno della nostra applicazione è stato implementato in un container docker, disponibile in localhost all'indirizzo http://localhost:9000 .
Seguire le seguenti istruzioni per poter utilizzare Sonaqube:
- accedere all'interfaccia localhost:9000
- inserire user e pasword iniziali (username: admin / password: admin);
- modicare la propria password con una propria locale;
- creare un nuovo progetto locale impostando nomi e branch desiderati;
- generare un token locale e specificare maven come proprio framework;
- lanciare su cmd il seguente comando:
.\mvnw clean verify sonar:sonar -Dsonar.projectKey=GestioneCucina -Dsonar.projectName='GestioneCliente' -Dsonar.host.url=http://localhost:9000 -Dsonar.token=[INSERIRE_PROPRIO_TOKEN_SONARQUBE]- attendere la fine della compilazione e ricaricare la pagina localhost:9000.