From 6f57ed550b1d5eedd817ec160128eeccead9fae3 Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Sun, 9 Mar 2025 14:46:33 +0200 Subject: [PATCH] feat: refine log system (#142) * refine package logging * add interface * revert version selection * replace tuple with model * rename column in logs table, add coverters * generate process identifier for child proocesses --- package/share/ahriman/settings/ahriman.ini | 2 + .../ahriman/templates/build-status.jinja2 | 4 +- .../build-status/package-info-modal.jinja2 | 54 +++++++++-- .../ahriman/templates/utils/style.jinja2 | 6 ++ src/ahriman/core/configuration/schema.py | 5 + .../migrations/m015_logs_process_id.py | 30 ++++++ .../database/operations/logs_operations.py | 81 ++++++++++++---- src/ahriman/core/log/http_log_handler.py | 17 +++- src/ahriman/core/log/lazy_logging.py | 23 +---- src/ahriman/core/repository/update_handler.py | 3 +- src/ahriman/core/status/client.py | 20 ++-- src/ahriman/core/status/local_client.py | 23 +++-- src/ahriman/core/status/watcher.py | 24 +---- src/ahriman/core/status/web_client.py | 35 ++++--- src/ahriman/models/event.py | 2 +- src/ahriman/models/log_record.py | 76 +++++++++++++++ src/ahriman/models/log_record_id.py | 15 +++ src/ahriman/models/package.py | 9 +- src/ahriman/web/apispec/decorators.py | 3 +- src/ahriman/web/schemas/__init__.py | 2 +- src/ahriman/web/schemas/log_schema.py | 10 +- ...ed_log_schema.py => logs_rotate_schema.py} | 14 +-- src/ahriman/web/views/v1/packages/logs.py | 15 ++- src/ahriman/web/views/v1/service/logs.py | 63 +++++++++++++ src/ahriman/web/views/v2/packages/logs.py | 7 +- .../migrations/test_m015_logs_process_id.py | 8 ++ .../operations/test_logs_operations.py | 93 ++++++++++++++----- .../ahriman/core/log/test_http_log_handler.py | 18 +++- tests/ahriman/core/log/test_lazy_logging.py | 10 -- tests/ahriman/core/status/test_client.py | 10 +- .../ahriman/core/status/test_local_client.py | 16 +++- tests/ahriman/core/status/test_watcher.py | 33 ------- tests/ahriman/core/status/test_web_client.py | 81 ++++++++++++++-- tests/ahriman/models/test_log_record.py | 13 +++ tests/ahriman/models/test_log_record_id.py | 9 ++ ...g_schema.py => test_logs_rotate_schema.py} | 0 .../v1/service/test_view_v1_service_logs.py | 77 +++++++++++++++ .../v2/packages/test_view_v2_packages_logs.py | 9 +- 38 files changed, 711 insertions(+), 209 deletions(-) create mode 100644 src/ahriman/core/database/migrations/m015_logs_process_id.py create mode 100644 src/ahriman/models/log_record.py rename src/ahriman/web/schemas/{versioned_log_schema.py => logs_rotate_schema.py} (65%) create mode 100644 src/ahriman/web/views/v1/service/logs.py create mode 100644 tests/ahriman/core/database/migrations/test_m015_logs_process_id.py create mode 100644 tests/ahriman/models/test_log_record.py rename tests/ahriman/web/schemas/{test_versioned_log_schema.py => test_logs_rotate_schema.py} (100%) create mode 100644 tests/ahriman/web/views/v1/service/test_view_v1_service_logs.py diff --git a/package/share/ahriman/settings/ahriman.ini b/package/share/ahriman/settings/ahriman.ini index d7e2f328..e53a1fa2 100644 --- a/package/share/ahriman/settings/ahriman.ini +++ b/package/share/ahriman/settings/ahriman.ini @@ -7,6 +7,8 @@ logging = ahriman.ini.d/logging.ini ;apply_migrations = yes ; Path to the application SQLite database. database = ${repository:root}/ahriman.db +; Keep last build logs for each package +keep_last_logs = 5 [alpm] ; Path to pacman system database cache. diff --git a/package/share/ahriman/templates/build-status.jinja2 b/package/share/ahriman/templates/build-status.jinja2 index 86b52e8b..0309ba7d 100644 --- a/package/share/ahriman/templates/build-status.jinja2 +++ b/package/share/ahriman/templates/build-status.jinja2 @@ -16,11 +16,11 @@