improve ui

Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
This commit is contained in:
Marc 'risson' Schmitt
2025-04-04 17:40:04 +02:00
parent 8a073e8c60
commit a43a0f77fb
4 changed files with 39 additions and 13 deletions

View File

@ -6,12 +6,15 @@ from rest_framework.mixins import (
from rest_framework.viewsets import GenericViewSet from rest_framework.viewsets import GenericViewSet
from authentik.core.api.utils import ModelSerializer from authentik.core.api.utils import ModelSerializer
from authentik.events.logs import LogEventSerializer
from authentik.tasks.models import Task from authentik.tasks.models import Task
from authentik.tasks.schedules.models import Schedule from authentik.tasks.schedules.models import Schedule
from authentik.tenants.utils import get_current_tenant from authentik.tenants.utils import get_current_tenant
class TaskSerializer(ModelSerializer): class TaskSerializer(ModelSerializer):
messages = LogEventSerializer(many=True)
class Meta: class Meta:
model = Task model = Task
fields = [ fields = [
@ -22,6 +25,7 @@ class TaskSerializer(ModelSerializer):
"mtime", "mtime",
"schedule_uid", "schedule_uid",
"uid", "uid",
"messages",
] ]

View File

@ -57855,8 +57855,13 @@ components:
type: string type: string
uid: uid:
type: string type: string
messages:
type: array
items:
$ref: '#/components/schemas/LogEvent'
required: required:
- actor_name - actor_name
- messages
Tenant: Tenant:
type: object type: object
description: Tenant Serializer description: Tenant Serializer

View File

@ -1,9 +1,9 @@
import "@goauthentik/admin/policies/BoundPoliciesList";
import "@goauthentik/admin/providers/rac/EndpointForm";
import "@goauthentik/admin/rbac/ObjectPermissionModal"; import "@goauthentik/admin/rbac/ObjectPermissionModal";
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
import { getRelativeTime } from "@goauthentik/common/utils"; import { getRelativeTime } from "@goauthentik/common/utils";
import { PFColor } from "@goauthentik/elements/Label";
import "@goauthentik/elements/buttons/SpinnerButton"; import "@goauthentik/elements/buttons/SpinnerButton";
import "@goauthentik/elements/events/LogViewer";
import "@goauthentik/elements/forms/DeleteBulkForm"; import "@goauthentik/elements/forms/DeleteBulkForm";
import "@goauthentik/elements/forms/ModalForm"; import "@goauthentik/elements/forms/ModalForm";
import { PaginatedResponse, Table } from "@goauthentik/elements/table/Table"; 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 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") @customElement("ak-task-list")
export class TaskList extends Table<Task> { export class TaskList extends Table<Task> {
@ -48,13 +48,29 @@ export class TaskList extends Table<Task> {
columns(): TableColumn[] { columns(): TableColumn[] {
return [ return [
new TableColumn(msg("Task")), new TableColumn(msg("Task"), "actor_name"),
new TableColumn(msg("Queue")), new TableColumn(msg("Queue"), "queue_name"),
new TableColumn(msg("Last updated")), new TableColumn(msg("Last updated"), "mtime"),
new TableColumn(msg("State"), "state"),
new TableColumn(msg("Actions")), new TableColumn(msg("Actions")),
]; ];
} }
taskState(task: Task): TemplateResult {
switch (task.state) {
case TasksTasksListStateEnum.Queued:
return html`<ak-label color=${PFColor.Grey}>${msg("Waiting to run")}</ak-label>`;
case TasksTasksListStateEnum.Consumed:
return html`<ak-label color=${PFColor.Blue}>${msg("Running")}</ak-label>`;
case TasksTasksListStateEnum.Done:
return html`<ak-label color=${PFColor.Green}>${msg("Successful")}</ak-label>`;
case TasksTasksListStateEnum.Rejected:
return html`<ak-label color=${PFColor.Red}>${msg("Error")}</ak-label>`;
default:
return html`<ak-label color=${PFColor.Grey}>${msg("Unknown")}</ak-label>`;
}
}
row(item: Task): TemplateResult[] { row(item: Task): TemplateResult[] {
return [ return [
html`<div>${item.actorName}</div> html`<div>${item.actorName}</div>
@ -62,16 +78,16 @@ export class TaskList extends Table<Task> {
html`${item.queueName}`, html`${item.queueName}`,
html`<div>${getRelativeTime(item.mtime)}</div> html`<div>${getRelativeTime(item.mtime)}</div>
<small>${item.mtime.toLocaleString()}</small>`, <small>${item.mtime.toLocaleString()}</small>`,
this.taskState(item),
html``, html``,
]; ];
} }
renderExpanded(item: Task): TemplateResult { renderExpanded(item: Task): TemplateResult {
return html` <td></td> return html` <td role="cell" colspan="3">
<td role="cell" colspan="12">
<div class="pf-c-table__expandable-row-content"> <div class="pf-c-table__expandable-row-content">
<div class="pf-c-content"> <div class="pf-c-content">
<p>TODO: ${item.actorName}</p> <ak-log-viewer .logs=${item?.messages}></ak-log-viewer>
</div> </div>
</div> </div>
</td>`; </td>`;

View File

@ -13,6 +13,7 @@ export enum PFColor {
Green = "pf-m-green", Green = "pf-m-green",
Orange = "pf-m-orange", Orange = "pf-m-orange",
Red = "pf-m-red", Red = "pf-m-red",
Blue = "pf-m-blue",
Grey = "", Grey = "",
} }