Files
PVE-Backup-Report/docs/fr/rapport-pdf.md
T

13 KiB

Rapport PDF

English version

Objectif

Le PDF doit etre lisible par une equipe d'exploitation et exploitable comme preuve de suivi lors d'un audit.

Il doit privilegier la clarte, la date de generation, la couverture de sauvegarde et les exceptions.

Etat actuel : la generation PDF est implementee avec WeasyPrint a partir d'un template HTML/CSS. L'ancien rendu reportlab reste present dans le depot comme reference technique, mais la commande --generate-pdf utilise le rendu WeasyPrint.

La langue du rapport WeasyPrint est configurable avec REPORT_LANGUAGE=fr ou REPORT_LANGUAGE=en. La valeur par defaut reste fr.

Etat du rendu WeasyPrint :

  • Page de garde complete (break-after page) : barre de logo sur fond blanc en haut, titre principal en bleu #1f4e79 32pt centre, barre de metadonnees (Generation, Version) ancree en bas de page via un spacer flex.
  • Pied de page present sur toutes les pages y compris la page de garde : libelle de document a gauche, date de generation au centre, version a droite, separes du contenu par un filet horizontal.
  • En-tetes de pages (hors premiere page) : titre du rapport a gauche, numero de page sur le total a droite.
  • Table des matieres avec numeros de page automatiques (CSS target-counter) et hierarchie visuelle : titres de groupe en gras bleu, sous-sections indentees.
  • Icones SVG devant chaque titre de section (histogramme, serveur, cylindre, horloge, engrenage, triangle d'alerte, bouclier, archive, croix, cercle gris avec point d'interrogation pour la namespace non renseignee) pour identifier rapidement chaque partie.
  • En-tetes de sections avec bordure gauche bleue et fond gris tres clair pour distinguer les titres du contenu.
  • Section Resume affichee en grille de KPI cards (7 colonnes sur 2 lignes) plutot qu'en tableau ; les indicateurs "Non sauvegardees" et "Anomalies" apparaissent en orange si leur valeur est superieure a zero.
  • Tableaux avec en-tetes fonces, lignes alternees, et classes CSS appliquees aux cellules selon leur valeur : vert pour "Active" et "Succes", rouge/gras pour "Non-active" et "Echec", ambre pour "Indetermine", gris italique pour "non renseigne".
  • Messages d'avertissement (GC PBS en cours) et messages vides distincts visuellement des tableaux.
  • Le rapport reste lisible en impression noir et blanc : le style repose sur le gras, l'italique et la bordure gauche en plus de la couleur.

Le modele de donnees final du futur rapport est previsualisable avec :

PYTHONPATH=src python3 -m pve_backup_report --dump-report-data

Cette commande produit un JSON contenant le resume calcule, les stockages PBS, les jobs de sauvegarde, la couverture VM/CT et les anomalies.

Les champs bruts sensibles sont filtres dans cette sortie, mais --dump-report-data reste une sortie d'audit technique : elle contient des noms de VM/CT, VMID, notes PVE, serveurs, datastores, namespaces, utilisateurs PBS et metadonnees d'infrastructure. Elle doit etre traitee comme une donnee interne.

Generation PDF :

PYTHONPATH=src python3 -m pve_backup_report --generate-pdf

Le fichier est ecrit dans REPORT_OUTPUT_DIR avec un nom horodate. Un rapport existant n'est jamais ecrase.

Nom du fichier

Format recommande :

rapport-sauvegardes-pve-YYYY-MM-DD-HHMMSS.pdf

Exemple :

rapport-sauvegardes-pve-2026-05-07-020000.pdf

Le script doit refuser d'ecraser un fichier existant ou generer un nom alternatif unique.

Structure du rapport

Page de garde

Structure implementee (page entiere, break-after page) :

  1. Barre logo : logo Proxmox VE (PNG base64) sur fond blanc, separee par un filet gris en bas.
  2. Zone titre : titre {{ title }} en bleu #1f4e79 32pt centre, sur fond blanc.
  3. Spacer : div flex: 1 qui absorbe l'espace vide et pousse le cartouche en bas.
  4. Barre de metadonnees : fond gris clair avec bordure bleue en haut, deux elements centres — Generation ({{ generated_at }}) et Version ({{ version }}), separes par un filet vertical.

Table des matieres

