Socle V004 – Status Dashboard

Socle V004 - Status Dashboard

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

  1. Chargement initial : La page HTML complete est servie
  2. Rafraichissement periodique : JavaScript appelle /api/status et /api/workers
  3. Mise a jour selective : Seuls les elements dont la valeur a change sont modifies
  4. 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 AbstractEventDrivenWorker exposent 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

Socle V004 – Status Dashboard

Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *