Files
bench_go/config.yaml
2026-01-11 21:54:37 +01:00

498 lines
12 KiB
YAML

# bench-client config.yaml
# Objectif: décrire précisément
# - les outils à utiliser (et exigences d'installation)
# - les informations à collecter
# - les benchmarks à exécuter
# - les paramètres (timeouts, limites, endpoints, debug)
#
# Le binaire (Go/Rust) charge ce fichier depuis HTTP(S), valide les bornes, applique des defaults sûrs,
# et peut fallback sur une config locale si indisponible.
config_version: 1
profile: default
backend:
# URL finale du POST (le programme peut aussi accepter server_base_url + path)
url: "http://10.0.0.50:8007/api/benchmark"
# Auth: idéalement injecté par variable d'env sur le client; éviter de mettre le token dans la config distante.
auth:
mode: bearer_env
env_var: "test_hardware_perf"
http:
timeout_s: 15
retries: 2
retry_backoff_s: 2
tls:
verify: true
remote_config:
# Options de cache/ETag si le binaire gère le rafraîchissement
cache_path: "/var/cache/bench-client/config.yaml"
use_etag: true
refresh_max_age_s: 86400
runtime:
# Timeouts globaux de sécurité
max_total_runtime_s: 480
command_timeout_s: 30
command_timeout_overrides:
dmidecode_s: 20
smartctl_s: 10
lsblk_s: 10
sysbench_cpu_s: 120
sysbench_mem_s: 60
fio_s: 120
iperf3_s: 20
temp_dir: "/tmp"
locale: "C"
path_prepend:
- "/usr/sbin"
- "/sbin"
logging:
level: info # trace|debug|info|warn|error
progress: true # affichage étapes (1/N) + items
show_command_lines: false
capture_raw_output: true # remonte dans raw_info (attention taille)
raw_output_max_kb: 5120
save_payload_to_tmp: true
payload_tmp_dir: "/tmp"
payload_filename_prefix: "bench_payload_"
interactive_pause_on_debug: true
payload:
dir: "."
prefix: "bench_payload_"
always_save: true
device_identity:
# device_identifier envoyé au backend
prefer:
- hostname
- machine_id
hostname_command: "hostname"
machine_id_path: "/etc/machine-id"
dependencies:
# Liste des programmes externes (installés par le script shell)
# Le binaire doit pouvoir:
# - détecter présence/version (optionnel)
# - marquer chaque "feature" comme disponible ou non
required_base:
- name: "curl"
purpose: "Téléchargements/diagnostics (souvent côté script)"
- name: "jq"
purpose: "Optionnel: debug/validation (souvent côté script, pas nécessaire au binaire)"
- name: "lscpu"
purpose: "Infos CPU"
- name: "free"
purpose: "Infos mémoire"
- name: "lsblk"
purpose: "Infos stockage/partitions"
- name: "ip"
purpose: "Interfaces réseau, adresses IP"
- name: "bc"
purpose: "Optionnel: calculs (si pas fait en code)"
- name: "dmidecode"
purpose: "Infos BIOS/carte mère/RAM/DMI"
requires_root: true
- name: "smartctl"
package: "smartmontools"
purpose: "Infos disques SMART"
requires_root: true
- name: "ethtool"
purpose: "Vitesse réseau, Wake-on-LAN, driver"
requires_root: true
- name: "lspci"
package: "pciutils"
purpose: "Liste périphériques PCI (GPU/Audio/etc.)"
- name: "lsusb"
package: "usbutils"
purpose: "Liste périphériques USB"
- name: "aplay"
package: "alsa-utils"
purpose: "Inventaire audio ALSA"
- name: "arecord"
package: "alsa-utils"
purpose: "Inventaire capture ALSA"
- name: "pactl"
package: "pulseaudio-utils"
purpose: "Infos audio PulseAudio/PipeWire (si dispo)"
- name: "iw"
package: "iw"
purpose: "SSID + bitrate Wi-Fi"
- name: "loginctl"
package: "systemd"
purpose: "Type de session (x11/wayland/tty)"
- name: "xrandr"
package: "x11-xserver-utils"
purpose: "Résolution écran (X11)"
- name: "xdpyinfo"
package: "x11-utils"
purpose: "Résolution écran (fallback X11)"
- name: "swaymsg"
package: "sway"
purpose: "Résolution écran (Wayland/Sway)"
- name: "nvidia-smi"
package: "nvidia-utils"
purpose: "Infos GPU NVIDIA (si présent)"
- name: "systemd-detect-virt"
package: "systemd"
purpose: "Détection virtualisation/proxmox"
- name: "pveversion"
package: "pve-manager"
purpose: "Détection hôte Proxmox (si présent)"
benchmark_tools:
- name: "sysbench"
purpose: "Bench CPU et mémoire"
- name: "fio"
purpose: "Bench disque"
- name: "iperf3"
purpose: "Bench réseau"
- name: "ping"
package: "iputils-ping"
purpose: "Vérifier accessibilité iperf server"
- name: "nc"
package: "netcat-openbsd"
purpose: "Tester port 5201 iperf3"
collection:
# Liste des infos à récupérer, structurées comme dans ton script.
system:
enabled: true
items:
- hostname
- os_id
- os_version
- kernel_version
- architecture
- session_type # XDG_SESSION_TYPE / loginctl / DISPLAY / WAYLAND_DISPLAY
- screen_resolution # xrandr/xdpyinfo/swaymsg
- last_boot_time # who -b
- uptime_seconds # /proc/uptime
- battery_percentage # /sys/class/power_supply/BAT*/capacity
- battery_status # /sys/class/power_supply/BAT*/status
- battery_health # /sys/class/power_supply/BAT*/health ou uevent
- virtualization # systemd-detect-virt + proxmox hints
virtualization_detection:
enabled: true
proxmox:
detect_host_by:
- pveversion
- "/etc/pve"
detect_guest_by:
- systemd_detect_virt
- qemu_guest_agent
- dmidecode_manufacturer_product_matches: ["qemu", "proxmox"]
capture:
- is_proxmox_host
- is_proxmox_guest
- proxmox_version
- virtualization_type
cpu:
enabled: true
source:
primary: lscpu
supplement_dmidecode: true
items:
- vendor
- model
- cores_physical # cores_per_socket * sockets
- threads # nproc
- base_freq_ghz # lscpu CPU MHz -> GHz
- max_freq_ghz # lscpu CPU max MHz -> GHz
- cache_l1_kb
- cache_l2_kb
- cache_l3_kb
- flags # CPU flags list
- microarchitecture # depuis dmidecode type 4 (Family) si manquant
raw_capture:
- lscpu_output
ram:
enabled: true
sources:
- free
- dmidecode
items:
- total_mb
- used_mb
- free_mb
- shared_mb
- slots_total # dmidecode -t 16
- slots_used # dmidecode -t 17
- max_capacity_mb # dmidecode -t 16 Maximum Capacity
- ecc # dmidecode -t memory Error Correction Type
- layout # par slot: locator, size, type, speed, configured_speed, form_factor, type_detail, rank, manufacturer, part_number
raw_capture:
- dmidecode_full
gpu:
enabled: true
sources:
- lspci
- nvidia_smi_optional
items:
- vendor # NVIDIA/AMD/Intel/Unknown
- model # lspci vga/3d ou nvidia-smi name
- memory_dedicated_mb # nvidia-smi (si dispo)
- driver_version # nvidia-smi (si dispo)
motherboard_bios:
enabled: true
source: dmidecode
items:
- baseboard_manufacturer
- baseboard_product_name
- bios_vendor
- bios_version
- bios_release_date
pci_devices:
enabled: true
source: lspci
items:
- slot
- class
- vendor
- device
usb_devices:
enabled: true
source: lsusb
items:
- bus
- device
- vendor_id
- product_id
- name
audio:
enabled: true
sources:
- lspci
- alsa
- pactl_optional
items:
hardware:
- pci_audio_devices # lspci audio
- alsa_playback # aplay -l
- alsa_capture # arecord -l
- pcm_devices # aplay -L
software:
- backend # pipewire/pulseaudio/alsa
- server_name
- server_version
- default_sink
- default_source
- sinks
- sources
storage:
enabled: true
sources:
- lsblk
- smartctl
devices:
enumerate_by: "lsblk_disks" # lsblk -d -n -o NAME,TYPE
include_removable: false
items:
- device # /dev/sda
- model # smartctl -i
- serial # smartctl -i
- size # lsblk
- type # rota -> ssd/hdd
- interface # tran
- temperature_c # smartctl -A
- smart_health # smartctl -H
partitions:
enabled: true
source: lsblk_json
items:
- name
- mount_point
- fs_type
- total_gb
- used_gb
- free_gb
raw_capture:
- lsblk_output
network_shares:
enabled: true
source: "/proc/mounts"
detect_fs_types:
- nfs
- nfs4
- cifs
- smbfs
- fuse.cifs
- fuse.smbfs
- afp
- afpfs
- fuse.afpfs
- sshfs
- fuse.sshfs
- ftpfs
- curlftpfs
- fuse.ftpfs
- davfs
- davfs2
- fuse.webdavfs
items:
- protocol
- source
- mount_point
- fs_type
- options
- total_gb
- used_gb
- free_gb
network:
enabled: true
sources:
- ip
- ethtool
- iw_optional
interface_filter:
# reprise logique script: UP|UNKNOWN sauf interfaces virtuelles connues
include_states: ["UP", "UNKNOWN"]
exclude_name_prefixes: ["lo", "docker", "br-", "veth", "tap", "fw"]
items:
- name
- type # bridge|ethernet|wifi|unknown
- mac
- ip_address
- speed_mbps # ethtool speed ou iw tx bitrate
- driver # ethtool -i ou /sys/.../driver
- ssid # iw dev link
- wake_on_lan # ethtool Wake-on
raw_info:
enabled: true
include:
- lscpu
- lsblk
- dmidecode
max_size_kb: 5120
benchmarks:
enabled: true
# Pondérations identiques à ton script (si résultat dispo)
weights:
cpu: 0.40
memory: 0.20
disk: 0.20
network: 0.10
gpu: 0.10
cpu_sysbench:
enabled: true
tool: sysbench
params:
cpu_max_prime: 20000
single_thread: 1
multi_threads: "all" # all -> nproc
outputs:
- events_per_sec_single
- events_per_sec_multi
- duration_s
- score_single
- score_multi
- score_global
memory_sysbench:
enabled: true
tool: sysbench
params:
total_size: "1G"
outputs:
- throughput_mib_s
- score
disk_fio:
enabled: true
tool: fio
safety:
# Empêcher un bench destructif ou trop long
max_runtime_s: 60
max_size: "1G"
direct: 1
params:
name: "bench"
ioengine: "libaio"
rw: "randrw"
bs: "4k"
size: "500M"
numjobs: 1
runtime_s: 30
time_based: true
output_format: "json"
outputs:
- read_mb_s
- write_mb_s
- iops_read
- iops_write
- latency_ms
- score
network_iperf3:
enabled: true
tool: iperf3
server: "10.0.0.50"
port: 5201
prechecks:
ping:
enabled: true
count: 1
timeout_s: 1
port_check:
enabled: true
tool: nc
timeout_s: 2
params:
duration_s: 10
bidir: true
json: true
outputs:
- upload_mbps
- download_mbps
- ping_ms
- score
# placeholders (comme ton script)
- jitter_ms
- packet_loss_percent
gpu:
enabled: false
note: "GPU bench non implémenté dans le script d'origine (placeholder)."
payload_mapping:
# Le binaire peut mapper ses structures internes vers le schéma backend actuel.
# Utile si ton backend attend des champs précis.
device_identifier: "system.hostname"
bench_script_version_field: "bench_client_version"
include_sections:
- hardware
- results
- raw_info
limits:
# Bornes générales de sécurité (validation côté client)
max_payload_kb: 1024
max_raw_info_kb: 5120
max_fio_runtime_s: 60
max_fio_size_bytes: 1073741824 # 1 GiB
max_sysbench_cpu_prime: 50000
max_iperf_duration_s: 30
features:
# Permet d'activer/désactiver rapidement des blocs selon machines
enable_screen_resolution_detection: true
enable_battery_detection: true
enable_network_share_detection: true
enable_audio_detection: true
enable_proxmox_detection: true