# PROMPT — Bench Client Linux (binaire Go / Rust) ## 🎯 Objectif Concevoir un **programme binaire autonome** nommĂ© `bench-client`, exĂ©cutĂ© sur des machines **Linux x86\_64**, destinĂ© Ă  collecter des informations systĂšme, exĂ©cuter des benchmarks contrĂŽlĂ©s, produire un JSON structurĂ© et l’envoyer Ă  un backend HTTP. Ce programme **remplace un script Bash complexe** et est pilotĂ© par un **fichier de configuration YAML distant**. --- ## 🧠 RĂŽle attendu Tu es un **dĂ©veloppeur systĂšme senior (Linux / Go ou Rust)**. Tu dois produire un binaire **robuste, lisible, extensible**, orientĂ© production. --- ## đŸ–„ïž Environnement cible - OS : Linux (Debian, Ubuntu, Proxmox VE, dĂ©rivĂ©s) - Arch : x86\_64 - Lancement : `sudo ./bench-client` - Langage : **Go (prioritĂ©)** ou **Rust** - Binaire dĂ©jĂ  compilĂ© (aucune compilation sur la machine cible) - Pas de dĂ©pendances runtime externes (hors outils systĂšme) --- ## đŸ§© DĂ©ploiement (hors programme) Un script shell externe (dĂ©jĂ  existant) : 1. installe les outils systĂšme requis 2. tĂ©lĂ©charge le binaire 3. tĂ©lĂ©charge `config.yaml` depuis un serveur HTTP 4. exporte `API_TOKEN` 5. exĂ©cute `bench-client` Le **binaire ne gĂšre PAS l’installation**. --- ## ⚙ Configuration distante (OBLIGATOIRE) Le programme doit charger un fichier `config.yaml` distant qui pilote : - les sections actives/inactives - les outils Ă  utiliser - les paramĂštres des benchmarks - les limites de sĂ©curitĂ© - les pondĂ©rations du score - l’URL du backend ### Contraintes - Le token **NE DOIT PAS** ĂȘtre dans la config - Le token est fourni via `API_TOKEN` - La config distante doit ĂȘtre : - validĂ©e - bornĂ©e (timeouts, tailles max) - mise en cache localement - utilisable en fallback si HTTP indisponible --- ## đŸ—ïž Architecture interne ### Core - parsing des arguments : - `--config-url` - `--debug` - `--dry-run` - chargement config YAML - validation des paramĂštres - orchestration des collecteurs --- ### Collecteurs (pattern obligatoire) Chaque collecteur implĂ©mente : - `Check()` → outil prĂ©sent / droits OK - `Run(ctx)` → exĂ©cution avec timeout - `Parse(output)` → donnĂ©es structurĂ©es - `Raw()` → sortie brute optionnelle Les collecteurs doivent ĂȘtre **indĂ©pendants**. --- ## 🔧 Outils systĂšmes Ă  piloter ### Informations systĂšme - `lscpu` - `free` - `lsblk` - `ip` - `dmidecode` (root) - `lspci` - `lsusb` - `ethtool` (root) - `iw` - `smartctl` (root) - `aplay`, `arecord`, `pactl` - `systemd-detect-virt` - `pveversion` - `xrandr`, `xdpyinfo`, `swaymsg` ### Benchmarks - `sysbench cpu` - `sysbench memory` - `fio` (non destructif) - `iperf3 -J` Si un outil est absent : - afficher WARN - continuer l’exĂ©cution --- ## 📊 Benchmarks - CPU : sysbench single + multi - RAM : sysbench memory - Disque : fio randrw - RĂ©seau : iperf3 bidirectionnel JSON - GPU : placeholder (dĂ©sactivĂ© par dĂ©faut) ### PondĂ©rations par dĂ©faut - CPU : 40 % - RAM : 20 % - Disque : 20 % - RĂ©seau : 10 % - GPU : 10 % Tous les benchmarks doivent : - avoir un timeout - ĂȘtre annulables via context - afficher une progression CLI --- ## đŸ–šïž Sortie CLI (temps rĂ©el) Le programme doit afficher : - progression globale `[step/total]` - Ă©tat : OK / WARN / ERROR - logs en direct des benchmarks - couleurs ANSI si TTY - mode `--debug` : - commandes exĂ©cutĂ©es - sorties brutes - JSON sauvegardĂ© dans `/tmp` Exemple : ``` [3/8] CPU : lscpu
 OK (12C / 24T) [6/8] Disk bench : fio
 OK (R=520MB/s W=480MB/s) ``` --- ## 📩 JSON final Le JSON gĂ©nĂ©rĂ© doit contenir : - `device_identifier` - `bench_client_version` - `hardware` - cpu - ram - gpu - storage - network - audio - motherboard - os - `results` - cpu - memory - disk - network - gpu - global\_score - `raw_info` (si debug activĂ©) Le JSON est : - validĂ© - envoyĂ© via HTTP POST - header : ``` Authorization: Bearer $API_TOKEN ``` --- ## 🔐 SĂ©curitĂ© - aucun benchmark destructif - timeouts stricts - limites configurables - pas de commandes arbitraires - pas de secrets dans le binaire --- ## 🎯 RĂ©sultat attendu Un **bench-client binaire** : - stable - lisible - extensible - pilotĂ© par config distante - capable de remplacer totalement le script Bash existant