fix: incohérence UA count et note source pays

- analysis.py: suppression du LIMIT 10 dans la requête user-agents
  → limitée à 500 (cohérent avec la page /detections/ip/<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>
This commit is contained in:
SOC Analyst
2026-03-19 18:07:58 +01:00
parent 02d10b5363
commit 868dd68e34
2 changed files with 24 additions and 3 deletions

View File

@ -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(