Files
bench_go/prompt_bench_client.md
2026-01-11 16:12:00 +01:00

226 lines
4.2 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.
# 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 lenvoyer à 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 linstallation**.
---
## ⚙️ 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
- lURL 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 lexé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