b2b1b05028
tag_obsolete_os: normalise 'eol' -> 'obsolete' (filtre unifie)
2026-04-14 22:35:51 +02:00
47a4917d96
tag_obsolete_os: etend CHECK licence_support pour accepter 'obsolete'
2026-04-14 22:32:53 +02:00
0be4849ef2
Fix filtres zone/licence perdus lors tri/pagination/export CSV
...
Les macros sort_url et qs + le lien Export CSV ne propageaient pas les
parametres zone/licence ajoutes recemment. Ajout dans:
- servers.html (macros + export link)
- servers.py (endpoint export-csv: signature + filters dict)
2026-04-14 22:25:57 +02:00
5883ba5cc4
Add import_sanef_applications: import Solutions Applicatives iTop (nom/etat/responsable/admin)
2026-04-14 22:20:40 +02:00
e2b984c2c4
Servers: filtre licence (active/obsolete/els/sans licence)
2026-04-14 22:17:09 +02:00
2a11a27675
Add link_prod_nonprod: lie v[rtd]XXX <-> v[pi]XXX dans server_correspondance
2026-04-14 22:16:17 +02:00
52cb7b4cfc
Add enrich_servers_from_qualys: pousse fqdn/os_family/os_version/domain_ltd depuis Qualys
2026-04-14 21:54:36 +02:00
8317dcd36b
Add fill_ips_by_dns: fallback IP via DNS multi-suffix pour serveurs sans IP
2026-04-14 21:53:50 +02:00
5e9625764a
Dashboard: try/except autour KPIs DMZ/patch_history (resilient si table absente)
2026-04-14 21:47:41 +02:00
6ec1c4575d
Dashboard: KPIs DMZ + patching 2026 depuis patch_history
...
- Stats DMZ (cliquable vers filtre zone)
- Patched 2026, never patched, last week (depuis patch_history Excel)
- Couverture patching = patched / patchable
- KPIs cards cliquables (lien vers /servers filtre pre-applique)
- Fix alias stats.eol -> stats.obsolete
2026-04-14 21:45:36 +02:00
ec82a7cd1e
align_dmz: auto-detecte sheet (Histo-2025 prioritaire) + index DMZ via header
2026-04-14 21:39:14 +02:00
38756fbfd6
Add import_patch_history_xlsx: lit sheets hebdo S02..S52, detecte lignes vertes
...
Pour chaque serveur avec fond vert col A: insere patch_history avec
date (col N), heure (col O si presente), note 'Semaine XX'. Fallback
sur le lundi de la semaine ISO si pas de date.
2026-04-14 21:30:43 +02:00
90b03ec20b
align_dmz: reconnait Exposition internet/Expo indirecte (SANEF)
2026-04-14 21:20:42 +02:00
4300eb1210
Fix zone filter: subquery sur zone_id (count query n'a pas le JOIN zones)
2026-04-14 21:17:56 +02:00
3211b81e60
Servers: filtre zone (liste zones + DMZ + Sans zone)
2026-04-14 21:15:49 +02:00
197296b811
Add align_dmz_from_ayoub: tag servers.zone_id DMZ depuis colonne DMZ Excel
2026-04-14 20:55:04 +02:00
55d1c2b43d
Add cleanup_referentiel + --overwrite sur fill_emails
...
cleanup_referentiel: aligne envs sur canoniques iTop (Test1/Test2->Test,
Developpement->Développement, Pre-production->Pré-Prod) + fusion domains
avec stem (Peages->Péage).
fill_emails --overwrite: force la reecriture des emails existants.
2026-04-14 20:51:16 +02:00
1ce72a8757
fill_emails: fallback prenom.nom@sanef.com si pas de match contact
2026-04-14 20:46:42 +02:00
7f7b04e775
fill_ssh_method: etend CHECK pour accepter rdp_local/rdp_psmp/ssh_psmp + cleanup_domains standalone
2026-04-14 20:45:31 +02:00
a39a4866f3
Add fill_ssh_method_by_default: modes connexion SANEF par OS+env
...
Linux+Prod=ssh_psmp, Linux+other=ssh_key
Windows+Prod=rdp_psmp, Windows+other=rdp_local
2026-04-14 20:43:51 +02:00
6c8e2a3339
Add fill_emails_from_contacts: complete domain_environments emails depuis contacts
2026-04-14 20:41:29 +02:00
9f4d7707ef
DNS fill timeout via thread + tag_obsolete_os supporte els/obsolete separement
2026-04-14 20:37:46 +02:00
7f6ccc763b
Add tag_obsolete_os: licence_support=obsolete pour OS EOL (RHEL 5/6/7, Win 2008/2012, Debian 8-10, etc.)
2026-04-14 20:36:19 +02:00
0cfdab7c61
Add fill_domain_ltd_by_dns: resolution DNS multi-suffix pour cas residuels
2026-04-14 20:31:41 +02:00
b315cee98b
Add fill_domain_ltd_by_prefix: convention SANEF vp/vi=sanef.groupe, vr/vt/vd=sanef-rec.fr
2026-04-14 20:21:29 +02:00
de41b66a34
Add import_domain_ltd_from_qualys: extrait domain_ltd depuis Qualys FQDN
2026-04-14 20:18:06 +02:00
489524ac38
import_ips_from_qualys: enleve suffixe /32 inet
2026-04-14 20:15:52 +02:00
154faceaff
Fix: qualys_assets.ip_address est inet pas text, cast en text
2026-04-14 20:15:05 +02:00
e072adb717
Add import_ips_from_qualys: fallback IPs depuis Qualys pour serveurs sans IP iTop
2026-04-14 20:13:11 +02:00
c8a5f73616
import_sanef_ips: csv.reader par indice (evite conflit Nom/Nom duplique)
2026-04-14 20:10:51 +02:00
a66e0d853e
Fix schema server_ips: ip_type au lieu de is_primary, VRF/GW/MASK dans description
2026-04-14 19:55:42 +02:00
c905ab6db3
import_sanef_ips: CAST inet + hostname multi-source + skip doublons
2026-04-14 19:50:40 +02:00
b66ef0a122
Fix SQLAlchemy: CAST(:ip AS inet) au lieu de :ip::inet (conflit avec bind marker)
2026-04-14 19:48:42 +02:00
e2f61af818
Add import_ips_from_assets: lit colonne IP directe des CSV VM/physical
...
Contourne l'export Interface Réseau (souvent incomplet). Utilise la
colonne IP directe du CSV VMs (attribut iTop sur la VM) + VRF si
present. Gère plusieurs IPs separees par virgule.
2026-04-14 19:47:37 +02:00
78ad32045e
import_databases: lire Systeme->Nom en priorite (Serveur->Nom vide pour VM)
2026-04-14 19:39:35 +02:00
7c56725f6e
Add import_sanef_databases: table server_databases + import CSV iTop
...
Cree server_databases (FK servers.id, UNIQUE hostname+instance_name).
Pour chaque instance BDD iTop: match hostname via Serveur->Nom, store
type (SAP Hana/Oracle/PostgreSQL/SQL Server/MySQL), version, edition,
cluster, environnement, etat.
2026-04-14 19:36:11 +02:00
2379a2fdc0
align_from_ayoub: dedoublonne les domaines case/accent-insensitive
...
Fusionne 'Flux Libre'/'flux libre', 'Péage'/'peage'/'PeagE' en gardant la
forme propre (avec accents et capitale). Update domain_environments.domain_id
vers le keeper et supprime les doublons.
2026-04-14 19:32:28 +02:00
991f4dd6dc
align_from_ayoub: dry-run affiche les domains/envs/paires a creer
2026-04-14 19:26:26 +02:00
331e6b2946
align_from_ayoub: normalise Environnement (production->Production, Test 1->Test)
2026-04-14 19:25:10 +02:00
b6bb7e2edd
align_from_ayoub: switch vers jointure (auto-cree domains/envs/de)
...
Auto-cree les domains / environments / domain_environments absents en
utilisant les valeurs iTop verbatim (domains.name='BI', etc.), avec codes
slug auto-generes (evite collision).
Pour chaque serveur:
- set servers.domain_env_id vers la paire (domaine, env)
- sync servers.environnement plain-text (pour filtre/affichage existant)
- populate domain_environments.responsable_nom / referent_nom si NULL
Preserve les valeurs existantes non-NULL dans domain_environments.
2026-04-14 19:20:36 +02:00
c16a360cdd
Add align_from_ayoub: alignement servers depuis Excel Planning Patching
...
Lit la sheet 'Serveurs patchables 2026' et met a jour pour chaque hostname :
- domaine (nouvelle colonne text iTop verbatim, ajoutee si absente)
- environnement (override si non vide)
- responsable_nom (Responsable Domaine DTS)
- referent_nom (Referent technique)
Pas de jointure via domain_env_id: stockage plain-text aligne sur iTop.
Dry-run affiche les diff avant/apres.
2026-04-14 19:17:25 +02:00
9048a87397
Drop NOT NULL sur servers.etat pour accepter les physiques non-lifecycle
2026-04-14 19:06:05 +02:00
a366427daf
Fix: iTop exporte 2 colonnes Etat (lifecycle+condition), prendre la 1ere
...
Python csv.DictReader ne garde que le dernier quand 2 colonnes ont le
meme nom: le Nouveau (condition) ecrasait le Production (lifecycle).
Switch vers csv.reader + lecture par indice de colonne (1ere occurrence
de Etat = lifecycle).
2026-04-14 19:05:08 +02:00
3c6e10944e
Servers list: SELECT s.environnement (colonne iTop) au lieu de e.name legacy
2026-04-14 18:58:24 +02:00
56fc1eaa7c
Servers filters: option (Sans etat)/(Sans env) pour NULL
2026-04-14 18:53:51 +02:00
ce2ac219db
Fix: lire Etat en priorite (Status toujours Production, inutile) + condition -> NULL
2026-04-14 18:51:57 +02:00
56f91ca9a8
Add list_csv_etats: liste valeurs distinctes Etat/Status/Environnement
2026-04-14 18:49:29 +02:00
1c2d0b958e
Etat/Environnement dropdowns alignes strict iTop SANEF
...
Etat: 6 valeurs lifecycle uniquement (Production, Implémentation,
Stock, Obsolète, prêt, tests). Suppression des valeurs condition
(Nouveau, Cassé, En panne, etc.) et de EOL qui n'existent pas
dans iTop SANEF.
Environnement: 7 valeurs iTop (Développement, Intégration, Pré-Prod,
Production, Recette, Test, Formation). Filtre env bascule de
e.code (legacy) vers s.environnement.
tools/import_etat_itop.py:
- CHECK 6 valeurs lifecycle + NULL
- Migration mappe les anciennes condition/EOL -> NULL
- Lit Status en priorite dans le CSV (lifecycle), fallback Etat
- Fix format print pour None
tools/import_sanef_*.py: ITOP_ETATS reduit a 6 valeurs
2026-04-14 18:48:30 +02:00
753d4076c9
Migre etat vers labels iTop verbatim (Production, Nouveau, etc.)
...
Aligne la colonne servers.etat sur les valeurs iTop exactes au lieu
des codes lowercase internes.
Impact:
- servers.etat stocke: Production, Implémentation, Stock, Obsolète,
EOL, prêt, tests, Nouveau, A récupérer, Cassé, Cédé, En panne,
Perdu, Recyclé, Occasion, A détruire, Volé
- Remplace tous les 'production'/'obsolete'/'stock'/'eol'/'implementation'
en WHERE/comparisons par les labels iTop verbatim (~10 fichiers)
- Templates badges/filtres: valeurs + labels iTop
- itop_service: maintient mapping iTop API internal code <-> DB label
- import_sanef_*: norm_etat retourne la valeur iTop verbatim ou None
(plus de fallback silencieux sur 'production')
Ajoute:
- tools/import_etat_itop.py : migration lowercase -> iTop + re-import CSV
- tools/import_environnement.py : fix dry-run pour ADD COLUMN idempotent
Supprime:
- tools/fix_etat_extend.py (obsolete par import_etat_itop.py)
2026-04-14 18:40:56 +02:00
242641a085
Add import_environnement: colonne environnement + import CSV iTop verbatim
2026-04-14 18:33:40 +02:00