added first version of single ip page breakdiwn

This commit is contained in:
carnivuth
2026-02-22 21:53:18 +01:00
committed by Lorenzo Venerandi
parent 75722051d6
commit f7416518fe
3 changed files with 20 additions and 17 deletions

View File

@@ -888,31 +888,34 @@ class DatabaseManager:
logs = query.offset(offset).limit(page_size).all() logs = query.offset(offset).limit(page_size).all()
# Get total count of attackers # Get total count of attackers
total_access_logs = ( total_access_logs = (
session.query(AccessLog).filter(AccessLog.ip == sanitize_ip(ip_filter)).count() session.query(AccessLog)
.filter(AccessLog.ip == sanitize_ip(ip_filter))
.count()
) )
total_pages = (total_access_logs + page_size - 1) // page_size total_pages = (total_access_logs + page_size - 1) // page_size
return { return {
"access_logs": [ "access_logs": [
{ {
"id": log.id, "id": log.id,
"ip": log.ip, "ip": log.ip,
"path": log.path, "path": log.path,
"user_agent": log.user_agent, "user_agent": log.user_agent,
"method": log.method, "method": log.method,
"is_suspicious": log.is_suspicious, "is_suspicious": log.is_suspicious,
"is_honeypot_trigger": log.is_honeypot_trigger, "is_honeypot_trigger": log.is_honeypot_trigger,
"timestamp": log.timestamp.isoformat(), "timestamp": log.timestamp.isoformat(),
"attack_types": [d.attack_type for d in log.attack_detections], "attack_types": [d.attack_type for d in log.attack_detections],
} }
for log in logs ], for log in logs
],
"pagination": { "pagination": {
"page": page, "page": page,
"page_size": page_size, "page_size": page_size,
"total_logs": total_access_logs, "total_logs": total_access_logs,
"total_pages": total_pages, "total_pages": total_pages,
}, },
} }
finally: finally:
self.close_session() self.close_session()

View File

@@ -40,6 +40,7 @@ async def dashboard_page(request: Request):
}, },
) )
@router.get("/ip/{ip_address:path}") @router.get("/ip/{ip_address:path}")
async def ip_page(ip_address: str, request: Request): async def ip_page(ip_address: str, request: Request):
db = get_db() db = get_db()
@@ -57,7 +58,7 @@ async def ip_page(ip_address: str, request: Request):
"request": request, "request": request,
"dashboard_path": dashboard_path, "dashboard_path": dashboard_path,
"stats": stats, "stats": stats,
"ip_address": ip_address "ip_address": ip_address,
}, },
) )
else: else:
@@ -67,4 +68,3 @@ async def ip_page(ip_address: str, request: Request):
except Exception as e: except Exception as e:
get_app_logger().error(f"Error fetching IP stats: {e}") get_app_logger().error(f"Error fetching IP stats: {e}")
return JSONResponse(content={"error": str(e)}) return JSONResponse(content={"error": str(e)})

View File

@@ -180,7 +180,7 @@ async def htmx_access_logs_by_ip(
): ):
db = get_db() db = get_db()
result = db.get_access_logs_paginated( result = db.get_access_logs_paginated(
page=max(1, page),page_size=25, ip_filter=ip_filter page=max(1, page), page_size=25, ip_filter=ip_filter
) )
# Normalize pagination key (DB returns total_attackers, template expects total) # Normalize pagination key (DB returns total_attackers, template expects total)