From 868dd68e34aa18cfdb3ff66639dbc636f8160f69 Mon Sep 17 00:00:00 2001 From: SOC Analyst Date: Thu, 19 Mar 2026 18:07:58 +0100 Subject: [PATCH] =?UTF-8?q?fix:=20incoh=C3=A9rence=20UA=20count=20et=20not?= =?UTF-8?q?e=20source=20pays?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - analysis.py: suppression du LIMIT 10 dans la requête user-agents → limitée à 500 (cohérent avec la page /detections/ip/ qui montre 278) → total_count calculé via requête séparée pour des pourcentages corrects - CountryAnalysis.tsx: ajout d'un InfoTip ⓘ sur 'PAYS DE L'IP' expliquant que la source est le GeoIP du pipeline d'ingestion (ClickHouse) et peut différer des APIs de réputation externes pour les IPs anycast/CDN/cloud Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- backend/routes/analysis.py | 17 ++++++++++++++--- .../src/components/analysis/CountryAnalysis.tsx | 10 ++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/backend/routes/analysis.py b/backend/routes/analysis.py index c92c8b0..5f0bf54 100644 --- a/backend/routes/analysis.py +++ b/backend/routes/analysis.py @@ -373,10 +373,19 @@ async def analyze_user_agents(ip: str): AND time >= now() - INTERVAL 24 HOUR GROUP BY ua ORDER BY count DESC - LIMIT 10 + LIMIT 500 + """ + + # Total réel des requêtes (pour les pourcentages corrects) + ip_total_query = """ + SELECT count() + FROM mabase_prod.http_logs + WHERE src_ip = %(ip)s + AND time >= now() - INTERVAL 24 HOUR """ ip_ua_result = db.query(ip_ua_query, {"ip": ip}) + ip_total_result = db.query(ip_total_query, {"ip": ip}) # Classification des UAs def classify_ua(ua: str) -> str: @@ -389,8 +398,10 @@ async def analyze_user_agents(ip: str): return 'script' return 'normal' - # Calculer le total - total_count = sum(row[1] for row in ip_ua_result.result_rows) + # Total réel de toutes les requêtes (pour des pourcentages corrects même avec LIMIT) + total_count = ip_total_result.result_rows[0][0] if ip_total_result.result_rows else 0 + if total_count == 0: + total_count = sum(row[1] for row in ip_ua_result.result_rows) ip_user_agents = [ UserAgentData( diff --git a/frontend/src/components/analysis/CountryAnalysis.tsx b/frontend/src/components/analysis/CountryAnalysis.tsx index 448e9d9..83ed7b7 100644 --- a/frontend/src/components/analysis/CountryAnalysis.tsx +++ b/frontend/src/components/analysis/CountryAnalysis.tsx @@ -1,4 +1,5 @@ import { useEffect, useState } from 'react'; +import { InfoTip } from '../ui/Tooltip'; interface CountryData { code: string; @@ -84,6 +85,15 @@ export function CountryAnalysis({ ip, asn }: CountryAnalysisProps) {

2. PAYS DE L'IP

+
{/* Pays de l'IP */}