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

4.7 KiB

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

{
  "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