La table des matieres est placee apres la page de garde. Elle est alimentee automatiquement depuis les titres de sections du rapport afin de faciliter la navigation dans le PDF.

Resume executif

Indicateurs minimaux :

  • nombre total de VM ;
  • nombre total de CT ;
  • nombre de VM/CT avec sauvegarde planifiee ;
  • nombre de VM/CT sans sauvegarde planifiee ;
  • nombre de VM/CT indetermines ;
  • nombre de stockages PBS ;
  • nombre d'anomalies.

Le resume calcule dans ReportSummary contient aussi :

  • nombre de jobs actifs ;
  • nombre de jobs inactifs ;
  • nombre de sauvegardes vers storage non PBS ;
  • nombre de sauvegardes vers PBS desactive ;

Stockages PBS déclarés sur PVE

Tableau attendu :

ID Username Serveur PBS Datastore Namespace Actif

Les secrets ne doivent jamais apparaitre. La colonne Actif affiche oui lorsque le stockage PBS est actif dans PVE. Si le champ PVE disable est absent, le stockage est considere actif ; disable=1 est affiche non.

Utilisateurs PBS - Audit des accès

Ce tableau est place juste apres Stockages PBS déclarés sur PVE.

Tableau attendu :

Serveur PBS Auth-id Storage PVE Datastore Namespace Actif Expiration Email Permissions Commentaire

Les donnees viennent des username des stockages PBS PVE, rapproches des utilisateurs et permissions effectives exposes par les PBS configures.

Si l'auth-id PVE est un token de type user@realm!token, la colonne Auth-id conserve la valeur complete et les metadonnees utilisateur sont rapprochees avec user@realm.

Les secrets ne doivent jamais apparaitre. Les permissions affichees sont uniquement les privileges effectifs actifs sur le datastore/namespace cible.

Espaces de stockage PBS

Tableau attendu :

Serveur PBS Datastore Espace total Espace consomme Espace libre

Les valeurs sont alimentees depuis le statut des datastores de chaque PBS configure. Les tailles sont affichees en unites lisibles (Kio, Mio, Gio, Tio).

Sauvegarde des VM/CT par namespace

Les tableaux de sauvegarde sont regroupes sous un titre de niveau 1 Sauvegarde des VM/CT.

Les VM/CT sont affichees dans plusieurs tableaux, un tableau par namespace. Le titre de chaque tableau indique la namespace concernee.

Colonnes attendues :

VMID Nom Notes Type Noeud Etat de la VM Sauvegarde Serveur PBS Storage Mode Frequence de sauvegarde Derniere sauvegarde

La colonne Notes reprend les notes renseignees sur la VM ou le CT dans PVE. Si aucune note n'est renseignee ou si elle ne peut pas etre collectee, la valeur affichee est non renseigné.

La colonne Sauvegarde affiche Active lorsqu'une sauvegarde PBS active est planifiee, sinon Non-active.

La colonne Frequence de sauvegarde reprend l'horaire des jobs de sauvegarde associes, c'est-a-dire la valeur affichee dans la colonne Horaire du tableau Jobs de sauvegarde.

La colonne Serveur PBS est deduite du storage PBS associe lorsque le storage est connu. Si PBS_HOSTNAMES contient une correspondance, le rendu est IP (nom-hote).

La namespace n'est pas affichee comme colonne dans ces tableaux, car elle est deja portee par le titre du tableau.

Les tableaux sont tries par ordre alphabetique de namespace, puis les lignes de chaque tableau sont triees par ordre alphabetique sur Frequence de sauvegarde. Le VMID ne sert plus de critere principal de tri.

La colonne Mode traduit le mode technique PVE du job :

  • snapshot devient Aucune interruption attendue ;
  • suspend devient Suspension temporaire ;
  • stop devient Arret pendant sauvegarde.

La colonne Derniere sauvegarde affiche l'etat Succes, Echec ou Indetermine, suivi de la date, de l'heure de fin et de la duree de la derniere tache vzdump connue pour la VM/CT lorsque cette duree est disponible.

Pour les jobs multi-VM/CT, cette information est deduite du log de la tache vzdump, pas seulement de la tache globale du job.

La valeur non renseigne est attendue si aucune tache vzdump terminee n'est encore disponible dans l'historique PVE accessible, par exemple pour une VM/CT ajoutee recemment a un job avant sa premiere sauvegarde effective.

