238 lines
7.0 KiB
Markdown
Executable File
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**
|