patchcenter/app/templates/audit_realtime.html
Khalid MOUTAOUAKIL 8e62b1fb11 Qualys complet, contacts, audit refactoré, bulk serveurs
Qualys:
- Recherche API temps réel + cache 24h base locale
- Tags: liste DYN/STAT, mapping V3 (DOM-*, TYP-*, APP-*), nb assets cliquable
- CRUD tags: créer STAT, supprimer, resync API
- Détail asset: infos + décodage nomenclature V3 + tags assignés
- Ajout/retrait tag unitaire avec autocomplete filtrable
- Bulk add/remove tag en masse avec dropdown filtrable
- Tags retirer: charge dynamiquement les STAT assignés aux assets sélectionnés
- Resync assets sélectionnés + retour même recherche

Contacts:
- 50 contacts importés avec 93 scopes (domaine/app/serveur/zone par env)
- 13 rôles (responsable_domaine, ra_prod, ra_recette, referent_technique...)
- Recherche par nom/email/serveur (affiche contacts liés)
- CRUD complet: éditer, scopes, activer/désactiver, supprimer
- Serveurs liés calculés dynamiquement depuis les scopes

Audit:
- Restructuré: Audit général + sous-menu Spécifique
- Dernier audit global affiché avec date
- Lancer audit général avec exclusions (domaines/zones) et parallélisme
- KPIs Qualys KO et S1 KO cliquables
- Export CSV

Serveurs:
- Actions groupées bulk (domaine, env, tier, état, owner, licence)
- Dashboard: KPI EOL ajouté
- Filtre état: EOL + en décommissionnement ajoutés
- 138 serveurs EOL importés depuis Qualys (owner=na, hors périmètre)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 00:47:26 +02:00

25 lines
1.2 KiB
HTML

{% extends 'base.html' %}
{% block title %}Audit temps réel{% endblock %}
{% block content %}
<div class="flex justify-between items-center mb-4">
<div>
<a href="/audit" class="text-xs text-gray-500 hover:text-gray-300">← Audit</a>
<h2 class="text-xl font-bold text-cyber-accent">Audit temps réel</h2>
</div>
</div>
<div class="card p-5">
<form method="POST" action="/audit/realtime" enctype="multipart/form-data" class="space-y-3">
<div>
<label class="text-xs text-gray-500">Serveurs (un par ligne ou séparés par virgule)</label>
<textarea name="hostnames_text" rows="6" class="w-full font-mono text-xs" placeholder="vpinfaweb1&#10;vrtrabkme1&#10;lpemvaste1"></textarea>
</div>
<div>
<label class="text-xs text-gray-500">Ou importer un fichier (.txt, un hostname par ligne)</label>
<input type="file" name="hostnames_file" accept=".txt" class="text-xs text-gray-400">
</div>
<button type="submit" class="btn-primary px-4 py-2 text-sm" onclick="this.textContent='Audit en cours...'; this.disabled=true; this.form.submit()">Générer le rapport d'audit</button>
</form>
</div>
{% endblock %}