Initial commit
This commit is contained in:
140
DISKS_FEATURE.md
Normal file
140
DISKS_FEATURE.md
Normal file
@@ -0,0 +1,140 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user