Semantische Architektur
Diese Seite beschreibt das Datenmodell von IronFlock: die Kernelemente und ihre Beziehungen zueinander. Während die Architekturübersicht die physischen Schichten des Systems (Edge, Cloud, Message Broker) behandelt, liegt der Fokus hier auf der logischen Struktur — den Beziehungen zwischen Projekten, Geräten, Apps und Daten.
Entitätsübersicht
Account
├─ App
│ └─ Release
└─ Projekt
├─ Gerät ───────────┐
│ └─ App-Edge-Komponente
├─ Gruppe ──────────┘
├─ Release-Installation
├─ Fleet-Datenbank
│ └─ Datentabellen
├─ Dashboard
└─ AlarmKernelemente
Account
Ein Account ist die oberste Identität — eine Person oder Organisation, die bei IronFlock angemeldet ist. Ein Account besitzt Projekte und Apps. Apps und Projekte sind direkte Kinder eines Accounts, existieren aber unabhängig voneinander.
App
Eine App ist ein deploybares Softwarepaket. Apps gehören zu einem Account, nicht zu einem Projekt — eine einzelne App kann in vielen verschiedenen Projekten installiert werden. Eine App läuft nicht eigenständig; sie dient als Katalogeintrag, dessen Releases auf Geräten installiert werden können.
Release
Ein Release ist ein unveränderlicher, versionierter Build einer App. Nur Releases im Status READY können auf Geräten installiert werden. Releases sind unveränderlich — um das Verhalten einer App zu ändern, wird ein neuer Release veröffentlicht.
Projekt
Ein Projekt ist die primäre Isolationsgrenze. Alles innerhalb eines Projekts — Geräte, Gruppen, Installationen, Daten, Dashboards, Alarme — ist für andere Projekte unsichtbar. Jedes Projekt hat seinen eigenen WAMP-Realm auf dem Message Broker, eine dedizierte Fleet-Datenbank und eigene Geräte, Gruppen, Installationen, Dashboards und Alarme.
Gerät
Ein Gerät ist eine physische oder virtuelle Linux-Maschine, auf der der IronFlock-Agent läuft. Jedes Gerät gehört zu genau einem Projekt. Ein Gerät hostet die Edge-Komponenten installierter Releases — die Container, die lokal auf der Hardware laufen. Ein Gerät kann Edge-Komponenten mehrerer Releases gleichzeitig hosten und Mitglied mehrerer Gruppen sein.
Gruppe
Eine Gruppe ist eine logische Sammlung von Geräten innerhalb eines Projekts für Massenoperationen. Ein Gerät kann mehreren Gruppen angehören (N:N-Beziehung). Wenn ein Release auf einer Gruppe installiert wird, erhält jedes Mitgliedsgerät eine Installation, die entweder die Konfiguration der Gruppe erben oder lokal überschreiben kann.
Release-Installation
Eine Release-Installation ist die laufende Instanz eines bestimmten Releases auf einem bestimmten Gerät. Sie ist die Verbindung zwischen einem Gerät und einem Release innerhalb eines Projekts. Bei Installation über eine Gruppe kann jede Geräteinstallation die Gruppenkonfiguration erben oder überschreiben — flottenweite Standards mit gerätespezifischen Ausnahmen.
Gruppen-Installation
├─ Gerät A → erbt von Gruppe
├─ Gerät B → erbt von Gruppe
└─ Gerät C → überschreibt mit eigener KonfigurationFleet-Datenbank
Jedes Projekt hat eine dedizierte Fleet-Datenbank — eine PostgreSQL-Datenbank mit der TimescaleDB-Erweiterung für Zeitreihendaten. Edge-Komponenten auf Geräten veröffentlichen Telemetriedaten über WAMP, der FleetDB-Dienst schreibt sie in die Projektdatenbank, und die Daten können von Dashboards, dem KI-Abfragedienst und externen Tools abgefragt werden.
Dashboard
Ein Dashboard visualisiert Daten aus der Fleet-Datenbank des Projekts. Dashboards gehören zu einem Projekt und können Daten aus mehreren Apps und Geräten in einer einzigen Ansicht kombinieren.
Alarm
Ein Alarm ist eine schwellenwertbasierte Alarmregel innerhalb eines Projekts. Alarme überwachen Daten in der Fleet-Datenbank und lösen Benachrichtigungen aus, wenn Bedingungen erfüllt sind.
Entitätsbeziehungsdiagramm
┌──────────┐
│ Account │
└──┬───┬───┘
│ │
│ │ besitzt 1:N
│ ▼
│ ┌─────────────────────┐
│ │ App │
│ └────────┬────────────┘
│ │ enthält 1:N
│ ▼
│ ┌─────────────────────┐
│ │ Release │
│ └─────────────────────┘
│ ▲
│ │ referenziert
│ besitzt │
│ 1:N │
▼ │
┌──────────────────────────────────────────────────────────────────┐
│ Projekt │
│ │
│ ┌──────────┐ N:N ┌──────────┐ │
│ │ Gerät │◆──────────◆│ Gruppe │ │
│ └────┬─────┘ └────┬─────┘ │
│ │ hostet │ installiert auf │
│ │ Edge-Komponenten │ Mitgliedsgeräten │
│ │ 1:N │ │
│ │ ▼ │
│ │ ┌──────────────┐ │
│ └──────────────►│ Release- │ (erbt oder │
│ │ Installation│ überschreibt Gruppe) │
│ └──────────────┘ │
│ │
│ ┌───────────────────────┐ │
│ │ Fleet-Datenbank │ │
│ │ (TimescaleDB) │ │
│ │ ┌─────┐ ┌─────┐ │ │
│ │ │Tbl. │ │Tbl. │ ... │ │
│ │ └─────┘ └─────┘ │ │
│ └───────────────────────┘ │
│ ▲ │
│ │ abgefragt von │
│ ┌───────────┴───────────┐ │
│ │ Dashboard │ │
│ └───────────────────────┘ │
│ │
│ ┌───────────────────────┐ │
│ │ Alarm │ │
│ │ (überwacht FleetDB) │ │
│ └───────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────┘Beziehungsübersicht
| Beziehung | Typ | Beschreibung |
|---|---|---|
| Account → Projekt | 1:N | Ein Account besitzt mehrere Projekte |
| Account → App | 1:N | Ein Account besitzt mehrere Apps (unabhängig von Projekten) |
| App → Release | 1:N | Eine App enthält mehrere versionierte Releases |
| Projekt → Gerät | 1:N | Jedes Gerät gehört zu genau einem Projekt |
| Projekt → Gruppe | 1:N | Gruppen sind einem Projekt zugeordnet |
| Gerät ↔ Gruppe | N:N | Ein Gerät kann in mehreren Gruppen sein; eine Gruppe enthält mehrere Geräte |
| Projekt → Fleet-Datenbank | 1:1 | Jedes Projekt hat eine eigene dedizierte Datenbank |
| Projekt → Dashboard | 1:N | Dashboards gehören zu einem Projekt und fragen dessen Fleet-Datenbank ab |
| Projekt → Alarm | 1:N | Alarme sind einem Projekt zugeordnet und überwachen dessen Fleet-Datenbank |
| Gerät → Release-Installation | 1:N | Ein Gerät hostet Edge-Komponenten mehrerer Release-Installationen |
| Release-Installation → Release | N:1 | Jede Installation referenziert eine bestimmte Release-Version |