# 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)