life-noc/docs/modeles/inputs-store-model-v1.md

315 lines
6 KiB
Markdown
Raw Permalink 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 — Inputs Store Model v1
## 1. Objet
Ce document définit le **modèle de stockage des intrants** de Life-NOC.
Lobjectif est de séparer clairement :
- la **définition** des services, des sondes et des seuils
- les **valeurs vivantes** utilisées par les sondes
- les **mécanismes dingestion** de ces valeurs
Dans Life-NOC :
- `domains.yaml` définit les domaines, les items, les seuils, les politiques et le type de sonde
- `data/inputs/` contient les **intrants vivants**
- les sondes lisent ces intrants pour produire les états Icinga
---
## 2. Principe général
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
---
## 3. Convention de structure
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.
---
## 4. 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.
---
## 5. 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
```
---
## 6. Champs minimaux v1
### `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`
---
## 7. Champs optionnels
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.
---
## 8. 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**
---
## 9. 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
---
## 10. 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.
---
## 11. 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.
---
## 12. 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
---
## 13. 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.
---
## 14. Positionnement architectural
Le modèle de store dintrants 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
---
## 15. Conclusion
Le répertoire `data/inputs/` devient le modèle canonique de stockage des intrants Life-NOC.
Le format standard v1 est :
```text
data/inputs/<domaine>.yaml
```
Cette convention permet :
* une séparation claire entre définition et valeurs
* une gestion cohérente domaine par domaine
* une migration graduelle
* une intégration future avec GUI, API et MQTT