Control Plane Essensys¶
Le Control Plane est le cerveau opérationnel de la solution Essensys. Inspiré du modèle UniFi (où un contrôleur centralisé gère tous les équipements), il offre une interface unique pour superviser, mettre à jour et diagnostiquer chaque Raspberry Pi.
Rôle du Control Plane¶
graph LR
subgraph Control Plane
API[API REST<br/>:9100/api]
UI[Interface Web<br/>:9100/]
Scheduler[Scheduler<br/>Cron updates]
HealthCheck[Health Checker<br/>Polling services]
DockerClient[Docker Client<br/>Socket API]
end
subgraph Services Essensys
Backend[essensys-backend]
MCP[essensys-mcp]
Nginx[nginx]
Traefik[traefik]
Redis[redis]
AdGuard[adguard]
end
subgraph External
Registry[GitHub Container<br/>Registry ghcr.io]
AdminBrowser[Admin Browser]
MCPAgent[Agent IA via MCP]
end
HealthCheck -->|GET /health| Backend
HealthCheck -->|GET /sse| MCP
HealthCheck -->|ping| Redis
DockerClient -->|docker.sock| Backend
DockerClient -->|docker.sock| MCP
DockerClient -->|docker.sock| Nginx
Scheduler -->|pull new tags| Registry
AdminBrowser -->|HTTPS| UI
MCPAgent -->|tools MCP| API
style API fill:#e8eaf6,stroke:#1a237e
style UI fill:#e8eaf6,stroke:#1a237e
style MCP fill:#fff3e0,stroke:#e65100,stroke-width:2px Fonctionnalités¶
1. Dashboard (Vue d'ensemble)¶
L'interface affiche en temps réel :
| Information | Source | Méthode |
|---|---|---|
| Statut de chaque service (running/stopped/error) | Docker API | docker inspect |
| Version de chaque image déployée | Docker API | Image tag + digest |
| Uptime de chaque container | Docker API | State.StartedAt |
| Utilisation CPU / RAM / Disque | /proc + Docker stats | docker stats |
| Dernière mise à jour réussie | Base locale (SQLite) | Log interne |
| Version disponible sur le registry | ghcr.io API | GET /v2/.../tags/list |
┌─────────────────────────────────────────────────────────────┐
│ Essensys Control Plane ⚙ Settings V.2.0.0 │
├─────────────────────────────────────────────────────────────┤
│ │
│ Service Status Version Available Action │
│ ───────────────── ──────── ────────── ───────── ────── │
│ essensys-backend ● Running V.1.2.2 V.1.3.0 Update │
│ essensys-mcp ● Running V.1.2.2 V.1.2.2 ✓ │
│ nginx ● Running alpine-1.27 - - │
│ traefik ● Running v2.11.3 v2.11.5 Update │
│ redis ● Running 7.4-alpine - - │
│ adguard ● Running v0.107.52 - - │
│ mosquitto ● Running 2.0.18 - - │
│ monitor ● Running V.1.2.2 V.1.2.2 ✓ │
│ │
│ System: CPU 12% | RAM 1.2/4 GB | Disk 45% | Temp 52°C │
│ │
├─────────────────────────────────────────────────────────────┤
│ Recent Events │
│ 10:32 essensys-backend health check OK │
│ 10:30 essensys-mcp 3 tools called (find_device_index x2) │
│ 10:15 System update check: no new versions │
│ 09:45 essensys-backend updated V.1.2.1 → V.1.2.2 │
└─────────────────────────────────────────────────────────────┘
2. Gestion des versions et mises à jour¶
sequenceDiagram
participant CP as Control Plane
participant GH as ghcr.io Registry
participant D as Docker Daemon
participant S as Service
CP->>GH: GET /v2/essensys-hub/backend/tags/list
GH-->>CP: [V.1.2.2, V.1.3.0]
CP->>CP: Compare avec version locale
Note over CP: Nouvelle version détectée
CP->>D: docker pull ghcr.io/essensys-hub/backend:V.1.3.0
D->>GH: Pull image layers
GH-->>D: Image téléchargée
CP->>D: docker compose up -d essensys-backend
D->>S: Stop ancien container
D->>S: Start nouveau container
CP->>S: GET /health (retry 3x)
S-->>CP: 200 OK
Note over CP: Mise à jour réussie, log en base
alt Health check échoue
CP->>D: Rollback: docker compose up -d (ancien tag)
CP->>CP: Alerte admin
end Modes de mise à jour¶
| Mode | Description | Quand |
|---|---|---|
| Manuel | L'admin clique "Update" dans l'UI | Par défaut |
| Semi-auto | Le CP télécharge l'image, attend validation | Recommandé production |
| Auto | Le CP détecte et déploie automatiquement | Optionnel (comme UniFi) |
3. Visualisation des logs¶
Le Control Plane collecte et affiche les logs de tous les containers :
graph LR
Backend[essensys-backend] -->|stdout/stderr| DockerLogs[Docker Logs API]
MCP[essensys-mcp] -->|stdout/stderr| DockerLogs
Nginx[nginx] -->|access + error| DockerLogs
Traefik[traefik] -->|access + error| DockerLogs
DockerLogs --> CP[Control Plane]
CP --> UI[Interface Web<br/>Live log viewer]
CP --> Storage[Rotation locale<br/>7 jours]
style CP fill:#e8eaf6,stroke:#1a237e
style MCP fill:#fff3e0,stroke:#e65100,stroke-width:2px Fonctionnalités du viewer de logs :
- Filtre par service (dropdown)
- Filtre par niveau (INFO, WARN, ERROR)
- Recherche texte libre
- Mode "live tail" (streaming en temps réel via WebSocket)
- Export (téléchargement fichier)
4. Métriques et alertes (Prometheus)¶
Le Control Plane ne gère plus les métriques en interne : il s'appuie sur Prometheus comme source de vérité pour les métriques et les alertes.
graph LR
subgraph Services
Backend[essensys-backend<br/>/metrics]
MCP[essensys-mcp<br/>/metrics]
N8N[n8n<br/>/metrics]
Redis[redis-exporter<br/>/metrics]
end
Prometheus[Prometheus<br/>:9090]
AlertManager[Alertmanager]
CP[Control Plane<br/>Dashboard]
N8NAlert[N8N<br/>Workflow alertes]
OpenClaw[OpenClaw<br/>Auto-diagnostic]
Backend --> Prometheus
MCP --> Prometheus
N8N --> Prometheus
Redis --> Prometheus
Prometheus --> AlertManager
Prometheus --> CP
AlertManager -->|webhook| N8NAlert
AlertManager -->|webhook| OpenClaw
style Prometheus fill:#fff8e1,stroke:#f57f17,stroke-width:3px
style CP fill:#e8eaf6,stroke:#1a237e
style MCP fill:#fff3e0,stroke:#e65100,stroke-width:2px
style OpenClaw fill:#fce4ec,stroke:#c62828,stroke-width:2px
style N8NAlert fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px | Source | Endpoint | Métriques |
|---|---|---|
essensys-backend | GET /metrics | Requêtes API, latence, erreurs, connexions legacy |
essensys-mcp | GET /metrics | Tools appelés, sessions SSE, latence Redis, ordres envoyés |
control-plane | GET /metrics | Updates effectuées, health checks, Docker stats |
n8n | GET /metrics | Workflows exécutés, erreurs, durée |
redis | redis-exporter | Commandes/sec, mémoire, clés |
node-exporter | GET /metrics | CPU, RAM, disque, température Pi |
Le Control Plane query Prometheus via PromQL pour afficher les graphes dans le dashboard et n'a plus besoin de son propre système de polling.
Alertes : Prometheus Alertmanager envoie les alertes vers :
- N8N (webhook) : pour les workflows de notification (email, WhatsApp, Signal, Telegram, etc.)
- OpenClaw (webhook) : pour l'auto-diagnostic et la réparation automatique via MCP
En cas d'alerte :
- Warning (ex: CPU > 80%) → N8N envoie une notification admin
- Critical (ex: service down) → OpenClaw diagnostique via MCP (
run_self_diagnostic) et tente une réparation - Réparation échouée → N8N escalade (notification urgente + log dans Control Plane)
API du Control Plane¶
GET /api/services # Liste tous les services + statut
GET /api/services/:name # Détail d'un service
POST /api/services/:name/restart # Redémarrer un service
POST /api/services/:name/update # Mettre à jour vers la dernière version
POST /api/services/:name/rollback # Rollback à la version précédente
GET /api/versions # Versions installées vs disponibles
POST /api/update/check # Vérifier les mises à jour maintenant
POST /api/update/apply # Appliquer toutes les mises à jour
GET /api/logs/:service # Logs d'un service (query: lines, since, level)
GET /api/logs/:service/stream # WebSocket stream de logs
GET /api/system # Métriques système (CPU, RAM, disk, temp)
GET /api/system/health # Health check global
GET /api/config # Configuration courante
PUT /api/config # Modifier la configuration
Lien avec le MCP¶
Le Control Plane et le MCP sont fortement couplés. Le MCP expose déjà des outils de diagnostic (list_service_status, run_self_diagnostic, restart_service). Dans l'architecture cible :
graph TB
Agent[Agent IA] -->|tools MCP| MCP
Admin[Admin UI] -->|API REST| CP[Control Plane]
MCP -->|API interne| CP
CP -->|API interne| MCP
MCP -->|Docker socket| Docker[Docker Daemon]
CP -->|Docker socket| Docker
subgraph Shared capabilities
ServiceMgmt[Gestion services]
LogAccess[Accès logs]
VersionMgmt[Gestion versions]
Diagnostics[Diagnostics]
end
MCP --> ServiceMgmt
CP --> ServiceMgmt
MCP --> LogAccess
CP --> LogAccess
CP --> VersionMgmt
MCP --> Diagnostics
CP --> Diagnostics
style MCP fill:#fff3e0,stroke:#e65100,stroke-width:3px
style CP fill:#e8eaf6,stroke:#1a237e,stroke-width:3px | Capacité | Control Plane (humain) | MCP (agent IA) | N8N (automation) | OpenClaw (IA) |
|---|---|---|---|---|
| Voir statut services | Dashboard UI | list_service_status | - | Via MCP |
| Lire les logs | Log viewer UI | read_service_logs | - | Via MCP |
| Redémarrer un service | Bouton restart | restart_service | Workflow auto | Via MCP |
| Diagnostic complet | Page diagnostics | run_self_diagnostic | - | Auto-triggered |
| Mettre à jour | Bouton update | Futur: update_service | Workflow update | - |
| Rollback | Bouton rollback | Futur: rollback_service | Workflow rollback | - |
| Métriques | Graphes Prometheus | get_system_metrics | - | Analyse IA |
| Notifications | UI events | - | Email/WhatsApp/Signal/Telegram | Résumé vocal |
| Auto-réparation | - | run_self_diagnostic | Workflow triggered | Décision IA |
Le MCP est l'interface programmatique du Control Plane. OpenClaw est l'intelligence qui prend les décisions. N8N est l'orchestrateur qui automatise les workflows entre humains et IA.
Stack technique recommandée¶
| Composant | Technologie | Justification |
|---|---|---|
| API | Go (même stack que backend) | Cohérence, performance, accès Docker SDK natif |
| UI | React (même stack que frontend) | Cohérence, réutilisation composants |
| Base de données | SQLite | Léger, pas de service supplémentaire |
| Métriques | Prometheus | Standard industrie, PromQL puissant, alertmanager intégré |
| Communication temps réel | WebSocket | Logs live, statut temps réel |
| Accès Docker | /var/run/docker.sock monté en volume | Standard Docker management |