141 lines
4.7 KiB
Markdown
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
|