From 43975ec231d94d19e1d9711a45bf9eab015ba273 Mon Sep 17 00:00:00 2001 From: Marc 'risson' Schmitt Date: Tue, 24 Jun 2025 16:01:40 +0200 Subject: [PATCH] separate current and previous execution logs Signed-off-by: Marc 'risson' Schmitt --- authentik/tasks/api.py | 2 ++ authentik/tasks/middleware.py | 27 +++++++++++++------ .../0003_task__previous_messages.py | 18 +++++++++++++ authentik/tasks/models.py | 1 + schema.yml | 5 ++++ web/src/admin/system-tasks/TaskList.ts | 3 +++ 6 files changed, 48 insertions(+), 8 deletions(-) create mode 100644 authentik/tasks/migrations/0003_task__previous_messages.py diff --git a/authentik/tasks/api.py b/authentik/tasks/api.py index 86b6eb19b1..27e7cc72e8 100644 --- a/authentik/tasks/api.py +++ b/authentik/tasks/api.py @@ -18,6 +18,7 @@ class TaskSerializer(ModelSerializer): rel_obj_model = ReadOnlyField(source="rel_obj_content_type.model") messages = LogEventSerializer(many=True, source="_messages") + previous_messages = LogEventSerializer(many=True, source="_previous_messages") class Meta: model = Task @@ -32,6 +33,7 @@ class TaskSerializer(ModelSerializer): "rel_obj_id", "uid", "messages", + "previous_messages", "aggregated_status", ] diff --git a/authentik/tasks/middleware.py b/authentik/tasks/middleware.py index 127b9d2b21..4f07271fcf 100644 --- a/authentik/tasks/middleware.py +++ b/authentik/tasks/middleware.py @@ -38,15 +38,26 @@ class LoggingMiddleware(Middleware): def after_enqueue(self, broker: Broker, message: Message, delay: int): task: Task = message.options["task"] task_created: bool = message.options["task_created"] - task._messages.append( - Task._make_message( - str(type(self)), - TaskStatus.INFO, - "Task is being queued" if task_created else "Task is being retried", - delay=delay, + if task_created: + task._messages.append( + Task._make_message( + str(type(self)), + TaskStatus.INFO, + "Task has been queued", + delay=delay, + ) ) - ) - task.save(update_fields=("_messages",)) + else: + task._previous_messages.extend(task._messages) + task._messages = [ + Task._make_message( + str(type(self)), + TaskStatus.INFO, + "Task will be retried", + delay=delay, + ) + ] + task.save(update_fields=("_messages", "_previous_messages")) def before_process_message(self, broker: Broker, message: Message): task: Task = message.options["task"] diff --git a/authentik/tasks/migrations/0003_task__previous_messages.py b/authentik/tasks/migrations/0003_task__previous_messages.py new file mode 100644 index 0000000000..75234a0075 --- /dev/null +++ b/authentik/tasks/migrations/0003_task__previous_messages.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.11 on 2025-06-24 13:57 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("authentik_tasks", "0002_alter_task_aggregated_status"), + ] + + operations = [ + migrations.AddField( + model_name="task", + name="_previous_messages", + field=models.JSONField(default=list), + ), + ] diff --git a/authentik/tasks/models.py b/authentik/tasks/models.py index 8b939754a0..d80a41590d 100644 --- a/authentik/tasks/models.py +++ b/authentik/tasks/models.py @@ -39,6 +39,7 @@ class Task(SerializerModel, TaskBase): _uid = models.TextField(blank=True, null=True) _messages = models.JSONField(default=list) + _previous_messages = models.JSONField(default=list) aggregated_status = models.TextField(choices=TaskStatus.choices) diff --git a/schema.yml b/schema.yml index f2aa42036c..7531f34c8d 100644 --- a/schema.yml +++ b/schema.yml @@ -60206,12 +60206,17 @@ components: type: array items: $ref: '#/components/schemas/LogEvent' + previous_messages: + type: array + items: + $ref: '#/components/schemas/LogEvent' aggregated_status: $ref: '#/components/schemas/AggregatedStatusEnum' required: - actor_name - aggregated_status - messages + - previous_messages - rel_obj_app_label - rel_obj_model - uid diff --git a/web/src/admin/system-tasks/TaskList.ts b/web/src/admin/system-tasks/TaskList.ts index 6d9a6967b2..6535a3b272 100644 --- a/web/src/admin/system-tasks/TaskList.ts +++ b/web/src/admin/system-tasks/TaskList.ts @@ -174,7 +174,10 @@ export class TaskList extends Table { return html`
+

Current execution logs

+

Previous executions logs

+
`;