27 – Status Dashboard
Version : 4.0.0 Package :
eu.lmvi.socle.worker.status
Introduction
Le StatusDashboardWorker est un Worker integre au Socle V004 qui expose un dashboard HTML de supervision sur un port dedie. Il permet de visualiser en temps reel l’etat de l’application et de tous les Workers.
Caracteristiques
- Automatique : Active par defaut, aucun code a ajouter
- Port dedie : 9374 (configurable)
- Dashboard HTML : Interface web avec rafraichissement AJAX partiel
- API JSON : Endpoints REST pour integration
- Metriques d’activite : Throughput, duree, charge relative
- Animation visuelle : Mise en evidence des valeurs modifiees
Acces au Dashboard
Une fois l’application demarree, le dashboard est accessible sur :
http://localhost:9374/
Configuration
application.yml
socle:
status_dashboard:
# Activer/desactiver le dashboard (defaut: true)
enabled: true
# Port du serveur HTTP (defaut: 9374)
port: 9374
# Adresse de bind (vide = toutes les interfaces)
bind_address: ""
# Intervalle de rafraichissement HTML en secondes (defaut: 5)
refresh_interval: 5
# Fenetre de calcul des metriques en secondes (defaut: 60)
metrics_window: 60
# Limite de requetes par seconde (defaut: 10)
max_requests_per_second: 10
# Activer l'API JSON (defaut: true)
api_enabled: true
Variables d’environnement
| Variable | Description | Defaut |
|---|---|---|
STATUS_DASHBOARD_ENABLED |
Activer le dashboard | true |
STATUS_DASHBOARD_PORT |
Port HTTP | 9374 |
STATUS_DASHBOARD_BIND |
Adresse de bind | (vide) |
STATUS_DASHBOARD_REFRESH |
Refresh interval (sec) | 5 |
STATUS_DASHBOARD_METRICS_WINDOW |
Fenetre metriques (sec) | 60 |
STATUS_DASHBOARD_MAX_RPS |
Max requetes/sec | 10 |
STATUS_DASHBOARD_API_ENABLED |
Activer API JSON | true |
Rafraichissement AJAX
Le dashboard utilise JavaScript pour mettre a jour uniquement les valeurs qui changent, sans recharger la page entiere.
Fonctionnement
- Chargement initial : La page HTML complete est servie
- Rafraichissement periodique : JavaScript appelle
/api/statuset/api/workers - Mise a jour selective : Seuls les elements dont la valeur a change sont modifies
- Animation visuelle : Les valeurs modifiees sont brievement mises en surbrillance (effet cyan)
Avantages
- Pas de rechargement complet de la page
- Experience utilisateur fluide
- Reduction de la bande passante
- Conservation de l’etat de scroll
Configuration de l’intervalle
L’intervalle de rafraichissement AJAX correspond a refresh_interval :
socle:
status_dashboard:
refresh_interval: 3 # Rafraichissement toutes les 3 secondes
Endpoints HTTP
Dashboard HTML
| Endpoint | Methode | Description |
|---|---|---|
/ |
GET | Page HTML du dashboard |
/index.html |
GET | Alias pour / |
Health Check
| Endpoint | Methode | Description |
|---|---|---|
/health |
GET | Status UP/DOWN en JSON |
Exemple de reponse :
{"status":"UP"}
API JSON
| Endpoint | Methode | Description |
|---|---|---|
/api/status |
GET | Status global de l’application |
/api/workers |
GET | Liste de tous les workers avec metriques |
/api/workers/{name} |
GET | Metriques d’un worker specifique |
Donnees affichees
Section : Status Global
| Donnee | Description |
|---|---|
| MOP State | Etat du MainOrchestratorProcess (RUNNING, DRAINING, etc.) |
| Uptime | Temps depuis le demarrage |
| Workers Health | Nombre de workers healthy / total |
| Total Activity | Throughput agrege (ops/sec) |
Section : Worker Activity
Barres visuelles montrant la charge relative de chaque Worker :
cdc_kafka_worker ████████████████████░░░░ 85% [HOT]
http_worker ██████████████░░░░░░░░░░ 58%
rule_engine ████████░░░░░░░░░░░░░░░░ 32%
control_worker ███░░░░░░░░░░░░░░░░░░░░░ 12%
maintenance_worker █░░░░░░░░░░░░░░░░░░░░░░░ 2% [IDLE]
Tags :
[HOT]: Worker avec charge > 80%[IDLE]: Worker inactif[PASSIVE]: Worker event-driven sans activite
Section : Workers Detail
Tableau detaille avec :
| Colonne | Description |
|---|---|
| Name | Nom du worker |
| State | Running / Stopped |
| Health | OK / FAIL |
| Mode | PASSIVE / CRON / INTERVAL |
| Executions | Nombre total d’executions doWork() |
| Avg Duration | Duree moyenne d’execution |
| Throughput | Operations par seconde |
| Last Activity | Temps depuis derniere activite |
| Errors | Nombre d’erreurs |
Exemples API JSON
GET /api/status
{
"timestamp": "2026-01-12T17:34:56.789Z",
"application": {
"name": "my-app",
"environment": "PROD",
"version": "4.0.0"
},
"mop": {
"state": "RUNNING",
"uptime_ms": 9252000,
"uptime_human": "2h 34m 12s"
},
"workers": {
"total": 6,
"healthy": 6,
"running": 6
},
"activity": {
"total_throughput": 847.3,
"metrics_window_sec": 60
}
}
GET /api/workers
{
"timestamp": "2026-01-12T17:34:56.789Z",
"workers": [
{
"name": "cdc_kafka_worker",
"state": "running",
"healthy": true,
"schedule": "PASSIVE",
"metrics": {
"execution_count": 12847,
"total_duration_ms": 29548,
"avg_duration_ms": 2.3,
"last_execution": "2026-01-12T17:34:55.123Z",
"throughput_per_sec": 721.4,
"errors_count": 3,
"messages_processed": 45230
},
"relative_load": 0.85
}
]
}
Securite
Bind localhost uniquement (production)
Pour limiter l’acces au dashboard en production :
socle:
status_dashboard:
bind_address: "127.0.0.1"
Desactiver en production
socle:
status_dashboard:
enabled: false
Ou via variable d’environnement :
export STATUS_DASHBOARD_ENABLED=false
Architecture
┌─────────────────────────────────────────────────────────────┐
│ StatusDashboardWorker │
│ │
│ ┌─────────────────────┐ ┌─────────────────────────┐ │
│ │ WorkerActivityTracker│ │ DashboardHtmlRenderer │ │
│ │ (collecte metriques) │ │ (genere HTML) │ │
│ └──────────┬──────────┘ └────────────┬────────────┘ │
│ │ │ │
│ └──────────┬─────────────────┘ │
│ │ │
│ ┌─────────▼─────────┐ │
│ │ MiniHttpServer │ │
│ │ (port 9374) │ │
│ └─────────┬─────────┘ │
└────────────────────────┼────────────────────────────────────┘
│
▼
Browser / curl
Composants
| Composant | Responsabilite |
|---|---|
StatusDashboardWorker |
Worker principal, orchestre le dashboard |
WorkerActivityTracker |
Collecte et agregation des metriques |
MiniHttpServer |
Serveur HTTP leger (ServerSocket) |
DashboardHtmlRenderer |
Generation du HTML avec CSS inline |
Integration avec Monitoring
Le dashboard peut etre integre avec des outils de monitoring existants :
Prometheus / Grafana
Utilisez l’endpoint /api/status pour collecter les metriques :
# prometheus.yml
scrape_configs:
- job_name: 'socle-status'
metrics_path: /api/status
static_configs:
- targets: ['localhost:9374']
Health Checks (Kubernetes)
# deployment.yaml
livenessProbe:
httpGet:
path: /health
port: 9374
initialDelaySeconds: 30
periodSeconds: 10
Convention des Stats Workers
Pour que le dashboard affiche correctement les metriques, les workers doivent exposer des cles standardisees dans getStats().
Cles requises par WorkerActivityTracker
| Cle | Type | Utilisation |
|---|---|---|
state |
String | Affichage Running/Stopped |
execution_count |
long | Colonne Executions |
errors_count |
long | Colonne Errors |
last_execution |
String/long | Colonne Last Activity |
schedule |
String | Colonne Mode |
Cles optionnelles
| Cle | Type | Utilisation |
|---|---|---|
total_duration_ms |
long | Calcul Avg Duration |
avg_duration_ms |
double | Colonne Avg Duration (prioritaire) |
throughput_per_sec |
double | Colonne Throughput |
messages_processed |
long | Fallback pour execution_count |
Note : Les workers heritant de
AbstractEventDrivenWorkerexposent automatiquement ces cles depuis la version 4.0.1.
Voir 05-WORKERS.md section 12 pour les details d’implementation.
Troubleshooting
Le dashboard ne demarre pas
Cause possible : Port deja utilise
Solution :
socle:
status_dashboard:
port: 9375 # Changer le port
Metriques a zero
Cause possible : Les workers sont en mode PASSIVE et n’ont pas encore traite d’evenements
Solution : Normal pour les workers event-driven. Les metriques apparaitront des que des evenements seront traites.
Dashboard lent
Cause possible : Trop de workers ou refresh trop frequent
Solution :
socle:
status_dashboard:
refresh_interval: 10 # Augmenter l'intervalle
Voir aussi
- 05-WORKERS.md – Documentation des Workers
- 08-SUPERVISOR.md – Supervision et health checks
- 15-METRICS.md – Metriques Prometheus
Socle V004 – Status Dashboard

Laisser un commentaire