diff --git a/authentik/tasks/api.py b/authentik/tasks/api.py index 9f462e3d20..ee716382a4 100644 --- a/authentik/tasks/api.py +++ b/authentik/tasks/api.py @@ -6,12 +6,15 @@ from rest_framework.mixins import ( from rest_framework.viewsets import GenericViewSet from authentik.core.api.utils import ModelSerializer +from authentik.events.logs import LogEventSerializer from authentik.tasks.models import Task from authentik.tasks.schedules.models import Schedule from authentik.tenants.utils import get_current_tenant class TaskSerializer(ModelSerializer): + messages = LogEventSerializer(many=True) + class Meta: model = Task fields = [ @@ -22,6 +25,7 @@ class TaskSerializer(ModelSerializer): "mtime", "schedule_uid", "uid", + "messages", ] diff --git a/schema.yml b/schema.yml index 5e7e5beb82..34c562cabd 100644 --- a/schema.yml +++ b/schema.yml @@ -57855,8 +57855,13 @@ components: type: string uid: type: string + messages: + type: array + items: + $ref: '#/components/schemas/LogEvent' required: - actor_name + - messages Tenant: type: object description: Tenant Serializer diff --git a/web/src/admin/system-tasks/TaskList.ts b/web/src/admin/system-tasks/TaskList.ts index 4a92e8ba51..222d9b3d50 100644 --- a/web/src/admin/system-tasks/TaskList.ts +++ b/web/src/admin/system-tasks/TaskList.ts @@ -1,9 +1,9 @@ -import "@goauthentik/admin/policies/BoundPoliciesList"; -import "@goauthentik/admin/providers/rac/EndpointForm"; import "@goauthentik/admin/rbac/ObjectPermissionModal"; import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import { getRelativeTime } from "@goauthentik/common/utils"; +import { PFColor } from "@goauthentik/elements/Label"; import "@goauthentik/elements/buttons/SpinnerButton"; +import "@goauthentik/elements/events/LogViewer"; import "@goauthentik/elements/forms/DeleteBulkForm"; import "@goauthentik/elements/forms/ModalForm"; import { PaginatedResponse, Table } from "@goauthentik/elements/table/Table"; @@ -16,7 +16,7 @@ import { customElement, property } from "lit/decorators.js"; import PFDescriptionList from "@patternfly/patternfly/components/DescriptionList/description-list.css"; -import { Schedule, Task, TasksApi } from "@goauthentik/api"; +import { Schedule, Task, TasksApi, TasksTasksListStateEnum } from "@goauthentik/api"; @customElement("ak-task-list") export class TaskList extends Table { @@ -48,13 +48,29 @@ export class TaskList extends Table { columns(): TableColumn[] { return [ - new TableColumn(msg("Task")), - new TableColumn(msg("Queue")), - new TableColumn(msg("Last updated")), + new TableColumn(msg("Task"), "actor_name"), + new TableColumn(msg("Queue"), "queue_name"), + new TableColumn(msg("Last updated"), "mtime"), + new TableColumn(msg("State"), "state"), new TableColumn(msg("Actions")), ]; } + taskState(task: Task): TemplateResult { + switch (task.state) { + case TasksTasksListStateEnum.Queued: + return html`${msg("Waiting to run")}`; + case TasksTasksListStateEnum.Consumed: + return html`${msg("Running")}`; + case TasksTasksListStateEnum.Done: + return html`${msg("Successful")}`; + case TasksTasksListStateEnum.Rejected: + return html`${msg("Error")}`; + default: + return html`${msg("Unknown")}`; + } + } + row(item: Task): TemplateResult[] { return [ html`
${item.actorName}
@@ -62,19 +78,19 @@ export class TaskList extends Table { html`${item.queueName}`, html`
${getRelativeTime(item.mtime)}
${item.mtime.toLocaleString()}`, + this.taskState(item), html``, ]; } renderExpanded(item: Task): TemplateResult { - return html` - -
-
-

TODO: ${item.actorName}

-
+ return html` +
+
+
- `; +
+ `; } } diff --git a/web/src/elements/Label.ts b/web/src/elements/Label.ts index 8aeffa8398..101c187702 100644 --- a/web/src/elements/Label.ts +++ b/web/src/elements/Label.ts @@ -13,6 +13,7 @@ export enum PFColor { Green = "pf-m-green", Orange = "pf-m-orange", Red = "pf-m-red", + Blue = "pf-m-blue", Grey = "", }