Arquitetura Semântica
Esta página descreve o modelo de dados do IronFlock: os ativos principais e como se relacionam entre si. Enquanto a Visão Geral da Arquitetura cobre as camadas físicas do sistema (edge, cloud, message broker), aqui o foco é na estrutura lógica — as relações entre projetos, dispositivos, apps e dados.
Visão Geral das Entidades
Conta
├─ App
│ └─ Release
└─ Projeto
├─ Dispositivo ─────────┐
│ └─ Componente Edge
├─ Grupo ───────────────┘
├─ Instalação de Release
├─ Fleet Database
│ └─ Tabelas de Dados
├─ Dashboard
└─ AlarmeAtivos Principais
Conta
Uma conta é a identidade de nível superior — uma pessoa ou organização conectada ao IronFlock. Uma conta possui projetos e apps. Apps e projetos são filhos diretos de uma conta, mas existem independentemente um do outro.
App
Uma app é um pacote de software implantável. Apps pertencem a uma conta, não a um projeto — uma mesma app pode ser instalada em muitos projetos diferentes. Uma app não é executada por si só; serve como entrada de catálogo cujos releases podem ser instalados em dispositivos.
Release
Um release é uma compilação imutável e versionada de uma app. Apenas releases no estado READY podem ser instalados em dispositivos. Releases são imutáveis — para alterar o comportamento de uma app, um novo release é publicado.
Projeto
Um projeto é o limite principal de isolamento. Tudo dentro de um projeto — dispositivos, grupos, instalações, dados, dashboards, alarmes — é invisível para outros projetos. Cada projeto tem seu próprio realm WAMP no message broker, um Fleet Database dedicado e seu próprio conjunto de dispositivos, grupos, instalações, dashboards e alarmes.
Dispositivo
Um dispositivo é uma máquina Linux física ou virtual executando o agente IronFlock. Cada dispositivo pertence a exatamente um projeto. Um dispositivo hospeda os componentes edge dos releases instalados — os containers que rodam localmente no hardware. Um dispositivo pode hospedar componentes edge de múltiplos releases simultaneamente e pode ser membro de múltiplos grupos.
Grupo
Um grupo é uma coleção lógica de dispositivos dentro de um projeto, usado para operações em massa. Um dispositivo pode pertencer a múltiplos grupos (muitos para muitos). Quando um release é instalado em um grupo, cada dispositivo membro recebe uma instalação que pode herdar a configuração do grupo ou sobrescrevê-la localmente.
Instalação de Release
Uma instalação de release é a instância em execução de um release específico em um dispositivo específico. É a junção entre um dispositivo e um release dentro de um projeto. Quando instalada via grupo, cada instalação de dispositivo pode herdar ou sobrescrever a configuração do grupo, fornecendo padrões para toda a frota com exceções por dispositivo.
Instalação de Grupo
├─ Dispositivo A → herda do grupo
├─ Dispositivo B → herda do grupo
└─ Dispositivo C → sobrescreve com configuração personalizadaFleet Database
Cada projeto tem um Fleet Database dedicado — um banco de dados PostgreSQL com a extensão TimescaleDB para dados de séries temporais. Componentes edge nos dispositivos publicam telemetria via WAMP, o serviço FleetDB grava no banco de dados do projeto, e os dados podem ser consultados por dashboards, o serviço de consultas IA e ferramentas externas.
Dashboard
Um dashboard visualiza dados do Fleet Database do projeto. Dashboards pertencem a um projeto e podem combinar dados de múltiplas apps e dispositivos em uma única visualização.
Alarme
Um alarme é uma regra de alerta baseada em limiar dentro de um projeto. Alarmes monitoram dados no Fleet Database e disparam notificações quando as condições são atendidas.
Diagrama de Relacionamento de Entidades
┌──────────┐
│ Conta │
└──┬───┬───┘
│ │
│ │ possui 1:N
│ ▼
│ ┌─────────────────────┐
│ │ App │
│ └────────┬────────────┘
│ │ contém 1:N
│ ▼
│ ┌─────────────────────┐
│ │ Release │
│ └─────────────────────┘
│ ▲
│ │ referencia
│ possui 1:N│
▼ │
┌──────────────────────────────────────────────────────────────────┐
│ Projeto │
│ │
│ ┌─────────────┐ N:N ┌──────────┐ │
│ │ Dispositivo │◆──────◆│ Grupo │ │
│ └──────┬──────┘ └────┬─────┘ │
│ │ hospeda │ instala em │
│ │ componentes edge │ dispositivos membros │
│ │ 1:N │ │
│ │ ▼ │
│ │ ┌──────────────┐ │
│ └───────────►│ Instalação │ (herda ou │
│ │ de Release │ sobrescreve grupo) │
│ └──────────────┘ │
│ │
│ ┌───────────────────────┐ │
│ │ Fleet Database │ │
│ │ (TimescaleDB) │ │
│ │ ┌──────┐ ┌──────┐ │ │
│ │ │Tabela│ │Tabela│...│ │
│ │ └──────┘ └──────┘ │ │
│ └───────────────────────┘ │
│ ▲ │
│ │ consultado por │
│ ┌───────────┴───────────┐ │
│ │ Dashboard │ │
│ └───────────────────────┘ │
│ │
│ ┌───────────────────────┐ │
│ │ Alarme │ │
│ │ (monitora FleetDB) │ │
│ └───────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────┘Resumo de Relacionamentos
| Relacionamento | Tipo | Descrição |
|---|---|---|
| Conta → Projeto | 1:N | Uma conta possui múltiplos projetos |
| Conta → App | 1:N | Uma conta possui múltiplas apps (independentes de projetos) |
| App → Release | 1:N | Uma app contém múltiplos releases versionados |
| Projeto → Dispositivo | 1:N | Cada dispositivo pertence a exatamente um projeto |
| Projeto → Grupo | 1:N | Grupos pertencem a um projeto |
| Dispositivo ↔ Grupo | N:N | Um dispositivo pode estar em múltiplos grupos; um grupo contém múltiplos dispositivos |
| Projeto → Fleet Database | 1:1 | Cada projeto tem seu próprio banco de dados dedicado |
| Projeto → Dashboard | 1:N | Dashboards pertencem a um projeto e consultam seu Fleet Database |
| Projeto → Alarme | 1:N | Alarmes pertencem a um projeto e monitoram seu Fleet Database |
| Dispositivo → Instalação de Release | 1:N | Um dispositivo hospeda componentes edge de múltiplas instalações de release |
| Instalação de Release → Release | N:1 | Cada instalação referencia uma versão de release específica |