You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/03-devops/buildAutomation.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,5 +15,5 @@ Per automatizzare le attività di compilazione del codice sorgente, la gestione
15
15
</div>
16
16
Al fine di garantire il principio DRY e gestire in modo organizzato, centralizzato e chiaro le dipendenze presenti nei microservizi, si è scelto di utilizzare il *Gradle Version Catalog* in formato *TOML*.
17
17
18
-
Inoltre, è stato configurato il sistema di reporting *[Gradle build scans](https://scans.gradle.com/)* al fine di pubblicare un report ogniqualvolta vi sia un fallimento nel processo di build. Questo ci ha aiutati ad ispezionare ed analizzare i servizi in caso di fallimenti.
18
+
Inoltre, è stato configurato il sistema di reporting *[Gradle build scans](https://scans.gradle.com/)* al fine di pubblicare un report ogniqualvolta vi sia un fallimento nel processo di build. Questo ci ha aiutati ad ispezionare ed analizzare i microservizi in caso di fallimenti.
Copy file name to clipboardExpand all lines: docs/03-devops/continuousIntegration.md
+8-6Lines changed: 8 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -20,7 +20,7 @@ Il primo *workflow* è stato sviluppato a supporto dei microservizi dell'*Applic
20
20
Il *workflow* viene eseguito ogniqualvolta viene effettuato un *push* o una *pull request*.
21
21
I *job* che vengono eseguiti sono i seguenti:
22
22
23
-
1.*validation*: per prima cosa viene validato il *wrapper* di *Gradle* al fine di verificare che esso sia un *wrapper*valido e riconosciuto e non parte di un qualche attacco di *supply chain*.
23
+
1.*validation*: per prima cosa viene validato il *wrapper* di *Gradle* al fine di verificare che esso sia valido, riconosciuto e non parte di un qualche attacco di *supply chain*.
24
24
2.*build*: dopo che il *job**validation* è passato, viene eseguita la *build* del microservizio. Essa consiste nell'esecuzione dei test e dei controlli di qualità del codice su tutte le combinazioni di diversi sistemi operativi e diverse versioni del linguaggio utilizzato al fine di assicurare il corretto funzionamento sulle piattaforme d'interesse.
25
25
Infine viene caricata la coverage, calcolata tramite *JaCoCo* come anticipato, sul tool cloud-based *[Codecov](https://about.codecov.io/)*.
26
26
3.*release-and-delivery*: dopo che la *build* viene completata con successo, se il *workflow* ha accesso ai segreti (quindi solo nel caso di *push* sulla *repository* originale) viene eseguita la *release* su *GitHub Release* e il *delivery* su *GitHub Packages* del microservizio stesso. Questo viene effettuato sfruttando la *GitHub Action***release-and-delivery-action** sviluppata dal team e descritta in seguito.
@@ -48,7 +48,7 @@ I *job* che vengono eseguiti sono i seguenti:
48
48
## Digital Twins
49
49
50
50
Il terzo *workflow* è stato sviluppato a supporto dei modelli *Digital Twins* modellati tramite il linguaggio *Digital Twins Definition Language* (*DTDL*).
51
-
In questo *workflow* è presente un singolo *job*-*validate* -, eseguito ogniqualvolta viene eseguito il *push* o una *pull request*, il quale, tramite l'ausilio della *GitHub Action***dtdl-validator-action**, sviluppata dal team, verifica la validità dei modelli *DTDL* sviluppati.
51
+
In questo *workflow* è presente un singolo *job**validate*, eseguito ogniqualvolta viene effettuato il *push* o una *pull request*, il quale tramite l'ausilio della *GitHub Action***dtdl-validator-action** sviluppata dal team verifica la validità dei modelli *DTDL* sviluppati.
52
52
53
53
## Azure Function
54
54
@@ -68,25 +68,27 @@ I *job* che vengono eseguiti sono i seguenti:
68
68
69
69
### release-and-delivery-action
70
70
71
-
La *GitHub Action*[`release-and-delivery-action`](https://github.com/SmartOperatingBlock/release-and-delivery-action) è stata sviluppata con lo scopo di agevolare la gestione del processo di release e di delivery di un progetto. Dapprima, l'azione si occupa di effettuare la *release* attraverso l'esecuzione dei comandi definiti in input, successivamente, se la release è stata effettuata, costruisce l'*immagine Docker* con la stessa versione della *release* appena effettuata. Infine ne effettua il delivery su un *Container Registry* fornito in input. Al fine di permettere un utilizzo generico è possibile escludere il processo di *release* ed effettuare solamente la costruzione e il *delivery* dell'*immagine* del container o viceversa.
71
+
La *GitHub Action*[`release-and-delivery-action`](https://github.com/SmartOperatingBlock/release-and-delivery-action) è stata sviluppata con lo scopo di agevolare la gestione del processo di release e di delivery di un progetto. Dapprima, l'azione si occupa di effettuare la *release* attraverso l'esecuzione dei comandi definiti in input, successivamente, se essa è stata effettuata, costruisce l'*immagine Docker* con la stessa versione della *release* appena effettuata. Infine ne effettua il delivery su un *Container Registry* fornito in input.
72
+
73
+
Al fine di permettere un utilizzo generico è possibile escludere il processo di *release* ed effettuare solamente la costruzione e il *delivery* dell'*immagine* del container o viceversa.
72
74
73
75
### documentation-ghp-action
74
76
75
77
La *GitHub Action*[`documentation-ghp-action`](https://github.com/SmartOperatingBlock/documentation-ghp-action) è stata sviluppata con lo scopo di agevolare la generazione e la pubblicazione della documentazione dei microservizi. In particolare, vengono messi a disposizione per l'utilizzatore tre tipi di documentazione:
76
78
77
-
-*Documentazione del codice sorgente*: per quanto riguarda la documentazione del codice sorgente, al fine di supportare qualsiasi linguaggio e qualsiasi *documentation engine,* i comandi di generazione vengono specificati in input da parte dell'utilizzatore.
79
+
-*Documentazione del codice sorgente*: al fine di supportare qualsiasi linguaggio e qualsiasi *documentation engine*, i comandi di generazione vengono specificati in input da parte dell'utilizzatore.
78
80
-*Documentazione delle API REST*: per quanto riguarda la documentazione delle *API REST* si richiede l'adozione della specifica [*OpenAPI*](https://swagger.io/resources/open-api/). In particolare viene richiesto all'utilizzatore di fornire in input il *path* del file in formato *yaml* contenente la documentazione.
79
81
-*Documentazione degli eventi*: per quanto riguarda la documentazione degli eventi si richiede l'adozione della specifica [*AsyncAPI*](https://www.asyncapi.com/). In particolare viene richiesto all'utilizzatore di fornire in input il *path* del file in formato *yaml* contenente la documentazione.
80
82
81
83
Le documentazioni generate vengono pubblicate su un sito web associato alla *repository* tramite il servizio di hosting *GitHub Pages*. Al fine di permettere un utilizzo generico è possibile selezionare quali documentazioni generare.
82
84
83
85
### dtdl-validator-action
84
86
85
-
La *GitHub Action*[`dtdl-validator-action`](https://github.com/SmartOperatingBlock/dtdl-validator-action) è stata sviluppata con lo scopo di permettere la validazione dei modelli dei Digital Twins scritti in *DTDL*. In particolare, essa sfrutta il validatore [*DTDL Validator*](https://github.com/Azure-Samples/DTDL-Validator) sviluppato da *Microsoft*, adattandolo ad un utilizzo in pipeline di Continuous Integration.
87
+
La *GitHub Action*[`dtdl-validator-action`](https://github.com/SmartOperatingBlock/dtdl-validator-action) è stata sviluppata con lo scopo di permettere la validazione dei modelli dei Digital Twins scritti in *DTDL*. In particolare, essa sfrutta il validatore [*DTDL Validator*](https://github.com/Azure-Samples/DTDL-Validator) sviluppato da *Microsoft*, adattandolo ad un utilizzo in pipeline di *Continuous Integration*.
86
88
87
89
## Automatic Dependency Update
88
90
89
91
Al fine di automatizzare l'aggiornamento delle dipendenze dei software sviluppati sono stati utilizzati i seguenti bot:
90
92
91
-
-[*Renovate*](https://www.mend.io/renovate/): configurato per creare una *pull request* su un branch ad-hoc ogniqualvolta è presente una nuova versione di una dipendenza utilizzata nel progetto. Al fine di permettere il *DRY* delle configurazioni è stata creata una *repository*[`renovate-config`](https://github.com/AndreaGiulianelli/renovate-config) contenente tutte le configurazioni utilizzate.
93
+
-[*Renovate*](https://www.mend.io/renovate/): configurato per creare una *pull request* su un branch ad-hoc ogniqualvolta sia presente una nuova versione di una dipendenza utilizzata nel progetto. Al fine di permettere il *DRY* delle configurazioni è stata creata una *repository*[`renovate-config`](https://github.com/AndreaGiulianelli/renovate-config) contenente tutte le configurazioni utilizzate.
92
94
-[*Mergify*](https://mergify.com/): utilizzato per velocizzare ed automatizzare i merge delle *pull request* nel branch di sviluppo principale. Come *merging strategy* è stato impiegato il *rebase*.
Copy file name to clipboardExpand all lines: docs/03-devops/licence.md
+3-1Lines changed: 3 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -18,7 +18,9 @@ Di seguito una tabella che elenca i permessi, le limitazioni e le condizioni che
18
18
| ✅ Distribuzione |||
19
19
| ✅ Uso privato |||
20
20
21
-
Tramite le funzionalità offerte da *Intellij-IDEA* e *VSCode*, utilizzati per lo sviluppo, abbiamo applicato il corrispettivo *Copyright Notice Header* in ogni file sorgente.
21
+
Tramite le funzionalità offerte da *Intellij-IDEA* e *VSCode*, utilizzati per lo sviluppo, abbiamo applicato il corrispettivo *Copyright Notice Header* in ogni file sorgente.
22
+
23
+
Di seguito vengono descritte le licenze delle principali librerie e framework utilizzati.
Per agevolare la configurazione di entrambi gli stack si è fatto uso di due plugin *Gradle*, rispettivamente [`gradle-kotlin-qa`](https://github.com/DanySK/gradle-kotlin-qa) e [`gradle-java-qa`](https://github.com/DanySK/gradle-java-qa).
23
24
L'esecuzione di questi controlli avviene anche prima di ciascun commit effettuato tramite l'*hook pre-commit* descritto precedentemente.
24
25
25
-
Al fine di supportare ulteriormente il processo di Quality Assurance tramite ad esempio l'analisi e il rilevamento di code smell, problemi di sicurezza, debito tecnico e duplicazione di codice si è fatto uso dei servizi cloud-based [*SonarCloud*](https://www.sonarsource.com/products/sonarcloud/) e [*GitGuardian*](https://www.gitguardian.com/).
26
+
Al fine di supportare ulteriormente il processo di *Quality Assurance* tramite ad esempio l'analisi e il rilevamento di *code smell*, problemi di sicurezza, debito tecnico e duplicazione di codice si è fatto uso dei servizi cloud-based [*SonarCloud*](https://www.sonarsource.com/products/sonarcloud/) e [*GitGuardian*](https://www.gitguardian.com/).
Copy file name to clipboardExpand all lines: docs/03-devops/workflowOrganization.md
+6-6Lines changed: 6 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -29,22 +29,22 @@ I branch utilizzati dal workflow sono i seguenti:
29
29
Inoltre, al fine di esplicitare maggiormente il significato dei commit si è scelto di utilizzare la specifica *[Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/)*, che ha semplificato l'utilizzo di tool automatici per il versionamento dell'applicazione. I tipi di commit adottati sono i seguenti:
30
30
31
31
-`build`: riguardano cambiamenti che interessano il build system oppure dipendenze esterne
32
-
-`chore`: riguardano cambiamenti generici, indica l'aggiunta o la modifica di codice correlato a attività di manutenzione generale, come la gestione dei file o altre attività che non introducono nuove funzionalità o risolvono bug.
32
+
-`chore`: riguardano cambiamenti generici, indica l'aggiunta o la modifica di codice correlato a attività di manutenzione generale come la gestione dei file o altre attività che non introducono nuove funzionalità o risolvono bug
33
33
-`ci`: riguardano cambiamenti nella configurazione dei file e negli script di *Continuous Integration*
34
34
-`docs`: riguardano cambiamenti alla documentazione di progetto
35
35
-`feat`: riguardano l'aggiunta di una nuova feature
36
36
-`fix`: riguardano la risoluzione di un bug
37
37
-`perf`: riguardano un cambiamento del codice per il miglioramento delle performance del sistema
38
-
-`refactor`: riguardano un cambiamento del codice che non risolve un bug e non aggiunge nessuna feature, quindi un'attività di refactoring.
38
+
-`refactor`: riguardano un cambiamento del codice che non risolve un bug e non aggiunge nessuna feature, quindi un'attività di refactoring
39
39
-`style`: riguardano modifiche allo stile del codice che non impattano le funzionalità
40
-
-`revert`: riguardano l'annullamento di modifiche portate da commit precedenti.
40
+
-`revert`: riguardano l'annullamento di modifiche portate da commit precedenti
41
41
-`test`: riguardano l'aggiunta o la modifica di test
42
42
43
43
Al fine di controllare il corretto utilizzo della specifica *Conventional Commits* ed il rispetto degli standard di qualità sul codice prodotto sono stati utilizzati i seguenti *hook* per *Git*:
44
44
45
-
-*Pre commit*: si verifica il rispetto degli standard di qualità sul codice mediante l'utilizzo dei task *Gradle* forniti dalle suite di *Quality Assurance* descritte nel seguito
46
-
-*Commit msg*: si verifica il rispetto della specifica *Conventional Commit*
47
-
-*Post commit*: si verifica che il commit prodotto sia *signed*. In caso di mancata firma del commit verrà visualizzato un warning utile per lo sviluppatore, ma non verrà fatto fallire
45
+
-*pre-commit*: verifica il rispetto degli standard di qualità sul codice mediante l'utilizzo dei task *Gradle* forniti dalle suite di *Quality Assurance* descritte in seguito
46
+
-*commit-msg*: verifica il rispetto della specifica *Conventional Commit*
47
+
-*post-commit*: verifica che il commit prodotto sia *signed*. In caso di mancata firma del commit verrà visualizzato un warning utile per lo sviluppatore, ma non verrà fatto fallire
48
48
49
49
Essi sono stati configurati attraverso il plugin *Gradle*[`gradle-pre-commit-git-hooks`](https://github.com/DanySK/gradle-pre-commit-git-hooks).
Copy file name to clipboardExpand all lines: docs/04-implementation/index.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,28 +1,28 @@
1
1
---
2
2
title: Implementazione
3
3
layout: default
4
-
has_children: true
4
+
has_children: false
5
5
nav_order: 5
6
6
---
7
7
# Implementazione
8
8
9
9
Considerando l'obbiettivo della relazione, in questa sezione verranno presentati i principali linguaggi e le principali tecnologie utilizzate senza entrare nei dettagli implementativi.
10
10
11
-
## Phisical Layer
11
+
## Physical Layer
12
12
13
13
La *Centralina di zona* è stata sviluppata utilizzando il linguaggio *C++* sfruttando il framework *Wiring* mentre il *Gateway di blocco* è stato sviluppato utilizzando [*Node-RED*](https://nodered.org/).
14
14
15
15
## Digital Twins Layer
16
16
17
-
Per la modellazione dei Digital Twins si è sfruttato il linguaggio *Digital Twins Definition Language* (DTDL) mentre per lo sviluppo della *Azure Function* si è utilizzato *C#*.
17
+
Per la modellazione dei *Digital Twins* si è sfruttato il linguaggio *Digital Twins Definition Language* (DTDL) mentre per lo sviluppo della *Azure Function* si è utilizzato *C#*.
18
18
19
19
## Application Layer
20
20
21
21
Considerando che ogni microservizio, seguendo i principi dello stile architetturale, può essere implementato utilizzando lo stack tecnologico più adeguato, si è fatto uso del linguaggio *Java* per il microservizio *Automation Management* e di *Kotlin* per i restanti.
22
22
Le principali librerie e framework utilizzati sono stati:
23
23
24
24
+**Kafka Clients**, per l'interazione con l'event broker
25
-
+**Ktor**, per la realizzazione delle API Rest
25
+
+**Ktor**, per la realizzazione delle API REST
26
26
+**Kmongo**, per l'interazione con MongoDB
27
27
+**JaCaMo**, per lo sviluppo del sistema multi-agente presente nel microservizio *Automation Management*
28
28
+**Vert.X**, per lo sviluppo del microservizio *API Gateway*
Copy file name to clipboardExpand all lines: docs/05-conclusion/index.md
+3-4Lines changed: 3 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,9 +6,8 @@ nav_order: 6
6
6
---
7
7
# Conclusioni
8
8
9
-
L'impiego delle tecniche di *Domain-Driven Design* ha permesso di comprendere in modo approfondito un dominio complesso come quello sanitario. In particolare, grazie alle tecniche di *knowledge crunching* utilizzate nei primi meeting, è stato possibile comprendere il funzionamento attuale e il funzionamento atteso del sistema, oltre che i processi, le responsabilità e il linguaggio tecnico. L'utilizzo di un sito di progetto su *Confluence* e di strumenti come *Miro* e *Figma* ha permesso da un lato di simulare un contesto reale, mentre dall'altro ha semplificato la collaborazione e permesso una condivisione della conoscenza tra i componenti del team.
9
+
L'impiego delle tecniche di ***Domain-Driven Design*** ha permesso di comprendere in modo approfondito un dominio complesso come quello sanitario. In particolare, grazie alle tecniche di *Knowledge Crunching* utilizzate nei primi meeting, è stato possibile comprendere il funzionamento attuale e il funzionamento atteso del sistema oltre che i processi, le responsabilità e il linguaggio tecnico. L'utilizzo di un sito di progetto su *Confluence* e di strumenti come *Miro* e *Figma* ha permesso da un lato di simulare un contesto reale, mentre dall'altro ha semplificato la collaborazione e permesso una condivisione della conoscenza tra i componenti del team.
10
10
11
-
Inoltre, l'utilizzo degli elementi del design strategico del DDD, in particolare l'identificazione dei sottodomini e la progettazione dei *bounded context* con le relative relazioni espresse nella *context map*, ha permesso una migliore gestione della complessità evitando al tempo stesso di inserire ambiguità nella conoscenza e nella progettazione.
12
-
13
-
Infine, l'utilizzo di pratiche di *DevOps* e la progettazione di pipeline di *Continuous Integration* hanno evitato la ripetizione di attività manuali, in particolare l'analisi statica del codice, l'esecuzione di test di regressione, il rilascio e il delivery del software, automatizzando i processi ed aumentando la qualità e la produttività.
11
+
Inoltre, l'utilizzo degli elementi del design strategico del DDD, in particolare l'identificazione dei sottodomini e la progettazione dei *bounded context* con le relative relazioni espresse nella *Context Map*, ha permesso una migliore gestione della complessità evitando al tempo stesso di inserire ambiguità nella conoscenza e nella progettazione.
14
12
13
+
Infine, l'utilizzo di pratiche di ***DevOps*** e la progettazione di pipeline di *Continuous Integration* hanno evitato la ripetizione di attività manuali come l'analisi statica del codice, l'esecuzione di test di regressione ed il rilascio e delivery del software, automatizzando così i processi ed aumentando la qualità e la produttività.
0 commit comments