Files
serv_benchmark/docs/SESSION_2025-12-18.md
Gilles Soulier c67befc549 addon
2026-01-05 16:08:01 +01:00

238 lines
7.0 KiB
Markdown
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=1` par défaut
- `read -p` qui 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`
```python
@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** :
```json
{
"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 :
```javascript
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 :
```javascript
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 :
```javascript
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 :
```yaml
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)
```bash
# 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)
```bash
# 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 :
```bash
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
```bash
curl http://10.0.0.50:8007/api/config
# ✅ Retourne le token et iperf_server
```
### Test 2 : Dashboard Frontend
1. Ouvrir http://10.0.0.50:8087
2. Section "⚡ Quick Bench Script"
3. ✅ La commande complète s'affiche avec le vrai token
4. ✅ Le bouton "Copier" fonctionne
### Test 3 : Page Settings
1. Ouvrir http://10.0.0.50:8087/settings.html
2. Section "📋 Commande Générée"
3. ✅ La commande s'affiche avec le vrai token
4. ✅ Le token est visible dans la section "🔑 Informations API"
### Test 4 : Exécution du script via curl
```bash
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)
1. Tri avancé sur les colonnes du dashboard
2. Filtres par tags/type de machine
3. Icônes pour types de machines et OS
4. Pagination améliorée
### Phase 3 - Graphiques d'historique
1. Intégration Chart.js
2. Graphiques d'évolution des scores
3. Comparaison de benchmarks
### Phase 4 - Détection de régressions
1. Calcul de baseline par device
2. Alertes sur régression de performance
3. 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**