Documentation utilisateur et technique pour le déploiement de bench-client.

Bench-Client
Agent de benchmarking autonome pour Linux x86_64 (Go). Cet outil remplace l'ancien script Bash en offrant une meilleure robustesse, une exécution parallèle sécurisée et une configuration distante pilotable.

📋 Table des matières
Fonctionnalités
Prérequis
Installation
Utilisation
Configuration
Sortie JSON
✨ Fonctionnalités
Inventaire Matériel Complet : CPU, RAM, Disques, Réseau, Carte Mère, Audio.
Benchmarks Sécurisés :
CPU (Sysbench : Single & Multi-thread).
RAM (Sysbench : Bande passante).
Disque (FIO : Aléatoire mixte, non-destructif).
Réseau (Iperf3 : Débit bidirectionnel).
Pilotage par Configuration Distante : Récupère les paramètres et les pondérations via HTTP(S).
Mode Débogage Intégré : Logs verbeux, sauvegarde locale des payloads.
Sécurité : Timeouts stricts, pas d'injection de commande, pas de secrets dans le binaire.
🛠️ Prérequis
Le binaire nécessite un environnement Linux x86_64 avec les droits root (sudo) pour accéder aux informations matérielles complètes (dmidecode, smartctl).

Dépendances système
Le script d'installation doit s'assurer que les outils suivants sont présents dans le $PATH :

# Baselsblk, lscpu, free, ip, lspci, lsusb, dmidecode, systemd-detect-virt# Réseauethtool, iw, iperf3, curl, nc (netcat)# Audioaplay, arecord, pactl# Benchmarkssysbench, fio
🚀 Installation
L'installation est gérée par un script shell externe (non inclus dans le binaire) qui doit effectuer les actions suivantes :

Télécharger le binaire bench-client (statique de préférence).
Télécharger le fichier config.yaml et le placer dans /var/cache/bench-client/ (ou le laisser être téléchargé par le client).
Donner les droits d'exécution : chmod +x bench-client.
S'assurer que les dépendances listées ci-dessus sont installées.
Exporter le token d'authentification.
💻 Utilisation
Syntaxe de base
bash

sudo API_TOKEN="votre_secret_token" ./bench-client [OPTIONS]
Options disponibles
Option
Description
--config-url <URL>	URL HTTP(S) pour télécharger la config.yaml à jour. Si omis, utilise le cache local ou les défauts internes.
--debug	Active le mode verbeux. Affiche les commandes exécutées, les sorties brutes, et sauvegarde le JSON final dans /tmp.
--dry-run	Simulation. Exécute la collecte d'infos mais ne lance pas les benchmarks (sauf inventaire) et n'envoie pas les données au serveur.

Exemples
Lancement standard (production) :

bash

sudo API_TOKEN="eyJhbGciOiJIUz..." ./bench-client --config-url "http://mon-intranet/configs/bench.yaml"
Test de collecte (sans bench) :

bash

sudo ./bench-client --dry-run --debug
⚙️ Configuration
Le fichier config.yaml (voir section précédente) contrôle le comportement du client.

Points clés de la configuration :

Backend : L'URL de réception des données.
Pondérations (weights) : Définissent l'importance de chaque bench dans le score final (par ex : CPU 40%, Disk 20%).
Sécurité (safety) : FIO est configuré pour être non-destructif (direct: true, fichier temporaire).
Timeouts : Chaque outil a une limite de temps stricte pour éviter que le client ne se bloque.
📤 Sortie JSON
Le client envoie une requête POST avec l'en-tête Authorization: Bearer <TOKEN>.

Structure du JSON
json

{
  "device_identifier": "srv-web-01",
  "bench_client_version": "1.0.0",
  "hardware": {
    "cpu": {
      "model": "Intel(R) Xeon(R) CPU E5-2670 v3 @ 2.30GHz",
      "cores": 24,
      "threads": 48
    },
    "ram": {
      "total_mb": 65536
    },
    "storage": [
      {
        "name": "sda",
        "size_gb": "500G",
        "type": "ssd"
      }
    ],
    "network": [
      {
        "name": "eth0",
        "ip_address": "192.168.1.10",
        "speed_mbps": "1000"
      }
    ]
  },
  "results": {
    "cpu": {
      "score_single": 105.4,
      "score_multi": 2400.8
    },
    "memory": {
      "throughput_mib_s": 5500.2,
      "score": 55.0
    },
    "disk": {
      "read_mb_s": 420.5,
      "write_mb_s": 380.2,
      "score": 40.0
    },
    "network": {
      "upload_mbps": 940.0,
      "download_mbps": 945.0,
      "score": 94.2
    },
    "global_score": 85.4
  },
  "raw_info": {
    "lscpu_output": "..."
  }
}
🔧 Dépannage
Erreur "Configuration unreachable"
Le client n'a pas pu joindre l'URL --config-url. Il tentera d'utiliser le fichier de cache local situé dans /var/cache/bench-client/config.yaml.

Benchmarks marqués "SKIPPED"
Si un outil n'est pas trouvé (ex: iperf3 manquant), le client affichera un WARN et continuera. Vérifiez les dépendances système.

Permissions refusées
Ce binaire doit être lancé en root (via sudo) pour pouvoir exécuter dmidecode, smartctl et fio en mode direct.