Files
innotexBoard/DISKS_FEATURE.md
2026-01-16 18:40:39 +01:00

141 lines
4.7 KiB
Markdown

# Fonctionnalité: Gestion des Disques et Partitions
## Vue d'ensemble
Une nouvelle fonctionnalité de monitoring des disques et partitions a été ajoutée au projet. Elle utilise la commande `lsblk --json` pour récupérer les informations sur les disques et affiche visuellement le taux de remplissage avec des barres de progression en couleur.
## Modifications apportées
### Backend (FastAPI)
#### 1. **Service système** - `backend/app/services/system.py`
Ajouts:
- Imports: `json`, `subprocess`, `Optional`, `Dict`, `Any`
- Classe `BlockDevicePartition`: Représente une partition avec ses informations
- Classe `BlockDevice`: Représente un disque avec ses partitions
- Classe `BlockDevicesInfo`: Contient la liste complète des disques et les stats globales
- Méthode `format_bytes()`: Convertit les bytes en format lisible (B, KB, MB, GB, TB, PB)
- Méthode `get_block_devices()`:
- Exécute `lsblk --json --bytes`
- Parse la sortie JSON
- Récupère les informations d'utilisation via `psutil.disk_usage()`
- Retourne une structure complète avec disques, partitions et statistiques
#### 2. **Endpoint API** - `backend/app/api/endpoints/system.py`
Ajouts:
- Import de `BlockDevicesInfo`
- Route GET `/system/disks` (avec authentification)
- Retourne les informations complètes des disques et partitions
- Utilise le service `SystemService.get_block_devices()`
### Frontend (Vue.js)
#### 1. **Nouvelle vue** - `frontend/src/views/DisksView.vue`
Fonctionnalités:
- **Section des statistiques globales**:
- Taille totale de tous les disques
- Espace total utilisé
- Espace total disponible
- **Affichage par disque**:
- Nom du disque (/dev/xxx)
- Type (disk, loop, etc.)
- Taille totale
- Point de montage (si applicable)
- Barre de progression avec dégradé de couleur:
- Vert (< 50%)
- Jaune (50-75%)
- Orange (75-90%)
- Rouge (≥ 90%)
- **Affichage des partitions**:
- Liste des partitions pour chaque disque
- Point de montage de chaque partition
- Barres de progression individuelles
- Espace utilisé et disponible pour chaque partition
- **Auto-rafraîchissement**: Les données se rafraîchissent automatiquement toutes les 30 secondes
#### 2. **Mise à jour du routeur** - `frontend/src/router/index.js`
- Import de `DisksView`
- Ajout de la route `/disks` (avec authentification requise)
#### 3. **Mise à jour de la navigation** - `frontend/src/App.vue`
- Ajout d'un lien dans la sidebar vers la nouvelle page "Disques et Partitions"
- Icône: 💾
- Surlignage actif de la page courante
## Structure des données retournées
```json
{
"devices": [
{
"name": "sda",
"type": "disk",
"size": "477.53 GB",
"used": "250.15 GB",
"available": "227.38 GB",
"percent_used": 52.4,
"mountpoint": null,
"partitions": [
{
"name": "sda1",
"type": "part",
"size": "477.53 GB",
"used": "250.15 GB",
"available": "227.38 GB",
"percent_used": 52.4,
"mountpoint": "/"
}
]
}
],
"total_size": "477.53 GB",
"total_used": "250.15 GB",
"total_available": "227.38 GB"
}
```
## Utilisation
1. **Accès à la page**: Connectez-vous et cliquez sur "💾 Disques et Partitions" dans le menu latéral
2. **Interprétation des barres**:
- La couleur indique le taux d'utilisation
- La longueur de la barre représente le pourcentage d'utilisation
3. **Auto-rafraîchissement**: Les données sont automatiquement mises à jour toutes les 30 secondes
## Dépendances
### Backend
- `psutil`: Récupération des statistiques d'utilisation
- `subprocess`: Exécution de la commande `lsblk`
- `json`: Parsing de la sortie JSON
### Frontend
- Vue Router: Navigation
- Pinia (auth store): Gestion de l'authentification
## Considérations de sécurité
- La route `/system/disks` requiert une authentification
- La commande `lsblk` est exécutée avec un timeout de 10 secondes
- Gestion des erreurs: Si `lsblk` échoue, une liste vide est retournée
- Les permissions de disque sont respectées via `psutil`
## Gestion des erreurs
- Si `lsblk` n'est pas disponible: retour d'une liste vide
- Si le parsing JSON échoue: retour d'une liste vide
- Si `psutil.disk_usage()` échoue: les stats restent à 0
- Les partitions inaccessibles sont ignorées avec un message du système
## Améliorations futures possibles
- Graphiques d'historique de l'utilisation
- Alertes si l'utilisation dépasse un certain seuil
- Détails supplémentaires (filesystem type, UUID, etc.)
- Gestion des snapshots LVM
- Support pour les systèmes sans `lsblk` (fallback sur `fdisk` ou `parted`)
- Export des données en CSV/JSON
- Tri et filtrage des disques/partitions