060af01db9
feat(teams): fan-out multi-recipient + flag is_database_server + multi-referents
...
- Migration v2: ajoute teams_channel_rules.match_is_database_server (NULL=any/TRUE=DB only/FALSE=non-DB only),
servers.is_database_server boolean (default false), table server_additional_referents pour multi-referents
- Service teams_service.py: resolve_channel_for_server -> resolve_channels_for_server (pluriel, retourne LIST)
* msg_type=reboot: 1 seul canal (canal flagge is_reboot_channel)
* server.teams_channel_id override: 1 seul canal
* sinon FAN-OUT: TOUTES les regles actives qui matchent contribuent un canal
* dynamic_to_email calcule selon nature de la regle (responsable / DBA pool / referents)
- send_notification: boucle sur les canaux resultants, ecrit 1 fichier SP par destination
- UI settings.html: nouveau filtre 'Match serveur DB' dans formulaire regle, badge dans tableau
- Compat: resolve_channel_for_server (singulier) conserve comme wrapper qui retourne le 1er canal
Permet le scenario: serveur DB avec responsable=Delcour -> notif a la fois dans conv Delcour
ET dans conv DBA (Nadine+Cedric), via 2 regles qui matchent en parallele.
2026-05-06 10:33:12 +02:00
edec1f7db5
feat(teams): mode SharePoint sync (calque .exe Sanef Patch Manager) + rules-based routing
...
- Migration: ajoute sp_route/mode/is_reboot_channel/is_dynamic_dm sur teams_channels,
cree table teams_channel_rules (match resp/domain/env/msg_type/hostname pattern)
- Service teams_service.py: format texte plat compatible workflows existants,
write_sharepoint_notification (ecrit fichier .txt dans <sp_base>/<sp_route>/),
resolve_channel_for_server rules-based avec priorite reboot,
send_notification orchestre resolution + envoi
- Settings UI: CRUD canaux etendu (mode SP/webhook + flags reboot/dyn_dm),
CRUD regles avec match conditions, sharepoint_notif_path en secret app,
bouton Test ecrit fichier .txt en mode SP
- Mode is_dynamic_dm: prefixe le contenu par 'TO: <email>' pour permettre
un workflow PA unique qui dispatch dynamiquement aux responsables
- Pas d'OAuth requis: PatchCenter ecrit fichiers, Workflows PA cote SharePoint
(deja en place pour le .exe) declenchent et postent sur Teams
Mode webhook conserve mais inactif tant qu'OAuth Entra ID pas mis en place chez SANEF
2026-05-06 09:57:42 +02:00
5a9e2f78d1
fix(servers/edit + patching): dropdown 'Solution applicative' affiche TOUTES les applications (filtre 'WHERE itop_id IS NOT NULL' retire) - les apps locales sans correspondance iTop apparaissent maintenant
2026-05-05 15:58:41 +02:00
c19309fec2
fix(servers/edit): retire le push iTop sur changement application (etait bloquant 10s+ si iTop injoignable) - update local seulement, push iTop dedie via endpoint async a faire si besoin
2026-05-05 15:50:13 +02:00
e8f369817e
fix(servers): bulk + edit synchronisent aussi les colonnes text legacy s.environnement et s.domaine (sinon liste affiche valeur obsolete) + script SQL re-sync des serveurs deja desyncs
2026-05-05 15:29:34 +02:00
1b82440813
fix(servers): bulk + edit comparaisons domain/env/zone case-insensitive (BD mixte RECETTE/Recette/recette) + fallback bulk env_code si serveur sans domain_env_id + log INFO/WARNING + retour msg=bulk_<n_updated_reel>
2026-05-05 15:19:03 +02:00
0ed564a8ed
feat(check satellite): cascade LAN+DMZ avec fallback automatique + migration servers.satellite_url + override BDD prioritaire
2026-05-05 14:34:47 +02:00
a7874aec11
feat(settings/clusters M2): UI CRUD server_clusters - groupes + ordre redemarrage + strategie sequential/parallel + panneau detail serveurs rattaches
2026-05-05 14:05:59 +02:00
075706178e
feat(settings/teams M1+M4): UI CRUD canaux Teams + service teams_service.py (Adaptive Card via Incoming Webhook) + bouton Test webhook
2026-05-05 13:58:38 +02:00
ff95424e03
feat(patching/iexec B3.6): bouton 3e Reboot manuel (double confirmation, jamais auto) + 3f Wait reconnexion (poll TCP/22 + SSH uptime, timeout 10min) - shutdown -r +1 avec audit log
2026-05-05 12:06:50 +02:00
19d88f2d53
feat(patching/iexec): detection auto deps problematiques + bouton retry sans paquets KO (multilib, requires, conflicts) - extra_excludes via SSE query param
2026-05-05 11:32:44 +02:00
8cf78dfef3
feat(patching/iexec): terminal live SSE pour dry-run et patch reel - generator yum_stream_lines + endpoint /yum-stream + EventSource cote client + log audit en fin de stream
2026-05-04 17:02:28 +02:00
e29ecff949
feat(patching/iexec B3.4+B3.5): pre-capture services+ports + post-compare avant/apres avec rapport diff (scripts wiki SANEF, push base64) - workflow 3a/3b/3c/3d sequentiel
2026-05-04 16:52:15 +02:00
6c92c71d17
feat(patching/iexec B3): step 3a dry-run (yum update --assumeno) + step 3b real patch (yum update -y) avec excludes effectifs depuis v_servers, validation anti-injection sur excludes, log audit, double confirmation pour patch reel
2026-05-04 16:40:46 +02:00
9996757e4b
feat(snapshot): branche prod/hprod via prefixe hostname (vp/sp/lp = prod/metier ; reste = hprod/gestion) + fix matching DR vpsiaavcs1 (etait vpsicavcs1) + tolerance par name
2026-05-04 16:15:46 +02:00
a68d9494f1
fix(patching/iexec snapshot): toujours chercher la VM dans vCenter par hostname (s.vcenter_vm_name peut etre faux en base)
2026-05-04 16:12:50 +02:00
a6b98568f1
feat(patching/iexec B2): branchement snapshot vCenter - bouton Step 2 lance snapshot pour rows verdict OK, nom intervenant_YYYY-MM-DD_avant_patch, log audit dans patch_planning_row_log
2026-05-04 15:50:11 +02:00
11bbda5a27
fix(patching/iexec): r.os manquant dans SELECT de iexec_check (filtre Windows cassait)
2026-05-04 15:27:13 +02:00
8f98492c77
fix(patching/iexec): vue s appelle v_servers (pas v_servers_patching) pour effective_excludes
2026-05-04 15:22:42 +02:00
4e02319516
fix(patching/import): import Query manquant pour iexec_page (NameError au demarrage)
2026-05-04 15:15:47 +02:00
eb2e0dc8ba
feat(patching/iexec B1): page wizard step 1 - checks DNS+SSH+Satellite (LAN vpdsiasat2 / DMZ vpdsiasat1 selon domaine), Linux uniquement (Windows skip), sudo -n partout
2026-05-04 15:14:06 +02:00
a5f3a25198
feat(patching/import): actions Reporter/Ajouter au patching + log + colonne Etat (etape A) + placeholder /patching/iexec affichant excludes effectifs (etape B a venir)
2026-05-04 14:57:49 +02:00
630297f98e
feat(patching/import): stockage date/heure typés (DATE+TIME) + jour_text fallback texte libre + tri colonne Date par date+heure combinés
2026-05-04 13:57:24 +02:00
488b5a980b
feat(patching/import): ajout colonnes Resp Domaine DTS, Referent technique, Mode operatoire, Impacts, BDD - support nouveau format S07+ + Date au lieu de Jour
2026-05-04 13:12:09 +02:00
557015325b
feat(patching): import planning xlsx (etape 1) - tables patch_planning_imports + rows, page upload + selecteur semaine + tableau
2026-05-04 12:57:35 +02:00
767b33095a
feat(qualys/agents): bloque troubleshooting pour Windows (route + bouton 'Non gere' dans table)
2026-04-28 01:48:32 +02:00
cdcb85917d
feat(qualys/agents): audit en background thread + page d'attente auto-refresh (fix ERR_CONNECTION_RESET sur audits longs)
2026-04-27 23:25:50 +02:00
03229d4d08
feat(qualys/agents): bouton Check + page audit cible Qualys agent (status + version + logs agent/systeme via SSH)
2026-04-27 23:09:05 +02:00
cc550c2d84
fix(qualys/duplicates): scan async (background thread) + bandeau scan en cours - evite 503 HAProxy
2026-04-25 10:31:07 +00:00
3d043af194
feat(qualys): page doublons + suppression API Qualys 1-clic
2026-04-25 10:17:40 +00:00
0ab4f2d8fa
fix(qualys/dashboard): vire flag in-memory + safety net thread + flex layout 6 KPI
2026-04-25 00:13:22 +00:00
34cca6f77b
fix(qualys/dashboard): user est un dict, utiliser user.get(sub) au lieu de .username
2026-04-25 00:09:15 +00:00
9a7f446637
fix(qualys/dashboard): insert pending row dans la route avant spawn thread (no race)
2026-04-25 00:07:22 +00:00
daf87891a7
feat(qualys/dashboard): is_running base sur DB (multi-worker safe) + bouton Annuler
2026-04-25 00:05:49 +00:00
8f8e8c4d8f
feat(qualys): dashboard vulnerabilites avec KPI + historique
2026-04-24 23:49:46 +00:00
b06aedfc3b
fix(qualys): force vuln cache refresh on bulk resync redirect
2026-04-24 22:51:11 +00:00
392c8f4fe5
fix(qualys/search): KPI vuln_map est dict total/severityN, pas int
2026-04-24 22:34:16 +00:00
3c00f05263
feat(qualys/agents): colonne Version OS dans table sans-agent
2026-04-24 22:30:39 +00:00
c57ef61adb
feat(qualys/search): KPI total/avec-vuln/sans-vuln + filtre vuln_filter
2026-04-24 22:27:55 +00:00
5fedfb5f80
Add page Tour de garde SecOps : import xlsx + table + vue hebdo + competences
2026-04-17 23:39:11 +00:00
a0f90cd719
Optim: logging structure + query_helpers.py + fix exceptions silencieuses routers
2026-04-17 23:19:18 +00:00
9097872e57
Secu: verif permissions can_view/can_edit sur endpoints HTMX detail/edit
2026-04-17 23:15:04 +00:00
2bf2fa5042
patch_history: tolere parametres vides dans les filtres (week=, source=, etc.)
2026-04-17 12:42:58 +00:00
2ab2ceabba
Historique patching : filtres OS/zone/domaine/intervenant + colonnes table
2026-04-17 12:10:45 +00:00
4b1794d4d1
Add page Historique patching : vue unifiee import xlsx + campagnes + quickwin
2026-04-17 08:47:25 +00:00
8b212df7a1
Qualys 'sans agent': match via server_id (couvre alias hostname Qualys != iTop)
2026-04-15 13:54:07 +02:00
245777fd46
Qualys agents: exclut Win10/11/Workstation de la liste 'Sans agent'
2026-04-15 13:49:05 +02:00
a3a1ec7e6d
Qualys deploy: bouton 'Sauvegarder ces valeurs' (ActivationId/Customer/Uri persistes)
2026-04-15 13:34:24 +02:00
5b6e113792
Qualys deploy: filtre s.os_family=linux + retire dropdown OS du UI
2026-04-15 13:18:09 +02:00
55d08921f9
Qualys deploy: persiste activation_ids/customer/uri en secrets + selection auto Linux/Windows
2026-04-15 13:12:15 +02:00