300 lines
7.0 KiB
Markdown
300 lines
7.0 KiB
Markdown
# Guide de Troubleshooting - Disques et Partitions
|
|
|
|
## Problèmes courants et solutions
|
|
|
|
### 1. L'endpoint retourne une liste vide
|
|
|
|
**Symptôme**: L'API retourne `{"devices": [], "total_size": "0 B", ...}`
|
|
|
|
**Causes possibles**:
|
|
- La commande `lsblk` n'est pas disponible sur le système
|
|
- `lsblk` n'est pas dans le PATH
|
|
- Le timeout de 10s a été dépassé
|
|
|
|
**Solutions**:
|
|
```bash
|
|
# Vérifier que lsblk est installé
|
|
which lsblk
|
|
lsblk --json
|
|
|
|
# Si absent, installer selon votre distribution:
|
|
# Ubuntu/Debian:
|
|
sudo apt-get install util-linux
|
|
|
|
# Red Hat/CentOS/Fedora:
|
|
sudo yum install util-linux
|
|
|
|
# Alpine:
|
|
apk add util-linux
|
|
```
|
|
|
|
### 2. L'interface affiche "Impossible de charger les disques"
|
|
|
|
**Symptôme**: Message d'erreur dans la vue frontend
|
|
|
|
**Causes possibles**:
|
|
- Le backend n'est pas accessible
|
|
- L'authentification a expiré
|
|
- Problème CORS
|
|
- L'endpoint n'existe pas
|
|
|
|
**Solutions**:
|
|
```bash
|
|
# Vérifier que le backend fonctionne
|
|
curl http://localhost:8000/api/system/stats -H "Authorization: Bearer YOUR_TOKEN"
|
|
|
|
# Vérifier que l'endpoint est enregistré
|
|
# Aller sur http://localhost:8000/docs (Swagger UI)
|
|
# L'endpoint /system/disks doit apparaître
|
|
|
|
# Vérifier les logs du backend
|
|
# Chercher les erreurs dans la sortie de FastAPI
|
|
```
|
|
|
|
### 3. Les informations d'utilisation sont incorrectes
|
|
|
|
**Symptôme**: Le pourcentage d'utilisation ne correspond pas à `df`
|
|
|
|
**Causes possibles**:
|
|
- Les points de montage ne sont pas accessibles
|
|
- Permission refusée lors de `psutil.disk_usage()`
|
|
- Caches système affectant les calculs
|
|
|
|
**Solutions**:
|
|
```bash
|
|
# Comparer avec la commande du système
|
|
df -h
|
|
|
|
# Vérifier les permissions des points de montage
|
|
ls -la /mnt
|
|
mount | grep -E 'rw|ro'
|
|
|
|
# Les statistiques psutil incluent l'espace "utilisé" différemment
|
|
# de "df" du fait des réserves du système de fichiers
|
|
```
|
|
|
|
### 4. Les partitions n'apparaissent pas
|
|
|
|
**Symptôme**: Le disque s'affiche mais sans ses partitions
|
|
|
|
**Causes possibles**:
|
|
- Les partitions ne sont pas montées
|
|
- Le disque n'a pas de partition (ex: raw device)
|
|
- Pas de point de montage accessible
|
|
|
|
**Solutions**:
|
|
```bash
|
|
# Vérifier la structure
|
|
lsblk --json
|
|
|
|
# Monter les partitions si nécessaire
|
|
sudo mount /dev/sda1 /mnt/partition1
|
|
|
|
# L'interface affichera les partitions même sans mountpoint,
|
|
# mais sans taux d'utilisation
|
|
```
|
|
|
|
### 5. Erreur 401 Unauthorized
|
|
|
|
**Symptôme**: La requête est rejetée avec 401
|
|
|
|
**Cause**: Token d'authentification invalide ou expiré
|
|
|
|
**Solutions**:
|
|
```bash
|
|
# Vous reconnecter dans l'interface
|
|
# Ou obtenir un nouveau token:
|
|
curl -X POST http://localhost:8000/api/auth/login \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"username": "admin", "password": "admin"}'
|
|
|
|
# Vérifier la validité du token dans les headers:
|
|
# Authorization: Bearer <token>
|
|
```
|
|
|
|
### 6. Timeout (erreur 504)
|
|
|
|
**Symptôme**: Request timeout en récupérant les disques
|
|
|
|
**Cause**: `lsblk` prend plus de 10 secondes
|
|
|
|
**Solutions**:
|
|
```bash
|
|
# Augmenter le timeout dans system.py:
|
|
# timeout=10 → timeout=30
|
|
|
|
# Identifier ce qui ralentit lsblk:
|
|
time lsblk --json
|
|
|
|
# Sur les gros systèmes ou systèmes de fichiers réseau lents,
|
|
# augmenter le timeout dans system.py peut être nécessaire
|
|
```
|
|
|
|
### 7. Les styles CSS ne s'appliquent pas correctement
|
|
|
|
**Symptôme**: Les barres de progression n'ont pas de couleur ou de dégradé
|
|
|
|
**Causes possibles**:
|
|
- Tailwind CSS n'est pas compilé
|
|
- Les classes Tailwind ne sont pas générées
|
|
- Conflit CSS
|
|
|
|
**Solutions**:
|
|
```bash
|
|
cd frontend
|
|
|
|
# Régénérer les styles Tailwind
|
|
npm run build
|
|
|
|
# Ou en mode développement:
|
|
npm run dev
|
|
|
|
# Vérifier dans DevTools que les classes sont appliquées
|
|
# Onglet Elements > Inspect > Vérifier les classes
|
|
```
|
|
|
|
## Logique de débogage
|
|
|
|
### Tester l'endpoint directement
|
|
|
|
```bash
|
|
# 1. Se connecter
|
|
TOKEN=$(curl -s -X POST http://localhost:8000/api/auth/login \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"username": "admin", "password": "admin"}' | jq -r '.access_token')
|
|
|
|
# 2. Appeler l'endpoint
|
|
curl -s -X GET http://localhost:8000/api/system/disks \
|
|
-H "Authorization: Bearer $TOKEN" | jq '.'
|
|
|
|
# 3. Vérifier les résultats
|
|
```
|
|
|
|
### Vérifier la commande lsblk
|
|
|
|
```bash
|
|
# Exécuter la même commande que le backend
|
|
lsblk --json --bytes --output NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS | jq '.'
|
|
|
|
# Vérifier le format JSON
|
|
lsblk --json --bytes --output NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS | python3 -m json.tool
|
|
```
|
|
|
|
### Vérifier psutil
|
|
|
|
```bash
|
|
python3 << 'EOF'
|
|
import psutil
|
|
|
|
# Lister les partitions montées
|
|
for part in psutil.disk_partitions():
|
|
print(f"Device: {part.device}, Mountpoint: {part.mountpoint}")
|
|
usage = psutil.disk_usage(part.mountpoint)
|
|
print(f" Total: {usage.total}, Used: {usage.used}, Free: {usage.free}")
|
|
EOF
|
|
```
|
|
|
|
## Configurations avancées
|
|
|
|
### Augmenter le timeout
|
|
|
|
Fichier: `backend/app/services/system.py`, ligne ~212
|
|
|
|
```python
|
|
# Avant:
|
|
result = subprocess.run([...], timeout=10)
|
|
|
|
# Après:
|
|
result = subprocess.run([...], timeout=30)
|
|
```
|
|
|
|
### Filtrer les disques/partitions
|
|
|
|
Pour exclure certains disques (exemple: loop devices):
|
|
|
|
```python
|
|
# Dans get_block_devices(), ajouter après la boucle:
|
|
if block_device['type'] == 'loop':
|
|
continue # Ignorer les disques loop
|
|
|
|
if block_device.get('size', 0) < 1024*1024*100: # < 100MB
|
|
continue # Ignorer les petits disques
|
|
```
|
|
|
|
### Changer la fréquence de rafraîchissement
|
|
|
|
Fichier: `frontend/src/views/DisksView.vue`, ligne ~162
|
|
|
|
```javascript
|
|
// Avant:
|
|
this.refreshInterval = setInterval(() => {
|
|
this.fetchDisks()
|
|
}, 30000) // 30 secondes
|
|
|
|
// Après:
|
|
this.refreshInterval = setInterval(() => {
|
|
this.fetchDisks()
|
|
}, 60000) // 60 secondes
|
|
```
|
|
|
|
## Logs et débogage
|
|
|
|
### Activer les logs dans le backend
|
|
|
|
```python
|
|
import logging
|
|
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# Dans get_block_devices():
|
|
logger.debug(f"lsblk output: {result.stdout}")
|
|
logger.debug(f"Devices found: {len(devices)}")
|
|
```
|
|
|
|
### Vérifier les erreurs dans le navigateur
|
|
|
|
1. Ouvrir la console (F12)
|
|
2. Onglet "Network" > Filtrer par "Fetch"
|
|
3. Cliquer sur la requête `/api/system/disks`
|
|
4. Regarder la "Response" pour l'erreur complète
|
|
|
|
### Vérifier les logs du backend
|
|
|
|
```bash
|
|
# Si FastAPI s'exécute en ligne de commande, les logs s'affichent
|
|
# Chercher les messages d'erreur
|
|
|
|
# Ou rediriger vers un fichier:
|
|
python main.py 2>&1 | tee backend.log
|
|
```
|
|
|
|
## Performance
|
|
|
|
### Optimisations possibles
|
|
|
|
1. **Caching**: Mettre en cache les résultats pendant 5s pour éviter les appels répétés
|
|
2. **Pagination**: Si beaucoup de disques, paginer la réponse
|
|
3. **Workers**: Utiliser plusieurs workers Gunicorn pour le backend
|
|
4. **Lazy loading**: Charger les partitions à la demande au frontend
|
|
|
|
### Benchmark
|
|
|
|
Sur un système typique:
|
|
- Exécution de `lsblk --json`: ~50ms
|
|
- Récupération d'utilisation (psutil): ~100ms
|
|
- Total endpoint: ~150-200ms
|
|
|
|
Si vous observez des temps plus longs, vérifier:
|
|
- Les disques réseau montés
|
|
- Les systèmes de fichiers lents
|
|
- Le nombre de partitions
|
|
|
|
## Ressources supplémentaires
|
|
|
|
- `lsblk` man page: `man lsblk`
|
|
- Documentation psutil: https://psutil.readthedocs.io/
|
|
- Tailwind CSS: https://tailwindcss.com/
|
|
- Vue 3: https://vuejs.org/
|
|
- FastAPI: https://fastapi.tiangolo.com/
|