This commit is contained in:
Gilles Soulier
2026-01-05 16:08:01 +01:00
parent dcba044cd6
commit c67befc549
2215 changed files with 26743 additions and 329 deletions

320
docs/DEPLOYMENT_GUIDE.md Executable file
View File

@@ -0,0 +1,320 @@
# Guide de Déploiement - Linux BenchTools
## Modifications Apportées
### 1. Backend API
-**Schémas Pydantic mis à jour** ([backend/app/schemas/hardware.py](backend/app/schemas/hardware.py))
- `RAMInfo` : Ajout de `used_mb`, `free_mb`, `shared_mb`
- `StorageDevice` : `capacity_gb` changé de `int` à `float`
-**API endpoint mis à jour** ([backend/app/api/benchmark.py](backend/app/api/benchmark.py))
- Sauvegarde des nouveaux champs RAM
-**Modèles de base de données** ([backend/app/models/](backend/app/models/))
- `HardwareSnapshot` : Nouveaux champs RAM
- `DiskSMART` : Nouveau modèle pour données SMART (créé mais pas encore utilisé)
### 2. Docker
-**Service iperf3 ajouté** ([docker-compose.yml](docker-compose.yml))
- Port 5201 TCP/UDP exposé
### 3. Script Client
-**Script bench.sh complètement réécrit** ([scripts/bench.sh](scripts/bench.sh))
- Génère le payload JSON directement
- Collecte toutes les données hardware
- Exécute les benchmarks
- Envoie au serveur API
## Déploiement
### Étape 1: Arrêter les Services
```bash
cd /home/gilles/Documents/vscode/serv_benchmark
docker-compose down
```
### Étape 2: Appliquer les Migrations Base de Données
Si la base de données existe déjà, appliquez les scripts dans l'ordre :
```bash
cd backend
python3 apply_migration.py
python3 apply_migration_002.py
python3 apply_migration_003.py
python3 apply_migration_004.py
python3 apply_migration_005.py
```
**OU** si vous préférez partir de zéro (⚠️ PERTE DE DONNÉES) :
```bash
rm -f backend/data/data.db
```
### Étape 3: Démarrer les Services
```bash
docker-compose up -d
```
Vérifier les logs :
```bash
docker-compose logs -f backend
docker-compose logs iperf3
```
### Étape 4: Tester le Serveur iperf3
Depuis un client :
```bash
iperf3 -c 10.0.0.50 -p 5201
```
Vous devriez voir le test de bande passante s'exécuter.
### Étape 5: Exécuter le Script Bench
Depuis un client Linux :
```bash
# Option 1: Télécharger et exécuter
curl -sSL https://gitea.maison43.duckdns.org/gilles/serv_benchmark/raw/branch/main/scripts/bench.sh | sudo bash
# Option 2: Exécuter localement
cd /chemin/vers/serv_benchmark
sudo bash scripts/bench.sh
```
**Note** : Le script `bench.sh` a les paramètres serveur codés en dur :
- `SERVER_URL="10.0.0.50:8007"`
- `API_TOKEN="29855796dacf5cfe75ff9b02d6adf3dd0f9c52db5b53e7abfb4c0df7ece1be0a"`
- `IPERF_SERVER="10.0.0.50"`
Pour les modifier, éditez le fichier ou passez-les en variables d'environnement.
## Vérification
### 1. Vérifier la Base de Données
```bash
sqlite3 backend/data/data.db
# Lister les tables
.tables
# Vérifier les colonnes de hardware_snapshots
PRAGMA table_info(hardware_snapshots);
# Voir les derniers benchmarks
SELECT id, device_id, global_score, run_at FROM benchmarks ORDER BY run_at DESC LIMIT 5;
# Voir les données RAM détaillées
SELECT
d.hostname,
h.ram_total_mb,
h.ram_used_mb,
h.ram_free_mb,
h.ram_shared_mb
FROM hardware_snapshots h
JOIN devices d ON h.device_id = d.id
ORDER BY h.captured_at DESC
LIMIT 5;
```
### 2. Vérifier l'API
```bash
# Tester l'endpoint
curl http://10.0.0.50:8007/docs
# Voir les devices
curl http://10.0.0.50:8007/api/devices
```
### 3. Consulter le Frontend
Ouvrir dans un navigateur :
```
http://10.0.0.50:8087
```
## Troubleshooting
### Erreur: HTTP 422 "Input should be a valid integer"
**Solution** : Cette erreur a été corrigée en changeant `capacity_gb` de `int` à `float` dans le schéma.
Si vous rencontrez encore cette erreur :
1. Vérifiez que le backend a bien été redémarré après les modifications
2. Vérifiez les logs : `docker-compose logs backend`
### Port 5201 déjà utilisé
```bash
# Trouver le processus
sudo lsof -i :5201
# Arrêter le service Docker iperf3
docker-compose stop iperf3
```
### Script bench.sh ne trouve pas les dépendances
```bash
# Installer manuellement
sudo apt-get update
sudo apt-get install -y curl jq sysbench fio iperf3 dmidecode smartmontools ethtool
```
### Base de données verrouillée (SQLite locked)
```bash
# Arrêter tous les services
docker-compose down
# Supprimer les locks
rm -f backend/data/data.db-shm backend/data/data.db-wal
# Redémarrer
docker-compose up -d
```
## Structure des Données Envoyées
Le script `bench.sh` envoie un payload JSON avec cette structure :
```json
{
"device_identifier": "hostname",
"bench_script_version": "1.1.0",
"hardware": {
"cpu": {
"vendor": "GenuineIntel",
"model": "Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz",
"cores": 4,
"threads": 4,
...
},
"ram": {
"total_mb": 7771,
"used_mb": 6123, // NOUVEAU
"free_mb": 923, // NOUVEAU
"shared_mb": 760, // NOUVEAU
"slots_total": 4,
"slots_used": 4,
"ecc": false,
"layout": [...]
},
"storage": {
"devices": [
{
"name": "/dev/sda",
"type": "SSD",
"capacity_gb": 447.1, // FLOAT maintenant
...
}
],
"partitions": []
},
"network": {
"interfaces": [...]
},
"motherboard": {...},
"os": {...}
},
"results": {
"cpu": {
"events_per_sec": 1206.65,
"duration_s": 10.0,
"score": 12.06
},
"memory": {...},
"disk": {...},
"network": {...},
"gpu": null,
"global_score": 10.85
}
}
```
## Prochaines Étapes
### À Implémenter
1. **Données SMART des disques**
- Le modèle `DiskSMART` existe mais n'est pas encore utilisé
- Modifier `bench.sh` pour collecter les données SMART
- Adapter l'API pour sauvegarder dans `disk_smart_data`
2. **Wake-on-LAN**
- Ajouter le champ dans le schéma `NetworkInterface`
- Collecter dans `bench.sh`
- Afficher dans le frontend
3. **Frontend**
- Afficher les nouvelles données RAM
- Graphiques d'utilisation
- Dashboard SMART pour la santé des disques
4. **Amélioration du script bench.sh**
- Supporter les arguments en ligne de commande
- Mode verbose/debug
- Retry automatique en cas d'échec
## Logs Utiles
### Backend
```bash
docker-compose logs -f backend
```
### iperf3
```bash
docker-compose logs -f iperf3
```
### Tous les services
```bash
docker-compose logs -f
```
## Performance
Le script `bench.sh` prend environ **3-5 minutes** pour :
- Collecter toutes les données hardware (30s)
- Benchmark CPU (10s)
- Benchmark RAM (10s)
- Benchmark Disk (2-3 minutes avec fio)
- Benchmark Network (optionnel, 20s)
## Sécurité
⚠️ **Le token API est codé en dur dans le script** :
```bash
API_TOKEN="29855796dacf5cfe75ff9b02d6adf3dd0f9c52db5b53e7abfb4c0df7ece1be0a"
```
**Recommandations** :
- Changer ce token en production
- Utiliser des variables d'environnement
- Limiter l'accès au serveur API par IP
- Utiliser HTTPS en production
## Support
Pour toute question ou problème :
1. Consulter les logs Docker
2. Vérifier le fichier [IMPLEMENTATION_STATUS.md](IMPLEMENTATION_STATUS.md)
3. Tester manuellement avec `curl` :
```bash
# Test manuel de l'API
curl -X POST http://10.0.0.50:8007/api/benchmark \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d @result.json
```