Commit Graph

7 Commits

Author SHA1 Message Date
46b80474c2 feat(snapshots): UI simplifiee - dropdown Intervenant unique (defaut user connecte)
Avant: 3 champs (Auteur input + 2 checkboxes 'Mes snapshots' / 'Format PatchCenter') -> trop.

Apres:
- Un seul dropdown 'Intervenant' avec liste dynamique des auteurs detectes dans les
  snapshots PatchCenter charges
- Defaut = user connecte (intervenant_default depuis JWT 'sub')
- Ajoute '(toi)' a cote de l'option qui matche le user connecte
- Si le user connecte n'a pas encore de snapshot, son option apparait quand meme en tete
  avec le tag '(toi, aucun snap)'
- Le filtre 'PatchCenter uniquement' est implicite (toujours actif) -> les snapshots
  SLPM ou manuels n'apparaissent plus du tout
- Les autres users peuvent etre selectionnes pour afficher/supprimer leurs snapshots
  (pas de restriction par compte au-dela de l'authentification)
- updateFilterSummary affiche le filtre actif clairement
2026-05-07 21:00:28 +02:00
c918edb093 feat(snapshots): nouveau format <user>_YYYY-MM-DD_HH-MM_avant_patch + filtre PatchCenter only
Probleme initial: nom snap base sur 'intervenant' (champ libre Excel modifiable) -> peu fiable
pour identifier qui a cree le snap. De plus, sans heure dans le nom, collisions si meme
serveur patche 2x dans la journee.

Solution:
- Format snap PatchCenter v2: <user_jwt>_YYYY-MM-DD_HH-MM_avant_patch
  user = login JWT (sub) immutable, traçable cote AD
  HH-MM ajoute pour eviter collisions
- Service: nouveau regex SNAP_PATCHCENTER_V2_RE (avec heure), v1 conservee pour
  les snapshots existants legacy
- Router iexec_snapshot: utilise user.get('sub') au lieu de row.intervenant
- UI:
  * Renomme checkbox 'Format gere' -> 'Snapshots PatchCenter uniquement'
  * Filtre origin === 'patchcenter' (exclut SLPM .exe par defaut)
  * Combine avec 'Mes snapshots' (author = login user) -> seulement TES snapshots
    PatchCenter visibles, parfait pour le cleanup post-patching
2026-05-07 20:58:54 +02:00
d8d803fb48 feat(snapshots): support format SLPM (.exe Sanef Patch Manager) + colonne Origine
Probleme: tes 51 snapshots etaient au format SLPM_<auteur>_YYYYMMDD_HHMM (cree par le .exe)
non reconnu par PatchCenter qui n'attendait que le format <auteur>_YYYY-MM-DD_avant_patch.

- Service: nouveau regex SNAP_SLPM_RE + helper _detect_snap_origin retourne (origin, author)
- Champs ajoutes au snapshot: origin ('patchcenter'|'slpm'|None), is_managed_format
- Template:
  * Filtre 'Format gere uniquement' (renomme depuis 'PatchCenter uniquement')
  * Colonne 'Origine' avec badge: PatchCenter (bleu) / SLPM .exe (gris) / manuel (orange)
  * Colonne ajoutee dans header + cellules + colspan ajuste a 9
2026-05-07 20:47:32 +02:00
0a3fde36b7 feat(snapshots): overlay plein page pendant action async + beforeunload guard
- Overlay 'busy-overlay' plein ecran (z-index 9999) avec spinner anime
- Bloque toute interaction (clics) pendant recherche/suppression
- setBusy active l'overlay + change le texte du bouton
- clearBusy retire l'overlay
- beforeunload: avertit l'utilisateur s'il tente de quitter la page
  pendant une requete en vol (close tab, navigation, refresh)
2026-05-07 20:40:13 +02:00
77e884d620 feat(snapshots): filtre format PatchCenter strict + UX feedback + dates fr
- Service: regex stricte '<auteur>_YYYY-MM-DD_avant_patch' (avant: laxiste avec suffixe optionnel)
- Champ is_patchcenter_format ajoute aux snapshots, et auteur seulement si format match
- Router: _get_user_intervenant_name lit JWT 'sub' (correctif - etait 'username' qui n'existe pas)
- UI:
  * Nouveau filtre 'Format PatchCenter uniquement' (checkbox, default ON)
  * Filtre 'Mes snapshots' marche meme si auteur input vide -> on garde uniquement
    ceux dont l'auteur est connu (= snapshots PatchCenter)
  * Dates: formattees jj/mm/aaaa HH:MM (fmtDateFR via Date object navigateur)
  * Cellule auteur 'inconnu' rendue avec balise <i> proprement (bypass escapeHTML)
  * Helper setBusy/clearBusy pour feedback unifie ' Recherche en cours…' / ' Suppression en cours…'
    (status + texte du bouton change pendant l'action)
2026-05-07 20:38:11 +02:00
0b98b54a63 fix(snapshots): visibilite des filtres (compteur snapshots caches + message clair quand filtres trop restrictifs)
- Si les filtres cachent des snapshots, status affiche '⚠ N snapshot(s) cache(s)'
  avec hint pour decocher 'Mes snapshots' ou mettre age=0
- Tableau vide differencie 2 cas:
  * 0 trouvé total -> 'Verifie credentials vCenter'
  * X trouvé mais tous filtrés -> 'Ajuste les filtres ci-dessus' en jaune
2026-05-07 20:28:25 +02:00
c63b3a9119 feat(snapshots): page de gestion snapshots VM (listing + filtre auteur/age + suppression)
Service snapshot_mgmt_service.py:
- list_snapshots(db, vcenter_filter_id=None): itere les vCenters actifs, walk recursif
  des snapshot tree de chaque VM, retourne (vcenter, vm, snap_name, snap_id, vm_moid,
  created_at, age_days, author, description, is_current)
- delete_snapshot(db, vcenter_id, vm_moid, snap_id, remove_children=False): supprime
  un snapshot par moRef, attend la fin de la task vCenter
- Auteur deduit du prefixe du nom (format PatchCenter '<auteur>_YYYY-MM-DD_<suffixe>')

Router /snapshots:
- GET /snapshots: page principale (filtres + table)
- POST /snapshots/list: AJAX scan vCenters, retourne JSON
- POST /snapshots/delete: AJAX suppression batch, double confirmation cote UI

Template snapshots.html:
- Filtres: vCenter, auteur, 'Mes snapshots uniquement' (preselectionne user courant),
  age min en jours (defaut 3)
- Table avec checkboxes, sel-all, badge age (vert <3j, orange 3-7j, rouge >7j)
- Bouton 'Charger/Refresh' (lazy load, eviter scan auto au pageload)
- Bouton 'Supprimer la selection' avec 2 confirmations + liste des snapshots
- Recharge auto apres suppression

Nav: lien '📸 Snapshots VM' ajoute dans le menu Patching.
2026-05-07 20:13:29 +02:00