From 4c4c9b2bfdf15f56eeb3030b8e5b19c67ad044b4 Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Wed, 28 Aug 2024 16:53:30 +0300 Subject: [PATCH] feat: serve logs and events from the newest to oldest, but keep the ordering So basically initial implementation, with limit=1, would emit the oldest record in series. New implementation will return the most recent one instead The response is still sorted by ascension --- .../core/database/operations/event_operations.py | 12 +++++++----- .../core/database/operations/logs_operations.py | 8 +++++--- .../database/operations/test_event_operations.py | 2 +- .../core/database/operations/test_logs_operations.py | 2 +- .../v1/auditlog/test_view_v1_auditlog_events.py | 4 ++-- .../views/v2/packages/test_view_v2_packages_logs.py | 2 +- 6 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/ahriman/core/database/operations/event_operations.py b/src/ahriman/core/database/operations/event_operations.py index c2616278e..cee03b736 100644 --- a/src/ahriman/core/database/operations/event_operations.py +++ b/src/ahriman/core/database/operations/event_operations.py @@ -51,11 +51,13 @@ def run(connection: Connection) -> list[Event]: Event.from_json(row) for row in connection.execute( """ - select created, event, object_id, message, data from auditlog - where (:event is null or event = :event) - and (:object_id is null or object_id = :object_id) - and repository = :repository - order by created limit :limit offset :offset + select created, event, object_id, message, data from ( + select * from auditlog + where (:event is null or event = :event) + and (:object_id is null or object_id = :object_id) + and repository = :repository + order by created desc limit :limit offset :offset + ) order by created asc """, { "event": event, diff --git a/src/ahriman/core/database/operations/logs_operations.py b/src/ahriman/core/database/operations/logs_operations.py index 862c5d6fe..27a8cc804 100644 --- a/src/ahriman/core/database/operations/logs_operations.py +++ b/src/ahriman/core/database/operations/logs_operations.py @@ -50,9 +50,11 @@ def run(connection: Connection) -> list[tuple[float, str]]: (row["created"], row["record"]) for row in connection.execute( """ - select created, record from logs - where package_base = :package_base and repository = :repository - order by created limit :limit offset :offset + select created, record from ( + select * from logs + where package_base = :package_base and repository = :repository + order by created desc limit :limit offset :offset + ) order by created asc """, { "package_base": package_base, diff --git a/tests/ahriman/core/database/operations/test_event_operations.py b/tests/ahriman/core/database/operations/test_event_operations.py index 58336f54a..2c4e1dad0 100644 --- a/tests/ahriman/core/database/operations/test_event_operations.py +++ b/tests/ahriman/core/database/operations/test_event_operations.py @@ -37,4 +37,4 @@ def test_event_insert_get_pagination(database: SQLite) -> None: """ database.event_insert(Event("1", "1")) database.event_insert(Event("2", "2")) - assert all(event.event == "2" for event in database.event_get(limit=1, offset=1)) + assert all(event.event == "1" for event in database.event_get(limit=1, offset=1)) diff --git a/tests/ahriman/core/database/operations/test_logs_operations.py b/tests/ahriman/core/database/operations/test_logs_operations.py index c05809e1a..3779a5de4 100644 --- a/tests/ahriman/core/database/operations/test_logs_operations.py +++ b/tests/ahriman/core/database/operations/test_logs_operations.py @@ -59,7 +59,7 @@ def test_logs_insert_get_pagination(database: SQLite, package_ahriman: Package) """ database.logs_insert(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1") database.logs_insert(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2") - assert database.logs_get(package_ahriman.base, 1, 1) == [(43.0, "message 2")] + assert database.logs_get(package_ahriman.base, 1, 1) == [(42.0, "message 1")] def test_logs_insert_get_multi(database: SQLite, package_ahriman: Package) -> None: diff --git a/tests/ahriman/web/views/v1/auditlog/test_view_v1_auditlog_events.py b/tests/ahriman/web/views/v1/auditlog/test_view_v1_auditlog_events.py index 45eedda05..47bd12136 100644 --- a/tests/ahriman/web/views/v1/auditlog/test_view_v1_auditlog_events.py +++ b/tests/ahriman/web/views/v1/auditlog/test_view_v1_auditlog_events.py @@ -39,7 +39,7 @@ async def test_get(client: TestClient) -> None: assert not response_schema.validate(json, many=True) events = [Event.from_json(event) for event in json] - assert events == [event1, event2] + assert events == [event2, event1] async def test_get_with_pagination(client: TestClient) -> None: @@ -61,7 +61,7 @@ async def test_get_with_pagination(client: TestClient) -> None: json = await response.json() assert not response_schema.validate(json, many=True) - assert [Event.from_json(event) for event in json] == [event2] + assert [Event.from_json(event) for event in json] == [event1] async def test_get_bad_request(client: TestClient) -> None: diff --git a/tests/ahriman/web/views/v2/packages/test_view_v2_packages_logs.py b/tests/ahriman/web/views/v2/packages/test_view_v2_packages_logs.py index 6f03d698e..b40010f6a 100644 --- a/tests/ahriman/web/views/v2/packages/test_view_v2_packages_logs.py +++ b/tests/ahriman/web/views/v2/packages/test_view_v2_packages_logs.py @@ -76,7 +76,7 @@ async def test_get_with_pagination(client: TestClient, package_ahriman: Package) logs = await response.json() assert not response_schema.validate(logs) - assert logs == [{"created": 43.0, "message": "message 2"}] + assert logs == [{"created": 42.0, "message": "message 1"}] async def test_get_bad_request(client: TestClient, package_ahriman: Package) -> None: