maj
This commit is contained in:
242
docs/02_model_donnees.md
Normal file
242
docs/02_model_donnees.md
Normal file
@@ -0,0 +1,242 @@
|
||||
|
||||
# 02 – Modèle de données (SQLite)
|
||||
|
||||
Objectif : définir le schéma relationnel pour SQLite, exploité par SQLAlchemy (ou équivalent).
|
||||
|
||||
## Vue d’ensemble
|
||||
|
||||
Tables principales :
|
||||
- `devices`
|
||||
- `hardware_snapshots`
|
||||
- `benchmarks`
|
||||
- `manufacturer_links`
|
||||
- `documents`
|
||||
|
||||
Optionnel (plus tard) :
|
||||
- `users` (si auth interne)
|
||||
- `settings` (config globale de l’app)
|
||||
|
||||
---
|
||||
|
||||
## Table devices
|
||||
|
||||
Représente une machine (physique ou virtuelle).
|
||||
|
||||
Champs :
|
||||
|
||||
- `id` (INTEGER, PK, autoincrement)
|
||||
- `hostname` (TEXT, non nul)
|
||||
- `fqdn` (TEXT, nullable)
|
||||
- `description` (TEXT, nullable)
|
||||
- `asset_tag` (TEXT, nullable) – identifiant interne/inventaire
|
||||
- `location` (TEXT, nullable)
|
||||
- `owner` (TEXT, nullable)
|
||||
- `tags` (TEXT, nullable) – liste séparée par virgules ou JSON
|
||||
- `created_at` (DATETIME, non nul)
|
||||
- `updated_at` (DATETIME, non nul)
|
||||
|
||||
Contraintes :
|
||||
- `hostname` peut être utilisé comme identifiant logique si `device_identifier` n’est pas fourni par le client.
|
||||
- Index recommandé : `idx_devices_hostname`.
|
||||
|
||||
---
|
||||
|
||||
## Table hardware_snapshots
|
||||
|
||||
Snapshot détaillé de la configuration matérielle et OS au moment d’un bench.
|
||||
|
||||
Champs :
|
||||
|
||||
- `id` (INTEGER, PK)
|
||||
- `device_id` (INTEGER, FK -> devices.id)
|
||||
- `captured_at` (DATETIME, non nul)
|
||||
|
||||
### CPU
|
||||
|
||||
- `cpu_vendor` (TEXT)
|
||||
- `cpu_model` (TEXT)
|
||||
- `cpu_microarchitecture` (TEXT, nullable)
|
||||
- `cpu_cores` (INTEGER)
|
||||
- `cpu_threads` (INTEGER)
|
||||
- `cpu_base_freq_ghz` (REAL, nullable)
|
||||
- `cpu_max_freq_ghz` (REAL, nullable)
|
||||
- `cpu_cache_l1_kb` (INTEGER, nullable)
|
||||
- `cpu_cache_l2_kb` (INTEGER, nullable)
|
||||
- `cpu_cache_l3_kb` (INTEGER, nullable)
|
||||
- `cpu_flags` (TEXT, nullable) – chaîne ou JSON (AVX, AES, etc.)
|
||||
- `cpu_tdp_w` (REAL, nullable)
|
||||
|
||||
### RAM
|
||||
|
||||
- `ram_total_mb` (INTEGER)
|
||||
- `ram_slots_total` (INTEGER, nullable)
|
||||
- `ram_slots_used` (INTEGER, nullable)
|
||||
- `ram_ecc` (BOOLEAN, nullable)
|
||||
- `ram_layout_json` (TEXT, nullable)
|
||||
Exemple JSON :
|
||||
```json
|
||||
[
|
||||
{ "slot": "DIMM_A1", "size_mb": 16384, "type": "DDR4", "speed_mhz": 2133, "vendor": "Corsair", "part_number": "XXXX" }
|
||||
]
|
||||
```
|
||||
|
||||
### GPU
|
||||
|
||||
- `gpu_summary` (TEXT, nullable) – ex: "Intel UHD 630"
|
||||
- `gpu_vendor` (TEXT, nullable)
|
||||
- `gpu_model` (TEXT, nullable)
|
||||
- `gpu_driver_version` (TEXT, nullable)
|
||||
- `gpu_memory_dedicated_mb` (INTEGER, nullable)
|
||||
- `gpu_memory_shared_mb` (INTEGER, nullable)
|
||||
- `gpu_api_support` (TEXT, nullable) – ex: "OpenGL 4.6, Vulkan"
|
||||
|
||||
### Stockage
|
||||
|
||||
- `storage_summary` (TEXT, nullable) – résumé human readable
|
||||
- `storage_devices_json` (TEXT, nullable)
|
||||
Exemple JSON :
|
||||
```json
|
||||
[
|
||||
{
|
||||
"name": "/dev/nvme0n1",
|
||||
"type": "NVMe",
|
||||
"interface": "PCIe 3.0 x4",
|
||||
"capacity_gb": 1000,
|
||||
"vendor": "Samsung",
|
||||
"model": "970 EVO Plus",
|
||||
"smart_health": "PASSED",
|
||||
"temperature_c": 42
|
||||
}
|
||||
]
|
||||
```
|
||||
- `partitions_json` (TEXT, nullable)
|
||||
|
||||
### Réseau
|
||||
|
||||
- `network_interfaces_json` (TEXT, nullable)
|
||||
Exemple :
|
||||
```json
|
||||
[
|
||||
{
|
||||
"name": "eth0",
|
||||
"type": "ethernet",
|
||||
"mac": "aa:bb:cc:dd:ee:ff",
|
||||
"ip": "10.0.0.10",
|
||||
"speed_mbps": 1000,
|
||||
"driver": "e1000e"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### OS / Carte mère
|
||||
|
||||
- `os_name` (TEXT)
|
||||
- `os_version` (TEXT)
|
||||
- `kernel_version` (TEXT)
|
||||
- `architecture` (TEXT) – "x86_64", "arm64"
|
||||
- `virtualization_type` (TEXT, nullable) – "kvm", "vmware", "none", etc.
|
||||
- `motherboard_vendor` (TEXT, nullable)
|
||||
- `motherboard_model` (TEXT, nullable)
|
||||
- `bios_version` (TEXT, nullable)
|
||||
- `bios_date` (TEXT, nullable)
|
||||
|
||||
### Divers
|
||||
|
||||
- `sensors_json` (TEXT, nullable) – valeurs de températures, etc.
|
||||
- `raw_info_json` (TEXT, nullable) – dump brut de commandes (inxi, lshw, etc.)
|
||||
|
||||
Index recommandés :
|
||||
- `idx_hw_snapshots_device_id`
|
||||
- `idx_hw_snapshots_captured_at`
|
||||
|
||||
---
|
||||
|
||||
## Table benchmarks
|
||||
|
||||
Représente un run de bench.
|
||||
|
||||
Champs :
|
||||
|
||||
- `id` (INTEGER, PK)
|
||||
- `device_id` (INTEGER, FK -> devices.id)
|
||||
- `hardware_snapshot_id` (INTEGER, FK -> hardware_snapshots.id)
|
||||
- `run_at` (DATETIME, non nul)
|
||||
- `bench_script_version` (TEXT, non nul)
|
||||
|
||||
### Scores
|
||||
|
||||
- `global_score` (REAL, non nul)
|
||||
- `cpu_score` (REAL, nullable)
|
||||
- `memory_score` (REAL, nullable)
|
||||
- `disk_score` (REAL, nullable)
|
||||
- `network_score` (REAL, nullable)
|
||||
- `gpu_score` (REAL, nullable)
|
||||
|
||||
### Détails
|
||||
|
||||
- `details_json` (TEXT, non nul)
|
||||
Contient toutes les valeurs brutes :
|
||||
- CPU events/sec, temps d’exécution, etc.
|
||||
- Throughput mémoire.
|
||||
- Read/write MB/s, IOPS.
|
||||
- Vitesse iperf3, ping.
|
||||
- Score GPU, etc.
|
||||
|
||||
- `notes` (TEXT, nullable)
|
||||
|
||||
Index :
|
||||
- `idx_benchmarks_device_id`
|
||||
- `idx_benchmarks_run_at`
|
||||
|
||||
---
|
||||
|
||||
## Table manufacturer_links
|
||||
|
||||
Liens vers les ressources en ligne du constructeur.
|
||||
|
||||
Champs :
|
||||
|
||||
- `id` (INTEGER, PK)
|
||||
- `device_id` (INTEGER, FK -> devices.id)
|
||||
- `label` (TEXT, non nul) – ex: "Support HP", "Page produit Lenovo"
|
||||
- `url` (TEXT, non nul)
|
||||
|
||||
Index :
|
||||
- `idx_links_device_id`
|
||||
|
||||
---
|
||||
|
||||
## Table documents
|
||||
|
||||
Fichiers (PDF, images, etc.) associés à un device.
|
||||
|
||||
Champs :
|
||||
|
||||
- `id` (INTEGER, PK)
|
||||
- `device_id` (INTEGER, FK -> devices.id)
|
||||
- `doc_type` (TEXT, non nul) – `manual`, `warranty`, `invoice`, `photo`, `other`
|
||||
- `filename` (TEXT, non nul) – nom original
|
||||
- `stored_path` (TEXT, non nul) – chemin relatif sur le serveur
|
||||
- `mime_type` (TEXT, non nul)
|
||||
- `size_bytes` (INTEGER, non nul)
|
||||
- `uploaded_at` (DATETIME, non nul)
|
||||
|
||||
Index :
|
||||
- `idx_documents_device_id`
|
||||
|
||||
---
|
||||
|
||||
## Éventuelle table settings (optionnelle)
|
||||
|
||||
Pour stocker des paramètres globaux de l’application.
|
||||
|
||||
Champs :
|
||||
|
||||
- `id` (INTEGER, PK)
|
||||
- `key` (TEXT, unique)
|
||||
- `value` (TEXT)
|
||||
|
||||
Exemples :
|
||||
- `default_bench_server_url`
|
||||
- `default_iperf_server`
|
||||
- `score_weights_json` (pondération CPU/Mem/Disque/Réseau/GPU)
|
||||
Reference in New Issue
Block a user