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>
25 lines
1.2 KiB
HTML
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 vrtrabkme1 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 %}
|