From 5f1fedab3dacbc1560dd243b6c186084e34f1c3e Mon Sep 17 00:00:00 2001 From: Lorenzo Venerandi Date: Wed, 4 Mar 2026 13:55:10 +0100 Subject: [PATCH] feat: add sort_order parameter to access log retrieval for flexible timestamp sorting --- src/database.py | 5 ++++- src/routes/htmx.py | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/database.py b/src/database.py index bda6e88..3a3dbb0 100644 --- a/src/database.py +++ b/src/database.py @@ -883,6 +883,7 @@ class DatabaseManager: ip_filter: Optional[str] = None, suspicious_only: bool = False, since_minutes: Optional[int] = None, + sort_order: str = "desc", ) -> Dict[str, Any]: """ Retrieve access logs with pagination and optional filtering. @@ -893,6 +894,7 @@ class DatabaseManager: ip_filter: Filter by IP address suspicious_only: Only return suspicious requests since_minutes: Only return logs from the last N minutes + sort_order: Sort direction for timestamp ('asc' or 'desc') Returns: List of access log dictionaries @@ -900,7 +902,8 @@ class DatabaseManager: session = self.session try: 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: query = query.filter(AccessLog.ip == sanitize_ip(ip_filter)) diff --git a/src/routes/htmx.py b/src/routes/htmx.py index 303bce5..1e622d6 100644 --- a/src/routes/htmx.py +++ b/src/routes/htmx.py @@ -180,7 +180,8 @@ async def htmx_access_logs_by_ip( ): db = get_db() 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)