7.0 KiB
Executable File
Session de Développement - 2025-12-18
Contexte
Reprise du développement du projet Linux BenchTools après la session du 2025-12-14 qui avait corrigé 8 bugs majeurs.
L'utilisateur a signalé que la commande bash curl n'apparaissait pas dans le dashboard frontend.
Problèmes Identifiés
1. ❌ Commande curl manquante dans le dashboard
Symptôme : La section "Quick Bench Script" affichait "Chargement..." au lieu de la vraie commande.
Cause : Le token API était hardcodé à YOUR_TOKEN dans le code JavaScript au lieu d'être récupéré dynamiquement depuis le backend.
2. ❌ Script bench.sh bloqué en mode non-interactif
Symptôme : Lors de l'exécution via curl | bash, le script s'arrêtait après l'affichage du payload JSON et n'envoyait rien au serveur.
Cause :
DEBUG_PAYLOAD=1par défautread -pqui attendait un input sans vérifier si stdin était un terminal interactif
Solutions Implémentées
Fix #1 : Endpoint API pour configuration frontend
Backend - Nouvel endpoint /api/config
Fichier : backend/app/main.py
@app.get(f"{settings.API_PREFIX}/config")
async def get_config():
"""Get frontend configuration (API token, server URLs, etc.)"""
return {
"api_token": settings.API_TOKEN,
"iperf_server": "10.0.0.50"
}
URL : http://10.0.0.50:8007/api/config
Réponse :
{
"api_token": "29855796dacf5cfe75ff9b02d6adf3dd0f9c52db5b53e7abfb4c0df7ece1be0a",
"iperf_server": "10.0.0.50"
}
Frontend - Chargement dynamique du token
Fichier : frontend/js/dashboard.js
Ajout de variables globales et fonction de chargement :
let apiToken = null;
let iperfServer = null;
async function loadBackendConfig() {
const response = await fetch(`${window.BenchConfig.backendApiUrl}/config`);
if (response.ok) {
const config = await response.json();
apiToken = config.api_token;
iperfServer = config.iperf_server || '10.0.0.50';
updateBenchCommandDisplay();
}
}
Modification de la génération de commande :
function buildBenchCommand() {
const token = apiToken || 'LOADING...';
const backendUrl = backendBase.replace(/\/api$/, '');
return `curl -fsSL ${frontendBase}${scriptPath} | sudo bash -s -- --server ${backendUrl} --token "${token}" --iperf-server ${iperf}`;
}
Initialisation au chargement de la page :
document.addEventListener('DOMContentLoaded', async () => {
await loadBackendConfig(); // Charge le token en premier
loadDashboard();
// ...
});
Fichier : frontend/js/settings.js - Modifications similaires
Docker - Volume de développement
Fichier : docker-compose.yml
Ajout du volume pour faciliter les modifications sans rebuild :
backend:
volumes:
- ./backend/data:/app/data
- ./uploads:/app/uploads
- ./backend/app:/app/app # ← Nouveau
Fix #2 : Mode non-interactif pour bench.sh
Fichier : scripts/bench.sh
Changement 1 : DEBUG_PAYLOAD désactivé par défaut (ligne 37)
# Avant
DEBUG_PAYLOAD="${DEBUG_PAYLOAD:-1}" # Par défaut: 1 (activé)
# Après
DEBUG_PAYLOAD="${DEBUG_PAYLOAD:-0}" # Par défaut: 0 (désactivé)
Changement 2 : Détection du mode interactif (lignes 1493-1499)
# Demander confirmation seulement si on a un terminal interactif
if [[ -t 0 ]]; then
read -p "Appuyez sur Entrée pour continuer l'envoi ou Ctrl+C pour annuler..."
else
log_warn "Mode non-interactif détecté - envoi automatique dans 2 secondes..."
sleep 2
fi
Commande Finale Générée
La commande affichée dans le dashboard est maintenant :
curl -fsSL http://10.0.0.50:8087/scripts/bench.sh | sudo bash -s -- \
--server http://10.0.0.50:8007 \
--token "29855796dacf5cfe75ff9b02d6adf3dd0f9c52db5b53e7abfb4c0df7ece1be0a" \
--iperf-server 10.0.0.50
Fichiers Modifiés
| Fichier | Lignes | Changement |
|---|---|---|
backend/app/main.py |
97-104 | ✅ Ajout endpoint /api/config |
frontend/js/dashboard.js |
9-25, 229-235, 305-320 | ✅ Chargement dynamique token |
frontend/js/settings.js |
6-29, 149-167 | ✅ Chargement dynamique token |
docker-compose.yml |
12 | ✅ Volume backend app |
scripts/bench.sh |
37, 1493-1499 | ✅ DEBUG_PAYLOAD=0 + détection TTY |
Documentation Créée
- ✅
COMMAND_CURL_FIX.md- Fix de la commande curl manquante - ✅
FIX_DEBUG_PAYLOAD.md- Fix du blocage en mode non-interactif - ✅
SESSION_2025-12-18.md- Ce document (résumé de session)
Tests de Validation
Test 1 : API Config
curl http://10.0.0.50:8007/api/config
# ✅ Retourne le token et iperf_server
Test 2 : Dashboard Frontend
- Ouvrir http://10.0.0.50:8087
- Section "⚡ Quick Bench Script"
- ✅ La commande complète s'affiche avec le vrai token
- ✅ Le bouton "Copier" fonctionne
Test 3 : Page Settings
- Ouvrir http://10.0.0.50:8087/settings.html
- Section "📋 Commande Générée"
- ✅ La commande s'affiche avec le vrai token
- ✅ Le token est visible dans la section "🔑 Informations API"
Test 4 : Exécution du script via curl
curl -fsSL http://10.0.0.50:8087/scripts/bench.sh | sudo bash -s -- \
--server http://10.0.0.50:8007 \
--token "29855796dacf5cfe75ff9b02d6adf3dd0f9c52db5b53e7abfb4c0df7ece1be0a" \
--iperf-server 10.0.0.50
✅ Le script s'exécute de bout en bout sans blocage ✅ Le payload est envoyé au serveur ✅ Le benchmark apparaît dans le dashboard
Statut Final
| Composant | Statut | Remarques |
|---|---|---|
| Backend API | ✅ Fonctionnel | Endpoint /api/config opérationnel |
| Frontend Dashboard | ✅ Fonctionnel | Commande curl complète affichée |
| Frontend Settings | ✅ Fonctionnel | Token et commande affichés |
| Script bench.sh | ✅ Fonctionnel | Mode non-interactif OK |
| Docker Compose | ✅ Fonctionnel | Volumes de dev ajoutés |
Prochaines Étapes Recommandées
Phase 2 - Améliorations UX (Roadmap)
- Tri avancé sur les colonnes du dashboard
- Filtres par tags/type de machine
- Icônes pour types de machines et OS
- Pagination améliorée
Phase 3 - Graphiques d'historique
- Intégration Chart.js
- Graphiques d'évolution des scores
- Comparaison de benchmarks
Phase 4 - Détection de régressions
- Calcul de baseline par device
- Alertes sur régression de performance
- Webhooks pour notifications
Résumé Technique
Problème Initial : Impossible d'utiliser la commande curl du dashboard car le token n'était pas affiché.
Solution :
- Backend : Nouvel endpoint REST pour exposer la config
- Frontend : Chargement asynchrone du token au démarrage
- Script : Détection du mode non-interactif pour éviter les blocages
Impact :
- ✅ Workflow complet fonctionnel de bout en bout
- ✅ Aucune modification manuelle requise
- ✅ Expérience utilisateur améliorée
Session du : 2025-12-18 Durée : ~2 heures Bugs corrigés : 2 Fichiers modifiés : 5 Documentation : 3 fichiers Lignes de code : ~150 Statut : ✅ SUCCÈS COMPLET