Les lignes sans sauvegarde doivent etre visuellement identifiables.

Les lignes indeterminees doivent etre distinctes des lignes non sauvegardees.

Retention des sauvegardes VM/CT par PBS et namespace

Les tableaux de retention sont regroupes sous un titre de niveau 1 Retention des sauvegardes VM/CT.

Les donnees de retention sont affichees dans plusieurs tableaux, separes par serveur PBS puis par namespace. Le titre de chaque tableau indique le PBS et la namespace concernes.

Colonnes attendues :

VMID Nom VM/CT Datastore Etat PVE Nombre de versions Nombre attendu de versions Delta Plus ancienne Plus recente Taille

La colonne Datastore permet de distinguer deux sauvegardes appartenant a la meme namespace sur un meme PBS mais stockees dans des datastores differents. Les colonnes Nombre de versions, Plus ancienne, Plus recente et Taille sont alimentees depuis le PBS concerne via la liste des snapshots du datastore et de la namespace concernes. La colonne Nombre attendu de versions est calculee depuis la politique de retention active du meme serveur PBS, datastore et namespace, en additionnant les valeurs keep-last, keep-hourly, keep-daily, keep-weekly, keep-monthly et keep-yearly renseignees. La colonne Delta affiche l'ecart Nombre de versions - Nombre attendu de versions avec un signe + ou - sauf lorsque l'ecart vaut zero. Si aucune politique active correspondante n'est trouvee, les colonnes Nombre attendu de versions et Delta affichent non renseigne. La colonne Taille correspond a la taille de la sauvegarde la plus recente visible sur le PBS concerne. La colonne Etat PVE indique si la VM/CT existe encore dans l'inventaire PVE (Active sur PVE) ou si elle n'y est plus presente (Non-active sur PVE).

Chaque serveur PBS peut disposer de plusieurs tableaux :

  • Retention des sauvegardes VM/CT <serveur PBS> - <namespace>.

La namespace n'est pas affichee comme colonne dans ces tableaux, car elle est deja portee par le titre du tableau.

Si le garbage collector du PBS/datastore concerne est en cours au moment de la generation du rapport, un avertissement est affiche juste sous le titre du tableau concerne. Cet avertissement precise que le nombre de versions des sauvegardes des VM/CT peut apparaitre superieur au nombre de versions declarees.

Chaque tableau ne liste que les VM/CT pour lesquelles au moins un snapshot correspondant est visible sur le PBS concerne. Les VM/CT encore visibles sur PBS mais absentes de l'inventaire PVE restent affichees dans le tableau et sont marquees Non-active sur PVE. Les snapshots dont le namespace n'existe pas dans les namespaces declares sur PVE sont exclus de ces tableaux.

Les tableaux de retention sont classes par namespace, puis par nom de VM/CT et VMID lorsque l'information est disponible.

Politique de retention

Le tableau Politique de retention est alimente depuis les PBS configures lorsque leurs variables *_API_URL, *_API_TOKEN_ID et *_API_TOKEN_SECRET sont renseignees.

La collecte lit les prune jobs PBS via /config/prune et affiche :

  • serveur PBS ;
  • datastore ;
  • namespace ;
  • planification ;
  • etat actif/inactif ;
  • colonnes Derniere, Horaire, Jour, Semaine, Mois, Annee ;
  • profondeur max-depth.

Une namespace absente dans PBS est affichee comme /, c'est-a-dire la namespace racine.

VM/CT sans sauvegarde

Cette section doit reprendre uniquement les charges non couvertes.

Elle doit etre courte et directement exploitable.

Anomalies

Cette section liste les problemes de collecte ou d'interpretation.

Elle peut etre vide, mais doit alors indiquer qu'aucune anomalie n'a ete detectee.

Lisibilite

Le rapport doit rester lisible en impression noir et blanc.

Ne pas dependre uniquement de la couleur pour signaler un risque.

Utiliser des libelles explicites :

  • Sauvegarde planifiee ;
  • Non sauvegardee ;
  • Indetermine.

Horodatage

Toutes les dates affichees doivent utiliser le fuseau configure.

Le fuseau horaire doit apparaitre dans le rapport.

Conservation

Le rapport quotidien doit etre conserve dans un repertoire persistant.

La politique de retention des rapports generes est distincte des politiques de retention PBS et doit etre documentee dans l'exploitation si elle est ajoutee.