# 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