8.0 KiB
Executable File
Debug - Benchmark Réseau (erreur jq)
Date : 13 décembre 2025 Version : 1.2.4 (debug)
🐛 Problème à Déboguer
Symptômes
Erreur persistante dans le benchmark réseau :
✓ Benchmark Réseau en cours (vers 10.0.1.97)...
jq: invalid JSON text passed to --argjson
Use jq --help for help with command-line options,
or see the jq manpage, or online docs at https://jqlang.github.io/jq
Contexte
- Le benchmark mémoire fonctionne maintenant correctement (8667.08 MiB/s)
- Les scores CPU et Disque sont élevés mais acceptés (validation à 10000)
- L'erreur jq se produit lors de la construction du JSON réseau
Hypothèses
- Une des valeurs
upload_mbps,download_mbps,ping_msounet_scoreest invalide - La valeur peut contenir des caractères non numériques
- La valeur peut être vide
""au lieu de"0"ou"null" safe_bc()peut retourner une valeur non numérique dans certains cas
🔍 Debug Ajouté
Code Debug (lignes 785-820)
# Extraction upload
local upload_bps=$(echo "$upload_result" | jq '.end.sum_sent.bits_per_second // 0')
echo " [DEBUG] upload_bps extrait de iperf3='$upload_bps'" >&2
upload_mbps=$(safe_bc "scale=2; $upload_bps / 1000000")
echo " [DEBUG] upload_mbps après conversion='$upload_mbps'" >&2
# Extraction download
local download_bps=$(echo "$download_result" | jq '.end.sum_received.bits_per_second // 0')
echo " [DEBUG] download_bps extrait de iperf3='$download_bps'" >&2
download_mbps=$(safe_bc "scale=2; $download_bps / 1000000")
echo " [DEBUG] download_mbps après conversion='$download_mbps'" >&2
# Extraction ping
local ping_output=$(ping -c 5 "$target" 2>/dev/null | grep 'avg' || echo "")
echo " [DEBUG] ping_output='$ping_output'" >&2
if [[ -n "$ping_output" ]]; then
ping_ms=$(echo "$ping_output" | awk -F'/' '{print $5}')
echo " [DEBUG] ping_ms extrait='$ping_ms'" >&2
fi
# Calcul score
local net_score=$(safe_bc "scale=2; ($upload_mbps + $download_mbps) / 20")
# Validation avant jq
[[ -z "$ping_ms" || "$ping_ms" == "null" ]] && ping_ms="0"
# DEBUG: Afficher les valeurs avant jq
echo " [DEBUG] upload_mbps='$upload_mbps' download_mbps='$download_mbps' ping_ms='$ping_ms' net_score='$net_score'" >&2
# Appel jq avec capture d'erreur
net_bench=$(jq -n \
--argjson upload "$upload_mbps" \
--argjson download "$download_mbps" \
--argjson ping "$ping_ms" \
--argjson score "$net_score" \
'{upload_mbps: $upload, download_mbps: $download, ping_ms: $ping, score: $score}' 2>&1)
local jq_exit_code=$?
if [[ $jq_exit_code -ne 0 ]]; then
log_error "Erreur jq lors de la construction du JSON réseau"
echo " [DEBUG] Sortie jq: $net_bench" >&2
echo " [DEBUG] Valeurs: upload='$upload_mbps' download='$download_mbps' ping='$ping_ms' score='$net_score'" >&2
net_bench="null"
fi
Fichiers Modifiés
| Fichier | Lignes | Type | Description |
|---|---|---|---|
scripts/bench.sh |
785-787 | Debug | Upload bps extraction et conversion |
scripts/bench.sh |
793-795 | Debug | Download bps extraction et conversion |
scripts/bench.sh |
800-803 | Debug | Ping extraction |
scripts/bench.sh |
807 | Debug | Valeurs finales avant jq |
scripts/bench.sh |
814-822 | Debug | Capture erreur jq et affichage détaillé |
🧪 Test avec Debug
Commande
sudo bash scripts/bench.sh 2>&1 | tee /tmp/bench_debug.log
Sortie Attendue
Si tout fonctionne correctement :
✓ Benchmark Réseau en cours (vers 10.0.1.97)...
[DEBUG] upload_bps extrait de iperf3='945230000'
[DEBUG] upload_mbps après conversion='945.23'
[DEBUG] download_bps extrait de iperf3='943120000'
[DEBUG] download_mbps après conversion='943.12'
[DEBUG] ping_output='rtt min/avg/max/mdev = 0.280/0.342/0.450/0.062 ms'
[DEBUG] ping_ms extrait='0.342'
[DEBUG] upload_mbps='945.23' download_mbps='943.12' ping_ms='0.342' net_score='94.41'
✓ Réseau: ↑945.23Mbps ↓943.12Mbps (ping: 0.342ms, score: 94.41)
Si erreur :
✓ Benchmark Réseau en cours (vers 10.0.1.97)...
[DEBUG] upload_bps extrait de iperf3='945230000'
[DEBUG] upload_mbps après conversion='945.23'
[DEBUG] download_bps extrait de iperf3='[VALEUR_PROBLEMATIQUE]'
[DEBUG] download_mbps après conversion='[VALEUR_PROBLEMATIQUE]'
[DEBUG] ping_output='...'
[DEBUG] ping_ms extrait='...'
[DEBUG] upload_mbps='945.23' download_mbps='[VALEUR_PROBLEMATIQUE]' ping_ms='...' net_score='...'
✗ Erreur jq lors de la construction du JSON réseau
[DEBUG] Sortie jq: jq: invalid JSON text passed to --argjson
[DEBUG] Valeurs: upload='945.23' download='[VALEUR_PROBLEMATIQUE]' ping='...' score='...'
📊 Cas à Tester
Cas 1 : iperf3 retourne null
Si iperf3 retourne un JSON sans les champs attendus :
{
"end": {}
}
Alors jq '.end.sum_sent.bits_per_second // 0' devrait retourner 0.
Vérification : upload_bps devrait être 0
Cas 2 : iperf3 retourne une chaîne
Si pour une raison quelconque, jq retourne "null" (string) au lieu de null :
upload_bps="null" # String, pas JSON null
Alors safe_bc "scale=2; null / 1000000" peut échouer ou retourner une valeur bizarre.
Vérification : upload_mbps devrait être 0 grâce à safe_bc
Cas 3 : safe_bc retourne une valeur vide
Si safe_bc échoue silencieusement et retourne "" :
upload_mbps=""
Alors --argjson upload "" causera l'erreur jq.
Vérification : Le debug montrera upload_mbps=''
Cas 4 : Ping retourne une valeur avec espace ou caractère spécial
Si le ping contient des caractères non numériques :
ping_ms="0.342 " # Espace en fin
ping_ms=" 0.342" # Espace en début
ping_ms="0,342" # Virgule au lieu de point
Alors jq rejettera la valeur.
Vérification : Le debug montrera les espaces ou caractères
🔧 Corrections Potentielles
Fix 1 : Valider toutes les valeurs numériques avant jq
# Valider upload_mbps
[[ -z "$upload_mbps" || ! "$upload_mbps" =~ ^[0-9.]+$ ]] && upload_mbps="0"
# Valider download_mbps
[[ -z "$download_mbps" || ! "$download_mbps" =~ ^[0-9.]+$ ]] && download_mbps="0"
# Valider ping_ms
[[ -z "$ping_ms" || ! "$ping_ms" =~ ^[0-9.]+$ ]] && ping_ms="0"
# Valider net_score
[[ -z "$net_score" || ! "$net_score" =~ ^[0-9.]+$ ]] && net_score="0"
Fix 2 : Améliorer safe_bc pour toujours retourner un nombre
safe_bc() {
local expr="$1"
local out
out=$(echo "$expr" | bc 2>/dev/null) || out="0"
# Si out est vide ou non numérique, forcer à 0
[[ -z "$out" || ! "$out" =~ ^-?[0-9.]+$ ]] && out="0"
echo "$out"
}
Fix 3 : Nettoyer ping_ms des espaces
# Nettoyer les espaces dans ping_ms
ping_ms=$(echo "$ping_ms" | tr -d ' \t\n\r')
✅ Prochaines Étapes
-
Exécuter le benchmark avec debug :
sudo bash scripts/bench.sh 2>&1 | tee /tmp/bench_debug.log -
Analyser la sortie debug :
- Identifier quelle valeur cause l'erreur
- Noter la valeur exacte (y compris espaces invisibles)
-
Appliquer le fix approprié :
- Si c'est une valeur vide : validation avant jq
- Si c'est une valeur non numérique : améliorer safe_bc
- Si c'est un espace/caractère : nettoyage avec
tr
-
Retester :
- Vérifier que l'erreur jq a disparu
- Vérifier que les valeurs réseau sont correctes
- Désactiver le debug une fois corrigé
📝 Notes
- Le debug est affiché sur stderr (
>&2) pour ne pas polluer stdout - Le code de sortie de jq est capturé avec
$? - Si jq échoue,
net_benchest mis à"null"pour éviter de planter le script - Tous les messages debug commencent par
[DEBUG]pour faciliter le grep
Status : ⏳ Debug ajouté, en attente de test Prochaine action : Exécuter le benchmark et analyser la sortie debug
🔗 Fichiers Liés
- HOTFIX_NETWORK_BENCH.md - Fix safe_bc précédent
- HOTFIX_BENCH_IMPROVEMENTS.md - Fixes mémoire et ping
- bench.sh - Script de benchmark client