Commit Graph

4 Commits

Author SHA1 Message Date
e665fd94e7 fix(snapshots): exclure uniquement le compte technique 'admin' local (pas le role admin)
Avant: WHERE role <> 'admin' -> excluait TOUS les users avec role admin (notamment
les vrais utilisateurs ayant ce role pour leur travail patching).

Apres: WHERE LOWER(username) <> 'admin' -> exclut uniquement le compte technique
'admin' (seed local), peu importe son role. Tous les autres users actifs apparaissent.
2026-05-07 21:06:13 +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
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
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