feat: add sort_order parameter to access log retrieval for flexible timestamp sorting
This commit is contained in:
@@ -883,6 +883,7 @@ class DatabaseManager:
|
|||||||
ip_filter: Optional[str] = None,
|
ip_filter: Optional[str] = None,
|
||||||
suspicious_only: bool = False,
|
suspicious_only: bool = False,
|
||||||
since_minutes: Optional[int] = None,
|
since_minutes: Optional[int] = None,
|
||||||
|
sort_order: str = "desc",
|
||||||
) -> Dict[str, Any]:
|
) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
Retrieve access logs with pagination and optional filtering.
|
Retrieve access logs with pagination and optional filtering.
|
||||||
@@ -893,6 +894,7 @@ class DatabaseManager:
|
|||||||
ip_filter: Filter by IP address
|
ip_filter: Filter by IP address
|
||||||
suspicious_only: Only return suspicious requests
|
suspicious_only: Only return suspicious requests
|
||||||
since_minutes: Only return logs from the last N minutes
|
since_minutes: Only return logs from the last N minutes
|
||||||
|
sort_order: Sort direction for timestamp ('asc' or 'desc')
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
List of access log dictionaries
|
List of access log dictionaries
|
||||||
@@ -900,7 +902,8 @@ class DatabaseManager:
|
|||||||
session = self.session
|
session = self.session
|
||||||
try:
|
try:
|
||||||
offset = (page - 1) * page_size
|
offset = (page - 1) * page_size
|
||||||
query = session.query(AccessLog).order_by(AccessLog.timestamp.desc())
|
order = AccessLog.timestamp.asc() if sort_order == "asc" else AccessLog.timestamp.desc()
|
||||||
|
query = session.query(AccessLog).order_by(order)
|
||||||
|
|
||||||
if ip_filter:
|
if ip_filter:
|
||||||
query = query.filter(AccessLog.ip == sanitize_ip(ip_filter))
|
query = query.filter(AccessLog.ip == sanitize_ip(ip_filter))
|
||||||
|
|||||||
@@ -180,7 +180,8 @@ 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,
|
||||||
|
sort_order=sort_order if sort_order in ("asc", "desc") else "desc",
|
||||||
)
|
)
|
||||||
|
|
||||||
# Normalize pagination key (DB returns total_attackers, template expects total)
|
# Normalize pagination key (DB returns total_attackers, template expects total)
|
||||||
|
|||||||
Reference in New Issue
Block a user