patchcenter/app/services
Admin MPCZ 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
..
__init__.py PatchCenter v2.0 — Initial commit 2026-04-04 03:00:12 +02:00
agent_deploy_service.py Admin applications + correspondance cleanup + tools presentation DSI 2026-04-13 21:11:58 +02:00
audit_service.py Sync SANEF : audit_service + schema.sql + data deploy + gitignore 2026-04-17 09:20:57 +02:00
cache.py Cache mémoire 10min pour Qualys API, bouton Resync temps réel, page Agents (activation keys + versions) 2026-04-06 23:04:48 +02:00
campaign_service.py Migre etat vers labels iTop verbatim (Production, Nouveau, etc.) 2026-04-14 18:40:56 +02:00
correspondance_service.py Migre etat vers labels iTop verbatim (Production, Nouveau, etc.) 2026-04-14 18:40:56 +02:00
itop_service.py fix(servers/edit): timeout iTop reduit (3s connect / 10s read au lieu de 30s) + indicateur de chargement htmx visible (bouton change en 'Sauvegarde...' + message en bas du form) 2026-05-05 15:47:12 +02:00
ldap_service.py LDAP: restriction groupe AD + auto-provisioning users (sans permissions) 2026-04-15 11:45:33 +02:00
patch_run_service.py 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
prepatch_check_service.py feat(check satellite): cascade LAN+DMZ avec fallback automatique + migration servers.satellite_url + override BDD prioritaire 2026-05-05 14:34:47 +02:00
prereq_service.py feat(servers): drop colonnes legacy (snapshot_required/pre_patch_script/post_patch_script/satellite_host/need_pct) avec migration donnees + recreation views v_servers / v_patchable / v_conformity_todo + adaptation prereq_service et server_detail.html 2026-05-05 15:11:30 +02:00
profile_service.py Users/Contacts: workflow profils + LDAP + sync iTop + etat aligne 2026-04-12 18:50:43 +02:00
qualys_service.py fix(qualys): strip() defensif sur credentials + extraction enrichie de l erreur Qualys (responseCode + errorMessage + errorResolution + RAW fallback si format inconnu) 2026-05-05 18:28:13 +02:00
qualys_tags_service.py fix(qualys): API 2.0 confirmee (3.0 OTHER_ERROR car endpoint inexistant, 5.0 INVALID_API_VERSION) + body XML + mapping field user-friendly vers nom Qualys (hostname->name, fqdn->dnsHostName, ip->address) - cause racine 401 = mot de passe API expire 2026-05-05 16:56:56 +02:00
query_helpers.py Optim: logging structure + query_helpers.py + fix exceptions silencieuses routers 2026-04-17 23:19:18 +00:00
quickwin_log_service.py QuickWin: prereq/snapshot services, referentiel, logs, correspondance 2026-04-10 18:13:00 +02:00
quickwin_prereq_service.py QuickWin: prereq/snapshot services, referentiel, logs, correspondance 2026-04-10 18:13:00 +02:00
quickwin_service.py Migre etat vers labels iTop verbatim (Production, Nouveau, etc.) 2026-04-14 18:40:56 +02:00
quickwin_snapshot_service.py chore(snapshot): strip() defensif sur credentials vCenter (copier-coller peut ajouter newline/CR) 2026-05-04 16:29:20 +02:00
realtime_audit_service.py fix(audit): _resolve verifie la coherence FQDN BDD vs convention prefixe SANEF (vr*=.sanef-rec.fr, vp*=.sanef.groupe) - fallback sur suffixes ordonnes si FQDN incoherent + extension v[tdv] pour recette 2026-05-05 14:09:49 +02:00
secrets_service.py PatchCenter v2.0 — Initial commit 2026-04-04 03:00:12 +02:00
server_service.py fix(servers): filtre Zone=LAN match aussi zone_id IS NULL (la colonne affiche 'LAN' par defaut quand zone vide) + comparaison case-insensitive sur z.name 2026-05-05 16:05:25 +02:00
teams_service.py feat(teams): fan-out multi-recipient + flag is_database_server + multi-referents 2026-05-06 10:33:12 +02:00