Architettura Semantica
Questa pagina descrive il modello dati di IronFlock: le risorse principali e come si relazionano tra loro. Mentre la Panoramica dell’architettura copre i livelli fisici del sistema (edge, cloud, message broker), questa pagina si concentra sulla struttura logica — le relazioni tra progetti, dispositivi, app e dati.
Panoramica delle entità
Account
├─ App
│ └─ Release
└─ Project
├─ Device ──────────┐
│ └─ App Edge Component
├─ Group ───────────┘
├─ Release Installation
├─ Fleet Database
│ └─ Data Tables
├─ Dashboard
└─ AlarmRisorse principali
Account
Un account è l’identità di livello superiore — una persona o un’organizzazione che ha effettuato l’accesso a IronFlock. Un account possiede progetti e app. App e progetti sono entrambi figli diretti di un account ma esistono indipendentemente l’uno dall’altro.
App
Un’app è un pacchetto software distribuibile. Le app appartengono a un account, non a un progetto — una singola app può essere installata su molti progetti diversi. Un’app non viene eseguita autonomamente; funge da voce del catalogo le cui release possono essere installate sui dispositivi.
Release
Una release è una build immutabile e con versione di un’app. Solo le release nello stato READY possono essere installate sui dispositivi. Le release sono immutabili — per modificare il comportamento di un’app, viene pubblicata una nuova release.
Progetto
Un progetto è il confine primario di isolamento. Tutto ciò che si trova all’interno di un progetto — dispositivi, gruppi, installazioni, dati, dashboard, allarmi — è invisibile agli altri progetti. Ogni progetto ha il proprio realm WAMP sul message broker, un Fleet Database dedicato e il proprio insieme di dispositivi, gruppi, installazioni, dashboard e allarmi.
Dispositivo
Un dispositivo è una macchina Linux fisica o virtuale che esegue l’agente IronFlock. Ogni dispositivo appartiene esattamente a un progetto. Un dispositivo ospita i componenti edge delle release installate — i container eseguiti localmente sull’hardware. Un dispositivo può ospitare contemporaneamente componenti edge di più release e può essere membro di più gruppi.
Gruppo
Un gruppo è una raccolta logica di dispositivi all’interno di un progetto, utilizzata per operazioni in blocco. Un dispositivo può appartenere a più gruppi (molti-a-molti). Quando una release viene installata su un gruppo, ogni dispositivo membro riceve un’installazione che può ereditare la configurazione del gruppo o sovrascriverla localmente.
Installazione di release
Un’installazione di release è l’istanza in esecuzione di una release specifica su un dispositivo specifico. È il collegamento tra un dispositivo e una release all’interno di un progetto. Quando viene installata tramite un gruppo, l’installazione di ogni dispositivo può ereditare o sovrascrivere la configurazione del gruppo, fornendo valori predefiniti a livello di flotta con eccezioni per singolo dispositivo.
Group Installation
├─ Device A → eredita dal gruppo
├─ Device B → eredita dal gruppo
└─ Device C → sovrascrive con configurazione personalizzataFleet Database
Ogni progetto dispone di un Fleet Database dedicato — un database PostgreSQL con l’estensione TimescaleDB per i dati di serie temporali. I componenti edge sui dispositivi pubblicano la telemetria via WAMP, il servizio FleetDB la scrive nel database del progetto, e i dati sono interrogabili da dashboard, dal servizio di query AI e da strumenti esterni.
Dashboard
Una dashboard visualizza i dati del Fleet Database del progetto. Le dashboard appartengono a un progetto e possono combinare dati di più app e dispositivi in un’unica vista.
Allarme
Un allarme è una regola di avviso basata su soglie all’interno di un progetto. Gli allarmi monitorano i dati nel Fleet Database e attivano notifiche quando le condizioni vengono soddisfatte.
Diagramma delle relazioni tra entità
┌──────────┐
│ Account │
└──┬───┬───┘
│ │
│ │ owns 1:N
│ ▼
│ ┌─────────────────────┐
│ │ App │
│ └────────┬────────────┘
│ │ contains 1:N
│ ▼
│ ┌─────────────────────┐
│ │ Release │
│ └─────────────────────┘
│ ▲
│ │ references
│ owns 1:N │
▼ │
┌──────────────────────────────────────────────────────────────────┐
│ Project │
│ │
│ ┌──────────┐ N:N ┌──────────┐ │
│ │ Device │◆──────────◆│ Group │ │
│ └────┬─────┘ └────┬─────┘ │
│ │ hosts │ installs on │
│ │ edge components │ member devices │
│ │ 1:N │ │
│ │ ▼ │
│ │ ┌──────────────┐ │
│ └──────────────►│ Release │ (inherits or │
│ │ Installation│ overrides group) │
│ └──────────────┘ │
│ │
│ ┌───────────────────────┐ │
│ │ Fleet Database │ │
│ │ (TimescaleDB) │ │
│ │ ┌─────┐ ┌─────┐ │ │
│ │ │Table│ │Table│ ... │ │
│ │ └─────┘ └─────┘ │ │
│ └───────────────────────┘ │
│ ▲ │
│ │ queried by │
│ ┌───────────┴───────────┐ │
│ │ Dashboard │ │
│ └───────────────────────┘ │
│ │
│ ┌───────────────────────┐ │
│ │ Alarm │ │
│ │ (monitors FleetDB) │ │
│ └───────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────┘Riepilogo delle relazioni
| Relazione | Tipo | Descrizione |
|---|---|---|
| Account → Progetto | 1:N | Un account possiede più progetti |
| Account → App | 1:N | Un account possiede più app (indipendenti dai progetti) |
| App → Release | 1:N | Un’app contiene più release con versioni |
| Progetto → Dispositivo | 1:N | Ogni dispositivo appartiene esattamente a un progetto |
| Progetto → Gruppo | 1:N | I gruppi sono limitati a un progetto |
| Dispositivo ↔ Gruppo | N:N | Un dispositivo può essere in più gruppi; un gruppo contiene più dispositivi |
| Progetto → Fleet Database | 1:1 | Ogni progetto ha il proprio database dedicato |
| Progetto → Dashboard | 1:N | Le dashboard appartengono a un progetto e interrogano il suo Fleet Database |
| Progetto → Allarme | 1:N | Gli allarmi sono limitati a un progetto e monitorano il suo Fleet Database |
| Dispositivo → Installazione di release | 1:N | Un dispositivo ospita componenti edge di più installazioni di release |
| Installazione di release → Release | N:1 | Ogni installazione fa riferimento a una versione specifica della release |