admin: include task duration in API (#4428)
include task duration in API Signed-off-by: Jens Langhammer <jens@goauthentik.io> Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
		| @ -7,7 +7,13 @@ from django.utils.translation import gettext_lazy as _ | |||||||
| from drf_spectacular.types import OpenApiTypes | from drf_spectacular.types import OpenApiTypes | ||||||
| from drf_spectacular.utils import OpenApiParameter, OpenApiResponse, extend_schema | from drf_spectacular.utils import OpenApiParameter, OpenApiResponse, extend_schema | ||||||
| from rest_framework.decorators import action | from rest_framework.decorators import action | ||||||
| from rest_framework.fields import CharField, ChoiceField, DateTimeField, ListField | from rest_framework.fields import ( | ||||||
|  |     CharField, | ||||||
|  |     ChoiceField, | ||||||
|  |     DateTimeField, | ||||||
|  |     ListField, | ||||||
|  |     SerializerMethodField, | ||||||
|  | ) | ||||||
| from rest_framework.permissions import IsAdminUser | from rest_framework.permissions import IsAdminUser | ||||||
| from rest_framework.request import Request | from rest_framework.request import Request | ||||||
| from rest_framework.response import Response | from rest_framework.response import Response | ||||||
| @ -26,6 +32,7 @@ class TaskSerializer(PassiveSerializer): | |||||||
|     task_name = CharField() |     task_name = CharField() | ||||||
|     task_description = CharField() |     task_description = CharField() | ||||||
|     task_finish_timestamp = DateTimeField(source="finish_time") |     task_finish_timestamp = DateTimeField(source="finish_time") | ||||||
|  |     task_duration = SerializerMethodField() | ||||||
|  |  | ||||||
|     status = ChoiceField( |     status = ChoiceField( | ||||||
|         source="result.status.name", |         source="result.status.name", | ||||||
| @ -33,7 +40,11 @@ class TaskSerializer(PassiveSerializer): | |||||||
|     ) |     ) | ||||||
|     messages = ListField(source="result.messages") |     messages = ListField(source="result.messages") | ||||||
|  |  | ||||||
|     def to_representation(self, instance): |     def get_task_duration(self, instance: TaskInfo) -> int: | ||||||
|  |         """Get the duration a task took to run""" | ||||||
|  |         return max(instance.finish_timestamp - instance.start_timestamp, 0) | ||||||
|  |  | ||||||
|  |     def to_representation(self, instance: TaskInfo): | ||||||
|         """When a new version of authentik adds fields to TaskInfo, |         """When a new version of authentik adds fields to TaskInfo, | ||||||
|         the API will fail with an AttributeError, as the classes |         the API will fail with an AttributeError, as the classes | ||||||
|         are pickled in cache. In that case, just delete the info""" |         are pickled in cache. In that case, just delete the info""" | ||||||
|  | |||||||
| @ -37157,6 +37157,9 @@ components: | |||||||
|         task_finish_timestamp: |         task_finish_timestamp: | ||||||
|           type: string |           type: string | ||||||
|           format: date-time |           format: date-time | ||||||
|  |         task_duration: | ||||||
|  |           type: integer | ||||||
|  |           readOnly: true | ||||||
|         status: |         status: | ||||||
|           $ref: '#/components/schemas/TaskStatusEnum' |           $ref: '#/components/schemas/TaskStatusEnum' | ||||||
|         messages: |         messages: | ||||||
| @ -37166,6 +37169,7 @@ components: | |||||||
|       - messages |       - messages | ||||||
|       - status |       - status | ||||||
|       - task_description |       - task_description | ||||||
|  |       - task_duration | ||||||
|       - task_finish_timestamp |       - task_finish_timestamp | ||||||
|       - task_name |       - task_name | ||||||
|     TaskStatusEnum: |     TaskStatusEnum: | ||||||
|  | |||||||
| @ -82,6 +82,16 @@ export class SystemTaskListPage extends TablePage<Task> { | |||||||
|         return html` <td role="cell" colspan="3"> |         return html` <td role="cell" colspan="3"> | ||||||
|                 <div class="pf-c-table__expandable-row-content"> |                 <div class="pf-c-table__expandable-row-content"> | ||||||
|                     <dl class="pf-c-description-list pf-m-horizontal"> |                     <dl class="pf-c-description-list pf-m-horizontal"> | ||||||
|  |                         <div class="pf-c-description-list__group"> | ||||||
|  |                             <dt class="pf-c-description-list__term"> | ||||||
|  |                                 <span class="pf-c-description-list__text">${t`Duration`}</span> | ||||||
|  |                             </dt> | ||||||
|  |                             <dd class="pf-c-description-list__description"> | ||||||
|  |                                 <div class="pf-c-description-list__text"> | ||||||
|  |                                     ${t`${Math.round(item.taskDuration)} seconds`} | ||||||
|  |                                 </div> | ||||||
|  |                             </dd> | ||||||
|  |                         </div> | ||||||
|                         <div class="pf-c-description-list__group"> |                         <div class="pf-c-description-list__group"> | ||||||
|                             <dt class="pf-c-description-list__term"> |                             <dt class="pf-c-description-list__term"> | ||||||
|                                 <span class="pf-c-description-list__text">${t`Messages`}</span> |                                 <span class="pf-c-description-list__text">${t`Messages`}</span> | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Jens L
					Jens L