life-noc/docs/life-noc-sondes-et-intrants-v1.md

711 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Life-NOC — Modèle des sondes et des intrants v1
## 1. Objet
Ce document définit le **modèle canonique des sondes** et le **modèle de gestion des intrants** de Life-NOC.
Lobjectif est de séparer clairement :
- la **définition** des services, des sondes et des seuils
- les **intrants vivants** utilisés par les sondes
- les **mécanismes dingestion** de ces intrants
- la **traduction en états Life-NOC**
Ce modèle doit permettre :
- de faire coexister des suivis encore **mockés** et des suivis **réels**
- dintroduire progressivement des sondes réelles sans casser lexistant
- dunifier les méthodes dévaluation par grandes familles de suivis
---
## 2. Principes de design
### 2.1 Stabilité dabord
Le dépôt existant doit rester fonctionnel et déployable pendant toute lintroduction des sondes réelles.
Aucune migration brutale ne doit être exigée.
---
### 2.2 Une sonde par nature de calcul, pas par item
Les services Life-NOC ne doivent pas reposer sur une multitude de scripts ad hoc.
Ils doivent être des **instances paramétrées** dun petit nombre de types de sondes génériques.
Autrement dit :
- un item décrit **quoi mesurer**
- la sonde décrit **comment lévaluer**
---
### 2.3 Les sources de données sont multiples
Life-NOC doit pouvoir recevoir des données à partir de plusieurs mécanismes :
- saisie manuelle
- MQTT
- fichiers
- API
- commandes locales
- valeurs dérivées
MQTT est un **mécanisme de transport**, pas une mémoire durable.
---
### 2.4 Lambiguïté technique est critique
Dans Life-NOC, limpossibilité de conclure techniquement ne doit pas être interprétée comme un état neutre.
Une erreur de lecture, de parsing ou daccès à la donnée doit produire un état **CRITICAL**, afin de forcer la correction de la sonde ou de sa source.
---
## 3. Sémantique des états Life-NOC
Life-NOC utilise la sémantique suivante :
- **UNKNOWN** : pas encore dû, pas encore à faire
- **OK** : actionnable maintenant
- **WARNING** : il faut se presser
- **CRITICAL** : en retard, anormal, ou impossible à évaluer
Cette convention diffère volontairement de lusage classique de Nagios/Icinga.
Dans Life-NOC :
- le vert nexprime pas labsence de travail
- il exprime le **bon moment pour agir**
- le gris `UNKNOWN` signifie que litem nest pas encore dans sa fenêtre daction
---
## 4. Taxonomie des sondes v1
Le modèle conceptuel v1 couvre cinq types de sondes.
### 4.1 `elapsed_time`
Mesure le **temps écoulé** depuis un événement ou une exécution précédente.
#### Exemples
- revue quotidienne
- revue hebdomadaire
- inspection trimestrielle
- test détecteurs
- vérification sauvegardes
#### Donnée de base
- date de dernière exécution
#### Métrique typique
- jours écoulés
#### Logique générale
Plus le temps écoulé augmente, plus litem devient dû.
---
### 4.2 `elapsed_distance`
Mesure une **distance écoulée** depuis un événement passé.
#### Exemples
- kilométrage depuis vidange
- kilométrage depuis entretien pneus
- kilométrage depuis vérification freins
- kilomètres depuis changement de courroie
#### Données de base
- compteur courant
- compteur lors de la dernière exécution
#### Métrique typique
- kilomètres écoulés
#### Logique générale
Plus la distance écoulée augmente, plus litem devient dû.
---
### 4.3 `current_value`
Mesure une **valeur instantanée** comparée à des seuils.
#### Exemples
- tension batterie
- température
- humidité
- espace disque libre
- charge électrique
- niveau de tension
#### Donnée de base
- valeur actuelle observée
#### Métriques typiques
- volts
- pourcentage
- degrés
- gigaoctets
- watts
#### Logique générale
Létat dépend dun positionnement par rapport à un ou plusieurs seuils.
---
### 4.4 `remaining_quantity`
Mesure ce quil **reste** dun stock, dune réserve ou dune autonomie.
#### Exemples
- nourriture chats restante
- réserve deau
- vitamines restantes
- carburant restant
- consommables
#### Donnée de base
- quantité restante
#### Métriques typiques
- jours dautonomie
- litres
- unités
- kilogrammes
- pourcentage
#### Logique générale
Plus la quantité restante diminue, plus litem devient critique.
---
### 4.5 `days_until_due`
Mesure le **temps restant avant une échéance fixe**.
#### Exemples
- permis de conduire
- carte dassurance maladie
- passeport
- assurances
- échéance fiscale
- rendez-vous
#### Donnée de base
- date déchéance
#### Métrique typique
- jours restants
#### Logique générale
Plus on approche de la date, plus litem entre dans la fenêtre daction, puis dans lurgence.
---
## 5. Sources de données
Le modèle distingue le **type de sonde** de la **source de données**.
### 5.1 Sources conceptuellement prévues
- `manual_date`
- `manual_counter`
- `manual_value`
- `mqtt`
- `file_json`
- `file_text`
- `csv`
- `api`
- `command`
- `derived`
### 5.2 Sources v1 à faible risque
Pour limplémentation initiale, seules les sources suivantes sont retenues :
- `manual_date`
Les autres sources sont **réservées** au modèle, mais non implémentées dans la première tranche.
---
## 6. Schéma canonique dun item
Chaque item peut, à terme, porter une description de sonde structurée.
Exemple canonique :
```yaml
probe:
type: elapsed_time
source:
type: manual_date
value: "2026-03-10"
metric:
unit: days
thresholds:
unknown_lt: 5
ok_gte: 5
warning_gte: 7
critical_gte: 10
policy:
on_error: critical
````
---
## 7. Règles générales de seuils
### 7.1 Cas où la métrique augmente avec lurgence
Exemples :
* jours écoulés
* kilomètres écoulés
Ordre dévaluation recommandé :
1. `critical_gte`
2. `warning_gte`
3. `ok_gte`
4. sinon `unknown`
---
### 7.2 Cas où la métrique diminue avec la gravité
Exemples :
* quantité restante
* tension minimale
* autonomie restante
Ordre dévaluation recommandé :
1. `critical_lt`
2. `warning_lt`
3. `ok_gte`
4. sinon `unknown`
---
### 7.3 Cas où la métrique est une échéance future
Exemples :
* jours avant expiration
* jours avant rendez-vous
* jours avant renouvellement
Ordre dévaluation recommandé :
1. `critical_lt`
2. `warning_lt`
3. `ok_lt`
4. sinon `unknown`
---
## 8. Politique derreur
La politique derreur par défaut de Life-NOC est :
```yaml
policy:
on_error: critical
```
Cela signifie que les situations suivantes doivent produire `CRITICAL` :
* donnée absente
* donnée invalide
* parsing impossible
* source inaccessible
* seuils incohérents
* type de sonde non supporté
* unité non supportée
* configuration incomplète
Cette règle vise à éviter que des erreurs techniques demeurent invisibles.
---
## 9. Modèle de stockage des intrants
La source de vérité des **intrants** ne doit pas être mélangée avec la définition des services.
### Séparation voulue
* `domains.yaml` = **configuration**
* `data/inputs/*.yaml` = **valeurs**
* les interfaces = **moyens dalimentation**
* les sondes = **mécanismes dévaluation**
Cela permet :
* de modifier une valeur sans régénérer toute la définition du système
* dalimenter une sonde par saisie manuelle, MQTT, API ou autre
* de garder un dépôt stable même lorsque les valeurs changent
---
## 10. Convention de structure du store
Le modèle standard v1 des intrants est :
```text
data/inputs/<domaine>.yaml
```
Exemples :
* `data/inputs/revue.yaml`
* `data/inputs/voiture.yaml`
* `data/inputs/maison.yaml`
* `data/inputs/energie.yaml`
Cette convention est **canonique** pour Life-NOC v1.
---
## 11. Pourquoi un fichier par domaine
Le domaine constitue la bonne granularité pour les intrants car :
* il regroupe des items de même nature métier
* il tend à partager un profil dingestion commun
* il facilite la lecture humaine
* il permet dintroduire des interfaces cohérentes par domaine
Le domaine fournit donc le **cadre dingestion**.
Chaque item garde sa propre source logique à lintérieur de ce cadre.
---
## 12. Structure dun fichier dintrants de domaine
Chaque fichier `data/inputs/<domaine>.yaml` contient un mapping dont les clés correspondent aux `item_key`.
Exemple :
```yaml
revue-quotidienne-life-noc:
value: "2026-03-14"
captured_at: "2026-03-14T08:00:00Z"
origin: manual
revue-hebdomadaire-priorites:
value: "2026-03-10"
captured_at: "2026-03-14T08:00:00Z"
origin: manual
```
---
## 13. Champs minimaux v1 du store
### `value`
Valeur métier utilisée par la sonde.
Exemples :
* date de dernière exécution
* compteur
* niveau de stock
* valeur mesurée
### `captured_at`
Horodatage de capture ou de mise à jour de lintrant.
Format recommandé :
* ISO 8601 UTC
Exemple :
```text
2026-03-14T08:00:00Z
```
### `origin`
Origine de lintrant.
Valeurs typiques :
* `manual`
* `mqtt`
* `api`
* `derived`
---
## 14. Champs optionnels du store
Des champs complémentaires pourront être ajoutés selon les besoins :
* `unit`
* `source_ref`
* `notes`
* `quality`
* `comment`
* `updated_by`
Ils ne font pas partie du noyau minimal v1.
---
## 15. Rôle du domaine et rôle de litem
### Le domaine
Le domaine définit le **cadre général** :
* structure dintrants dominante
* profil dingestion principal
* interfaces cohérentes
* conventions de stockage
### Litem
Litem définit le **cas particulier** :
* type de sonde
* seuils
* unité
* clé de lookup
* paramètres propres
Autrement dit :
* le domaine dit **comment on travaille**
* litem dit **quoi on surveille**
---
## 16. Référence entre un item et son intrant
Un item sondé peut référencer un intrant du store avec :
```yaml
probe:
type: elapsed_time
source:
type: manual_date
inputs_file: "/opt/life-noc/data/inputs/revue.yaml"
item_key: "revue-hebdomadaire-priorites"
```
La sonde résout alors :
* `inputs_file` → fichier de domaine
* `item_key` → clé à lintérieur du fichier
---
## 17. Compatibilité et migration
Le store des intrants est introduit progressivement.
### Règle de compatibilité
Si la sonde reçoit :
* `inputs_file`
* `item_key`
elle lit le store.
Sinon, elle peut utiliser une valeur inline fournie dans `domains.yaml`.
Cela permet une migration sans rupture.
### Conséquence
Il nest pas nécessaire de migrer tous les domaines en même temps.
---
## 18. Portée v1
### Convention cible
Tous les domaines Life-NOC sont destinés à utiliser, à terme, cette structure :
```text
data/inputs/<domaine>.yaml
```
### Mise en œuvre initiale
La migration effective commence seulement par les domaines réellement sondés avec la nouvelle méthode.
En v1, il est recommandé de commencer par :
* `data/inputs/revue.yaml`
Les autres domaines seront migrés progressivement, au fur et à mesure de lintroduction de vraies sondes.
---
## 19. Pourquoi ne pas tout migrer dun coup
Une migration brutale de tous les domaines augmenterait le risque de régression et compliquerait inutilement le dépôt.
Le modèle retenu privilégie :
* une convention unique
* une adoption graduelle
* une compatibilité arrière
* une progression domaine par domaine
---
## 20. Interfaces dalimentation possibles
Les intrants stockés dans `data/inputs/*.yaml` peuvent provenir de différentes interfaces :
* édition manuelle
* script CLI
* interface web
* API
* ingestion MQTT
* calcul dérivé
Le store dintrants constitue la **couche commune de persistance**, indépendamment du mode dingestion.
---
## 21. Positionnement architectural
Le modèle des sondes et des intrants sinscrit dans larchitecture Life-NOC suivante :
1. **définition**
* `domains.yaml`
* types de sondes
* seuils
* politiques
2. **ingestion**
* GUI
* API
* MQTT
* scripts
3. **persistance**
* `data/inputs/<domaine>.yaml`
4. **évaluation**
* sondes
* calcul de métrique
* états Icinga
---
## 22. Coexistence avec le modèle mocké
Le dépôt actuel repose sur une preuve de concept initialement mockée.
Lintroduction du modèle de sonde ne doit pas casser cette base.
### Règle de compatibilité
* si un item **ne définit pas** de bloc `probe`, il continue de fonctionner selon la logique mock existante
* si un item **définit** un bloc `probe`, il peut être pris en charge par la nouvelle sonde générique, selon les types réellement supportés par le moteur
Cette compatibilité permet une migration progressive, item par item.
---
## 23. Portée de limplémentation initiale
Le **modèle conceptuel v1** couvre cinq types de sondes.
Cependant, afin de préserver la stabilité du dépôt, l**implémentation initiale** est volontairement limitée à :
* `probe.type = elapsed_time`
* `source.type = manual_date`
* `metric.unit = days`
Tous les autres types restent **documentés mais non encore codés**.
Cette décision est volontaire. Elle permet :
* de garder le dépôt stable
* de valider la mécanique sur un seul cas simple
* de faciliter le débogage
* de réduire le risque de régression
---
## 24. Exemple complet
```yaml
revue:
- name: revue-hebdomadaire-priorites
date: "2026-03-10"
notes: Revoir les priorités de la semaine
probe:
type: elapsed_time
source:
type: manual_date
inputs_file: "/opt/life-noc/data/inputs/revue.yaml"
item_key: "revue-hebdomadaire-priorites"
metric:
unit: days
thresholds:
unknown_lt: 5
ok_gte: 5
warning_gte: 7
critical_gte: 10
policy:
on_error: critical
```
Et dans le store :
```yaml
revue-hebdomadaire-priorites:
value: "2026-03-10"
captured_at: "2026-03-14T08:00:00Z"
origin: manual
```
Interprétation :
* moins de 5 jours depuis la dernière revue : `UNKNOWN`
* à partir de 5 jours : `OK`
* à partir de 7 jours : `WARNING`
* à partir de 10 jours : `CRITICAL`
---
## 25. Conclusion
Life-NOC dispose maintenant dun cadre unifié pour :
* définir les types de sondes
* structurer les seuils
* normaliser les intrants
* séparer configuration et valeurs
* préparer lintégration future avec GUI, API et MQTT
Le modèle standard v1 repose sur :
* une taxonomie de cinq types de sondes
* une convention de store dintrants par domaine
* une migration progressive, compatible avec lexistant