This commit is contained in:
2025-12-14 10:40:54 +01:00
parent 5d483b0df5
commit 8428bf9c82
55 changed files with 9763 additions and 391 deletions

View File

@@ -14,7 +14,7 @@ set -e
# Version / variables globales
#=========================================================
BENCH_SCRIPT_VERSION="1.1.0"
BENCH_SCRIPT_VERSION="1.2.0"
# Couleurs
GREEN='\033[0;32m'
@@ -108,7 +108,7 @@ check_dependencies() {
echo -e "${BLUE}Vérification des dépendances...${NC}"
for tool in curl jq lscpu free lsblk ip bc; do
for tool in curl jq lscpu free lsblk ip bc smartctl; do
command -v "$tool" &>/dev/null || missing+=("$tool")
done
@@ -146,6 +146,7 @@ check_dependencies() {
[lsblk]="util-linux"
[ip]="iproute2"
[bc]="bc"
[smartctl]="smartmontools"
[sysbench]="sysbench"
[fio]="fio"
[iperf3]="iperf3"
@@ -236,7 +237,18 @@ collect_cpu_info() {
local vendor model cores threads
vendor=$(lscpu | awk -F: '/Vendor ID/ {gsub(/^[ \t]+/,"",$2); print $2}')
model=$(lscpu | awk -F: '/Model name/ {gsub(/^[ \t]+/,"",$2); print $2}')
cores=$(lscpu | awk -F: '/^CPU\(s\)/ {gsub(/^[ \t]+/,"",$2); print $2}')
# Calcul du nombre de cores physiques: Core(s) per socket × Socket(s)
local cores_per_socket sockets
cores_per_socket=$(lscpu | awk -F: '/Core\(s\) per socket/ {gsub(/^[ \t]+/,"",$2); gsub(/[^0-9]/,"",$2); print $2}')
sockets=$(lscpu | awk -F: '/Socket\(s\)/ {gsub(/^[ \t]+/,"",$2); gsub(/[^0-9]/,"",$2); print $2}')
# S'assurer que les valeurs sont des nombres valides
[[ -z "$cores_per_socket" || "$cores_per_socket" == "0" ]] && cores_per_socket=1
[[ -z "$sockets" || "$sockets" == "0" ]] && sockets=1
cores=$((cores_per_socket * sockets))
threads=$(nproc)
local cpu_mhz cpu_max_mhz base_freq_ghz max_freq_ghz
@@ -253,9 +265,17 @@ collect_cpu_info() {
fi
local cache_l1_kb cache_l2_kb cache_l3_kb
cache_l1_kb=$(lscpu | awk -F: '/L1d cache/ {gsub(/[^0-9]/,"",$2); print $2}')
cache_l2_kb=$(lscpu | awk -F: '/L2 cache/ {gsub(/[^0-9]/,"",$2); print $2}')
cache_l3_kb=$(lscpu | awk -F: '/L3 cache/ {gsub(/[^0-9]/,"",$2); print $2}')
# L1 cache = L1d + L1i
# Parser format: "384 KiB (12 instances)" ou "6 MiB (12 instances)"
# Extraire le premier nombre + unité, ignorer "(X instances)"
# Utilisation de sed pour extraire "nombre unité" puis awk pour convertir MiB en KB
local cache_l1d cache_l1i
cache_l1d=$(lscpu | grep 'L1d cache' | sed -n 's/.*:\s*\([0-9]\+\)\s*\(KiB\|MiB\).*/\1 \2/p' | awk '{if ($2 == "MiB") print $1*1024; else print $1}')
cache_l1i=$(lscpu | grep 'L1i cache' | sed -n 's/.*:\s*\([0-9]\+\)\s*\(KiB\|MiB\).*/\1 \2/p' | awk '{if ($2 == "MiB") print $1*1024; else print $1}')
cache_l1_kb=$((${cache_l1d:-0} + ${cache_l1i:-0}))
cache_l2_kb=$(lscpu | grep 'L2 cache' | sed -n 's/.*:\s*\([0-9]\+\)\s*\(KiB\|MiB\).*/\1 \2/p' | awk '{if ($2 == "MiB") print $1*1024; else print $1}')
cache_l3_kb=$(lscpu | grep 'L3 cache' | sed -n 's/.*:\s*\([0-9]\+\)\s*\(KiB\|MiB\).*/\1 \2/p' | awk '{if ($2 == "MiB") print $1*1024; else print $1}')
local flags
flags=$(lscpu | awk -F: '/Flags/ {gsub(/^[ \t]+/,"",$2); print $2}')
@@ -410,6 +430,7 @@ collect_hardware_info() {
local gpu_vendor="null"
local gpu_model="null"
local gpu_vram="null"
local gpu_driver="null"
if command -v lspci &>/dev/null; then
local gpu_line
@@ -418,6 +439,17 @@ collect_hardware_info() {
gpu_model=$(echo "$gpu_line" | sed 's/.*: //')
if echo "$gpu_line" | grep -qi 'nvidia'; then
gpu_vendor="NVIDIA"
# Essayer d'obtenir plus d'infos avec nvidia-smi
if command -v nvidia-smi &>/dev/null; then
local nvidia_model nvidia_vram nvidia_driver
nvidia_model=$(nvidia-smi --query-gpu=name --format=csv,noheader 2>/dev/null | head -1)
nvidia_vram=$(nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits 2>/dev/null | head -1)
nvidia_driver=$(nvidia-smi --query-gpu=driver_version --format=csv,noheader 2>/dev/null | head -1)
[[ -n "$nvidia_model" ]] && gpu_model="$nvidia_model"
[[ -n "$nvidia_vram" ]] && gpu_vram="$nvidia_vram"
[[ -n "$nvidia_driver" ]] && gpu_driver="$nvidia_driver"
fi
elif echo "$gpu_line" | grep -qi 'amd'; then
gpu_vendor="AMD"
elif echo "$gpu_line" | grep -qi 'intel'; then
@@ -432,14 +464,20 @@ collect_hardware_info() {
--arg vendor "$gpu_vendor" \
--arg model "$gpu_model" \
--arg vram "$gpu_vram" \
--arg driver "$gpu_driver" \
'{
vendor: $vendor,
model: $model,
vram_mb: (if $vram == "null" or $vram == "" then null else ($vram | tonumber?) end)
memory_dedicated_mb: (if $vram == "null" or $vram == "" then null else ($vram | tonumber?) end),
driver_version: (if $driver == "null" or $driver == "" then null else $driver end)
}')
if [[ "$gpu_model" != "null" ]]; then
log_info "GPU: $gpu_model"
if [[ "$gpu_vram" != "null" ]]; then
log_info "GPU: $gpu_model (${gpu_vram}MB VRAM)"
else
log_info "GPU: $gpu_model"
fi
else
log_warn "GPU non détecté"
fi
@@ -497,13 +535,30 @@ collect_storage_info() {
local interface="unknown"
[[ -n "$tran" ]] && interface="$tran"
local model="Unknown" serial="Unknown"
local model="Unknown" serial="Unknown" temperature="null" smart_health="null"
if command -v smartctl &>/dev/null; then
if sudo smartctl -i "/dev/$d" &>/dev/null; then
local s
s=$(sudo smartctl -i "/dev/$d" 2>/dev/null)
model=$(echo "$s" | awk -F: '/Device Model|Model Number/ {gsub(/^[ \t]+/,"",$2); print $2}' | head -1)
serial=$(echo "$s" | awk -F: '/Serial Number/ {gsub(/^[ \t]+/,"",$2); print $2}' | head -1)
# Essayer de récupérer la température et le statut SMART
local smart_all
smart_all=$(sudo smartctl -A "/dev/$d" 2>/dev/null || true)
# Température (diverses variantes selon le type de disque)
# SATA/HDD: Temperature_Celsius, Airflow_Temperature_Cel, Current Drive Temperature
# RAW_VALUE est après le "-" (colonne 8 dans la plupart des cas, mais peut varier)
# On extrait tout après le "-" puis prend le premier nombre
# NVMe: Temperature: XX Celsius (colonne 2)
temperature=$(echo "$smart_all" | awk '/Temperature_Celsius|Airflow_Temperature_Cel|Current Drive Temperature/ {for(i=1;i<=NF;i++) if($i=="-" && i<NF) {print $(i+1); exit}}' | head -1 | grep -oE '^[0-9]+' | head -1)
[[ -z "$temperature" ]] && temperature=$(echo "$smart_all" | awk '/^Temperature:/ {print $2}' | head -1)
[[ -z "$temperature" ]] && temperature="null"
# Statut SMART health
local health
health=$(sudo smartctl -H "/dev/$d" 2>/dev/null | awk '/SMART overall-health|SMART Health Status/ {print $NF}' | head -1)
[[ -n "$health" ]] && smart_health="$health" || smart_health="null"
fi
fi
@@ -517,18 +572,26 @@ collect_storage_info() {
--arg type "$disk_type" \
--arg interface "$interface" \
--arg serial "$serial" \
--arg temp "$temperature" \
--arg health "$smart_health" \
'{
device: $device,
model: $model,
size_gb: $size,
type: $type,
interface: $interface,
serial: $serial
serial: $serial,
temperature_c: (if $temp == "null" or $temp == "" then null else ($temp | tonumber?) end),
smart_health: (if $health == "null" or $health == "" then null else $health end)
}')
storage_array=$(echo "$storage_array" | jq --argjson disk "$disk_json" '. + [$disk]')
log_info "Disque: /dev/$d - $model ($size_h, $disk_type)"
if [[ "$temperature" != "null" ]]; then
log_info "Disque: /dev/$d - $model ($size_h, $disk_type, ${temperature}°C)"
else
log_info "Disque: /dev/$d - $model ($size_h, $disk_type)"
fi
done
STORAGE_INFO="$storage_array"
@@ -567,10 +630,12 @@ collect_network_info() {
local e
e=$(sudo ethtool "$iface" 2>/dev/null || true)
local spd
spd=$(echo "$e" | awk -F: '/Speed:/ {gsub(/ Mb\/s/,"",$2); gsub(/^[ \t]+/,"",$2); print $2}')
# Extraire seulement le nombre de la vitesse (enlever "Mb/s")
spd=$(echo "$e" | awk -F: '/Speed:/ {gsub(/^[ \t]+/,"",$2); print $2}' | grep -oE '[0-9]+' | head -1)
[[ -n "$spd" ]] && speed="$spd"
local wol
wol=$(echo "$e" | awk -F: '/Wake-on:/ {gsub(/^[ \t]+/,"",$2); print $2}')
# Extraire Wake-on-LAN et nettoyer (enlever retours chariot)
wol=$(echo "$e" | awk -F: '/Wake-on:/ {gsub(/^[ \t]+/,"",$2); print $2}' | tr -d '\n' | head -1)
if [[ -n "$wol" && "$wol" != "d" ]]; then
wol_supported="true"
elif [[ -n "$wol" ]]; then
@@ -578,6 +643,14 @@ collect_network_info() {
fi
fi
# Convertir wol_supported en booléen ou null pour jq
local wol_json="null"
if [[ "$wol_supported" == "true" ]]; then
wol_json="true"
elif [[ "$wol_supported" == "false" ]]; then
wol_json="false"
fi
local net_json
net_json=$(jq -n \
--arg name "$iface" \
@@ -585,17 +658,22 @@ collect_network_info() {
--arg mac "$mac" \
--arg ip "${ip_addr:-}" \
--arg speed "$speed" \
--arg wol "$wol_supported" \
--argjson wol "$wol_json" \
'{
name: $name,
type: $type,
mac: $mac,
ip_address: ( $ip | select(. != "") ),
speed_mbps: ( ( $speed | tonumber? ) // null ),
wake_on_lan: ( if $wol == "" then null else ( $wol|test("true";"i") ) end )
}')
wake_on_lan: $wol
}' 2>/dev/null || echo '{}')
network_array=$(echo "$network_array" | jq --argjson net "$net_json" '. + [$net]')
# Vérifier que net_json est valide avant de l'ajouter
if [[ "$net_json" != "{}" ]] && echo "$net_json" | jq empty 2>/dev/null; then
network_array=$(echo "$network_array" | jq --argjson net "$net_json" '. + [$net]')
else
log_warn "Interface $iface: JSON invalide, ignorée"
fi
log_info "Interface: $iface ($type) - IP: ${ip_addr:-N/A}"
done
@@ -647,7 +725,9 @@ run_benchmarks() {
local mem_res
mem_res=$(sysbench memory --memory-total-size=1G run 2>&1 || true)
local thr
thr=$(echo "$mem_res" | awk '/transferred/ {print $6}' | head -1)
# Extraire le throughput - essayer plusieurs patterns
thr=$(echo "$mem_res" | grep -oP '\d+\.\d+(?= MiB/sec)' | head -1)
[[ -z "$thr" ]] && thr=$(echo "$mem_res" | awk '/transferred/ {print $(NF-1)}' | head -1)
[[ -z "$thr" ]] && thr=0
local mem_score
mem_score=$(safe_bc "scale=2; $thr / 100")
@@ -727,44 +807,46 @@ run_benchmarks() {
if ping -c 1 -W 1 "$target" &>/dev/null; then
if nc -z "$target" 5201 &>/dev/null; then
# Test upload (client → serveur)
local upload_result=$(iperf3 -c "$target" -t 10 -J 2>/dev/null || echo '{}')
# Test bidirectionnel (upload + download simultanés)
local bidir_result=$(iperf3 -c "$target" -t 10 --bidir -J 2>/dev/null || echo '{}')
local upload_mbps="0"
local download_mbps="0"
local ping_ms="null"
if [[ "$upload_result" != "{}" ]]; then
# Extraire le débit d'upload en bits/sec et convertir en Mbps
local upload_bps=$(echo "$upload_result" | jq '.end.sum_sent.bits_per_second // 0')
upload_mbps=$(echo "scale=2; $upload_bps / 1000000" | bc)
if [[ "$bidir_result" != "{}" ]]; then
# Extraire upload (end.sum_sent) et download (end.sum_received)
local upload_bps=$(echo "$bidir_result" | jq -r '.end.sum_sent.bits_per_second // 0' | tr -d '\n')
local download_bps=$(echo "$bidir_result" | jq -r '.end.sum_received.bits_per_second // 0' | tr -d '\n')
# Test download (serveur → client avec -R)
local download_result=$(iperf3 -c "$target" -t 10 -R -J 2>/dev/null || echo '{}')
if [[ "$download_result" != "{}" ]]; then
local download_bps=$(echo "$download_result" | jq '.end.sum_received.bits_per_second // 0')
download_mbps=$(echo "scale=2; $download_bps / 1000000" | bc)
fi
upload_mbps=$(safe_bc "scale=2; $upload_bps / 1000000" | tr -d '\n')
download_mbps=$(safe_bc "scale=2; $download_bps / 1000000" | tr -d '\n')
# Mesurer le ping
local ping_output=$(ping -c 5 "$target" 2>/dev/null | grep 'avg' || echo "")
if [[ -n "$ping_output" ]]; then
ping_ms=$(echo "$ping_output" | awk -F'/' '{print $5}')
ping_ms=$(echo "$ping_output" | awk -F'/' '{print $5}' | tr -d '\n')
fi
# Score réseau
local net_score=$(echo "scale=2; ($upload_mbps + $download_mbps) / 20" | bc)
local net_score=$(safe_bc "scale=2; ($upload_mbps + $download_mbps) / 20" | tr -d '\n')
# S'assurer que les valeurs sont valides pour jq
[[ -z "$upload_mbps" || "$upload_mbps" == "null" ]] && upload_mbps="0"
[[ -z "$download_mbps" || "$download_mbps" == "null" ]] && download_mbps="0"
[[ -z "$ping_ms" || "$ping_ms" == "null" ]] && ping_ms="0"
[[ -z "$net_score" || "$net_score" == "null" ]] && net_score="0"
net_bench=$(jq -n \
--argjson upload "$upload_mbps" \
--argjson download "$download_mbps" \
--argjson ping "${ping_ms:-null}" \
--argjson ping "$ping_ms" \
--argjson score "$net_score" \
'{upload_mbps: $upload, download_mbps: $download, ping_ms: $ping, score: $score}')
log_info "Réseau: ↑${upload_mbps}Mbps ↓${download_mbps}Mbps (ping: ${ping_ms}ms, score: ${net_score})"
else
log_warn "Test iperf3 upload échoué - Network bench ignoré"
log_warn "Test iperf3 bidirectionnel échoué - Network bench ignoré"
fi
else
log_warn "Port iperf3 (5201) fermé sur $target - Network bench ignoré"
@@ -780,28 +862,43 @@ run_benchmarks() {
local gpu_bench="null"
log_warn "GPU bench non implémenté - ignoré"
# Score global (CPU 40%, RAM 30%, Disque 30%)
# Score global selon pondérations recommandées :
# CPU 30%, RAM 20%, Disque 25%, Réseau 15%, GPU 10%
local scores="" total_weight=0
if [[ "$cpu_bench" != "null" ]]; then
local cs
cs=$(echo "$cpu_bench" | jq '.score // 0')
scores="$scores + $cs * 0.4"
total_weight=$(safe_bc "$total_weight + 0.4")
scores="$scores + $cs * 0.30"
total_weight=$(safe_bc "$total_weight + 0.30")
fi
if [[ "$mem_bench" != "null" ]]; then
local ms
ms=$(echo "$mem_bench" | jq '.score // 0')
scores="$scores + $ms * 0.3"
total_weight=$(safe_bc "$total_weight + 0.3")
scores="$scores + $ms * 0.20"
total_weight=$(safe_bc "$total_weight + 0.20")
fi
if [[ "$disk_bench" != "null" ]]; then
local ds
ds=$(echo "$disk_bench" | jq '.score // 0')
scores="$scores + $ds * 0.3"
total_weight=$(safe_bc "$total_weight + 0.3")
scores="$scores + $ds * 0.25"
total_weight=$(safe_bc "$total_weight + 0.25")
fi
if [[ "$net_bench" != "null" ]]; then
local ns
ns=$(echo "$net_bench" | jq '.score // 0')
scores="$scores + $ns * 0.15"
total_weight=$(safe_bc "$total_weight + 0.15")
fi
if [[ "$gpu_bench" != "null" ]]; then
local gs
gs=$(echo "$gpu_bench" | jq '.score // 0')
scores="$scores + $gs * 0.10"
total_weight=$(safe_bc "$total_weight + 0.10")
fi
scores=$(echo "$scores" | sed -E 's/^[[:space:]]*\+ //')
@@ -924,8 +1021,8 @@ send_benchmark_payload() {
capacity_gb: (.size_gb | tonumber? // .size_gb),
vendor: null,
model,
smart_health: null,
temperature_c: null
smart_health,
temperature_c
}
],
partitions: []
@@ -940,7 +1037,8 @@ send_benchmark_payload() {
mac,
ip: .ip_address,
speed_mbps,
driver: null
driver: null,
wake_on_lan
}
]
},
@@ -948,6 +1046,7 @@ send_benchmark_payload() {
motherboard: {
vendor: $mb.manufacturer,
model: $mb.model,
bios_vendor: $mb.bios_vendor,
bios_version: $mb.bios_version,
bios_date: $mb.bios_date
},

View File

@@ -0,0 +1,366 @@
════════════════════════════════════════════════════════
DEBUG: Payload JSON complet
════════════════════════════════════════════════════════
{
"device_identifier": "aorus",
"bench_script_version": "1.2.0",
"hardware": {
"cpu": {
"vendor": "AuthenticAMD",
"model": "AMD Ryzen 9 5900X 12-Core Processor",
"cores": 12,
"threads": 24,
"base_freq_ghz": null,
"max_freq_ghz": 4.95,
"cache_l1_kb": 76824,
"cache_l2_kb": 612,
"cache_l3_kb": 642,
"flags": [
"fpu",
"vme",
"de",
"pse",
"tsc",
"msr",
"pae",
"mce",
"cx8",
"apic",
"sep",
"mtrr",
"pge",
"mca",
"cmov",
"pat",
"pse36",
"clflush",
"mmx",
"fxsr",
"sse",
"sse2",
"ht",
"syscall",
"nx",
"mmxext",
"fxsr_opt",
"pdpe1gb",
"rdtscp",
"lm",
"constant_tsc",
"rep_good",
"nopl",
"xtopology",
"nonstop_tsc",
"cpuid",
"extd_apicid",
"aperfmperf",
"rapl",
"pni",
"pclmulqdq",
"monitor",
"ssse3",
"fma",
"cx16",
"sse4_1",
"sse4_2",
"x2apic",
"movbe",
"popcnt",
"aes",
"xsave",
"avx",
"f16c",
"rdrand",
"lahf_lm",
"cmp_legacy",
"svm",
"extapic",
"cr8_legacy",
"abm",
"sse4a",
"misalignsse",
"3dnowprefetch",
"osvw",
"ibs",
"skinit",
"wdt",
"tce",
"topoext",
"perfctr_core",
"perfctr_nb",
"bpext",
"perfctr_llc",
"mwaitx",
"cpb",
"cat_l3",
"cdp_l3",
"hw_pstate",
"ssbd",
"mba",
"ibrs",
"ibpb",
"stibp",
"vmmcall",
"fsgsbase",
"bmi1",
"avx2",
"smep",
"bmi2",
"erms",
"invpcid",
"cqm",
"rdt_a",
"rdseed",
"adx",
"smap",
"clflushopt",
"clwb",
"sha_ni",
"xsaveopt",
"xsavec",
"xgetbv1",
"xsaves",
"cqm_llc",
"cqm_occup_llc",
"cqm_mbm_total",
"cqm_mbm_local",
"user_shstk",
"clzero",
"irperf",
"xsaveerptr",
"rdpru",
"wbnoinvd",
"arat",
"npt",
"lbrv",
"svm_lock",
"nrip_save",
"tsc_scale",
"vmcb_clean",
"flushbyasid",
"decodeassists",
"pausefilter",
"pfthreshold",
"avic",
"v_vmsave_vmload",
"vgif",
"v_spec_ctrl",
"umip",
"pku",
"ospke",
"vaes",
"vpclmulqdq",
"rdpid",
"overflow_recov",
"succor",
"smca",
"fsrm",
"debug_swap"
],
"microarchitecture": null,
"tdp_w": null
},
"ram": {
"total_mb": 48096,
"used_mb": 7458,
"free_mb": 36521,
"shared_mb": 146,
"slots_total": 4,
"slots_used": 4,
"ecc": false,
"layout": [
{
"slot": "DIMM",
"size_mb": 16384,
"type": "DDR4",
"speed_mhz": 0,
"vendor": "Unknown",
"part_number": null
},
{
"slot": "DIMM",
"size_mb": 8192,
"type": "DDR4",
"speed_mhz": 0,
"vendor": "Unknown",
"part_number": null
},
{
"slot": "DIMM",
"size_mb": 16384,
"type": "DDR4",
"speed_mhz": 0,
"vendor": "Unknown",
"part_number": null
},
{
"slot": "DIMM",
"size_mb": 8192,
"type": "DDR4",
"speed_mhz": 0,
"vendor": "Unknown",
"part_number": null
}
]
},
"gpu": {
"vendor": "NVIDIA",
"model": "NVIDIA GeForce RTX 3060",
"driver_version": null,
"memory_dedicated_mb": null,
"memory_shared_mb": null,
"api_support": []
},
"storage": {
"devices": [
{
"name": "/dev/sda",
"type": "SSD",
"interface": "sata",
"capacity_gb": 447.1,
"vendor": null,
"model": "KINGSTON SUV500480G",
"smart_health": "PASSED",
"temperature_c": 23
},
{
"name": "/dev/sdb",
"type": "SSD",
"interface": "usb",
"capacity_gb": 0,
"vendor": null,
"model": "Unknown",
"smart_health": null,
"temperature_c": null
},
{
"name": "/dev/sdc",
"type": "SSD",
"interface": "usb",
"capacity_gb": 0,
"vendor": null,
"model": "Unknown",
"smart_health": null,
"temperature_c": null
},
{
"name": "/dev/sdd",
"type": "SSD",
"interface": "usb",
"capacity_gb": 0,
"vendor": null,
"model": "Unknown",
"smart_health": null,
"temperature_c": null
},
{
"name": "/dev/sde",
"type": "SSD",
"interface": "usb",
"capacity_gb": 0,
"vendor": null,
"model": "Unknown",
"smart_health": null,
"temperature_c": null
},
{
"name": "/dev/nvme0n1",
"type": "SSD",
"interface": "nvme",
"capacity_gb": 465.8,
"vendor": null,
"model": "CT500P2SSD8",
"smart_health": "PASSED",
"temperature_c": 29
},
{
"name": "/dev/nvme1n1",
"type": "SSD",
"interface": "nvme",
"capacity_gb": 465.8,
"vendor": null,
"model": "CT500P2SSD8",
"smart_health": "PASSED",
"temperature_c": 30
}
],
"partitions": []
},
"network": {
"interfaces": [
{
"name": "eno1",
"type": "ethernet",
"mac": "18:c0:4d:b5:65:74",
"ip": "10.0.1.109",
"speed_mbps": null,
"driver": null
}
]
},
"motherboard": {
"vendor": "Gigabyte Technology Co., Ltd.",
"model": "B450 AORUS ELITE",
"bios_version": "F65e",
"bios_date": "09/20/2023"
},
"os": {
"name": "debian",
"version": "13 (trixie)",
"kernel_version": "6.12.57+deb13-amd64",
"architecture": "x86_64",
"virtualization_type": "none"
},
"sensors": {
"cpu_temp_c": null,
"disk_temps_c": {}
},
"raw_info": {
"lscpu": null,
"lsblk": null
}
},
"results": {
"cpu": {
"events_per_sec": 26823.16,
"duration_s": 10.0008,
"score": 268.23
},
"memory": {
"throughput_mib_s": 8419.68,
"score": 84.19
},
"disk": {
"read_mb_s": 1066.86,
"write_mb_s": 1066.34,
"iops_read": 273117,
"iops_write": 272983,
"latency_ms": 0,
"score": 106.66
},
"network": {
"upload_mbps": 401.77,
"download_mbps": 399.98,
"ping_ms": 13.623,
"score": 40.08,
"jitter_ms": null,
"packet_loss_percent": null
},
"gpu": {
"glmark2_score": null,
"score": null
},
"global_score": 144.40
}
}
════════════════════════════════════════════════════════
✓ Payload sauvegardé dans: /tmp/bench_payload_20251214_092836.json
Appuyez sur Entrée pour continuer l'envoi ou Ctrl+C pour annuler...
✓ Envoi du payload vers: http://10.0.1.97:8007/api/benchmark
✓ Payload envoyé avec succès (HTTP 200)
════════════════════════════════════════════════════════
Benchmark terminé avec succès !
════════════════════════════════════════════════════════