Cette page définit le vocabulaire de santé tel que Knock le matérialise. Le modèle suit MicroProfile Health 4.0 ; les choix d’implémentation sont décrits dans Internes.
Contrôle de santé
Un contrôle de santé est un diagnostic fourni par l’application. Il implémente org.eclipse.microprofile.health.HealthCheck et renvoie une HealthCheckResponse portant un nom, un statut (UP/DOWN) et une carte data optionnelle. Un contrôle est associé à exactement une sonde via son qualificateur.
Type de sonde
Une sonde est une catégorie de contrôles répondant à une question opérationnelle précise. Knock les modélise avec l’énumération ProbeType :
ProbeType |
Sélectionne |
|---|---|
|
Les contrôles qualifiés |
|
Les contrôles qualifiés |
|
Les contrôles qualifiés |
|
Tous les contrôles enregistrés (sous-tend |
Registre
Le registre détient les contrôles enregistrés et les renvoie filtrés par type de sonde. Le contrat est l’interface HealthCheckRegistry (dans knock-api) ; l’implémentation autonome est KnockHealthCheckRegistry (dans knock-core). Il est compatible threads virtuels : l’état réside dans un ConcurrentHashMap, jamais protégé par synchronized.
Agrégation
L'agrégation réduit un ensemble de réponses individuelles à un statut unique. La règle (spec §3.2) : le groupe est DOWN si au moins un contrôle est DOWN ; un groupe vide est UP ; une exception est repliée en contrôle DOWN plutôt que propagée. KnockAggregator l’implémente et produit un HealthSnapshot.
Instantané
Un instantané (HealthSnapshot, un record immuable) capture le résultat d’une agrégation : le type de sonde, le statut global et la liste immuable des contrôles individuels. C’est l’entrée fournie à la sérialisation, découplant le calcul du rendu.
Contrat JSON
Le contrat JSON (spec §3.1) est fixe :
-
statusde premier niveau (UP/DOWN) et un tableauchecks; -
chaque entrée a
name,statuset un objetdataoptionnel ; -
dataest omis lorsqu’il est vide ; -
HTTP
200siUP,503siDOWN.
Knock le rend avec Jakarta JSON-P uniquement — pas de StringBuilder, pas de bibliothèque JSON tierce. HealthReport encapsule la charge utile sérialisée et le statut HTTP.
Découverte CDI
Dans un déploiement CDI, les contrôles sont découverts par une Build Compatible Extension (HealthCheckCdiExtension) exécutée sur Vauban. Elle valide la règle du qualificateur unique au moment du build, puis HealthCheckRegistrar enregistre chaque bean découvert dans le registre au déclenchement de @Initialized(ApplicationScoped.class). Hors CDI, le même registre est alimenté manuellement — le cœur ne dépend jamais d’un conteneur.
Frontières des modules
Knock sépare les responsabilités pour que le cœur reste léger en dépendances :
-
knock-api— types de la spec MicroProfile Health réexportés + SPI Knock (ProbeType,HealthCheckRegistry,Knock). -
knock-core— registre, agrégation, sérialisation JSON-P, façade runtime. Java SE pur. -
knock-cdi-vauban— découverte CDI et auto-enregistrement. -
knock-jaxrs— la ressource Jakarta REST/health*.
Les paquets internes (io.vidocq.knock.internal, io.vidocq.knock.cdi.internal) ne sont jamais exportés.