Commit Graph

11 Commits

Author SHA1 Message Date
3c451156d5 Revert "feat(snapshots): reconnait les formats manuels SANEF + toggle UI 'Tous formats'"
This reverts commit 720b0789e6.
2026-05-18 16:15:15 +02:00
720b0789e6 feat(snapshots): reconnait les formats manuels SANEF + toggle UI 'Tous formats'
- backend: nouveau regex SNAP_MANUAL_RE qui capture le premier token avant
  espace/underscore comme auteur. Permet de classer les snaps style
  'kmoad-ext avant maj' ou 'kmoad-ext s1' en origin='manual' avec auteur
  extrait, au lieu de origin=None.
- frontend: checkbox 'Tous formats' (cochée par défaut) qui inclut les
  snaps manual/slpm/patchcenter. Decoche pour PatchCenter only (ancien
  comportement).
- frontend: filtre intervenant elargi - match aussi sur nom du snap
  (contains) en plus de l'auteur extrait, pour couvrir les snaps dont
  l'auteur est concatene avec d'autres mots.

Resout le cas ou un utilisateur ne voyait qu'1 seul snap PatchCenter
alors qu'il avait des dizaines de snaps crees manuellement (format
'<user> avant maj').
2026-05-18 16:05:25 +02:00
b2f8456b03 style(snapshots): retire le sous-texte 'Ne ferme pas la page' de l'overlay busy 2026-05-07 21:07:32 +02:00
cefddd2ea0 feat(snapshots): dropdown Intervenant alimente depuis users actifs (hors admin) au pageload
- Router: charge la liste des users (is_active=true AND role <> 'admin')
  depuis la table users + passe au contexte
- Template: dropdown rempli en Jinja avec username + (toi) si current user + display_name
  si different. Si user connecte non present en BDD (cas rare), ajoute une entree
  en bonus
- JS: supprime rebuildIntervenantDropdown (la liste reste figee, plus simple,
  predictible). Note conservee pour explication.
2026-05-07 21:04:00 +02:00
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