mirror of https://github.com/jumpserver/jumpserver
[Update] 完善 作业中心/任务列表 (#4105)
parent
5bea782b9f
commit
c5a9a85818
|
@ -4,14 +4,17 @@
|
|||
from django.shortcuts import get_object_or_404
|
||||
from rest_framework import viewsets, generics
|
||||
from rest_framework.views import Response
|
||||
from django.db.models import Count, Q
|
||||
|
||||
from common.permissions import IsOrgAdmin
|
||||
from common.serializers import CeleryTaskSerializer
|
||||
from orgs.utils import current_org
|
||||
from ..models import Task, AdHoc, AdHocExecution
|
||||
from ..serializers import TaskSerializer, AdHocSerializer, \
|
||||
AdHocExecutionSerializer, TaskDetailSerializer
|
||||
from ..serializers import (
|
||||
TaskSerializer,
|
||||
AdHocSerializer,
|
||||
AdHocExecutionSerializer,
|
||||
TaskDetailSerializer,
|
||||
AdHocDetailSerializer,
|
||||
)
|
||||
from ..tasks import run_ansible_task
|
||||
|
||||
__all__ = [
|
||||
|
@ -53,6 +56,11 @@ class AdHocViewSet(viewsets.ModelViewSet):
|
|||
serializer_class = AdHocSerializer
|
||||
permission_classes = (IsOrgAdmin,)
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.action == 'retrieve':
|
||||
return AdHocDetailSerializer
|
||||
return super().get_serializer_class()
|
||||
|
||||
def get_queryset(self):
|
||||
task_id = self.request.query_params.get('task')
|
||||
if task_id:
|
||||
|
|
|
@ -150,6 +150,10 @@ class AdHoc(OrgModelMixin):
|
|||
created_by = models.CharField(max_length=64, default='', blank=True, null=True, verbose_name=_('Create by'))
|
||||
date_created = models.DateTimeField(auto_now_add=True, db_index=True)
|
||||
|
||||
@lazyproperty
|
||||
def run_times(self):
|
||||
return self.execution.count()
|
||||
|
||||
@property
|
||||
def inventory(self):
|
||||
if self.become:
|
||||
|
|
|
@ -8,10 +8,16 @@ from ..models import Task, AdHoc, AdHocExecution, CommandExecution
|
|||
|
||||
class AdHocExecutionSerializer(serializers.ModelSerializer):
|
||||
stat = serializers.SerializerMethodField()
|
||||
last_success = serializers.ListField(source='success_hosts')
|
||||
last_failure = serializers.DictField(source='failed_hosts')
|
||||
|
||||
class Meta:
|
||||
model = AdHocExecution
|
||||
fields = '__all__'
|
||||
fields = [
|
||||
'id', 'task', 'task_display', 'hosts_amount', 'adhoc', 'date_start', 'stat',
|
||||
'date_finished', 'timedelta', 'is_finished', 'is_success', 'result', 'summary',
|
||||
'short_id', 'adhoc_short_id', 'last_success', 'last_failure'
|
||||
]
|
||||
|
||||
@staticmethod
|
||||
def get_task(obj):
|
||||
|
@ -28,17 +34,15 @@ class AdHocExecutionSerializer(serializers.ModelSerializer):
|
|||
"failed": count_failed_hosts
|
||||
}
|
||||
|
||||
def get_field_names(self, declared_fields, info):
|
||||
fields = super().get_field_names(declared_fields, info)
|
||||
fields.extend(['short_id', 'adhoc_short_id'])
|
||||
return fields
|
||||
|
||||
|
||||
class AdHocExecutionExcludeResultSerializer(AdHocExecutionSerializer):
|
||||
def get_field_names(self, declared_fields, info):
|
||||
fields = super().get_field_names(declared_fields, info)
|
||||
fields = [i for i in fields if i not in ['result', 'summary']]
|
||||
return fields
|
||||
class Meta:
|
||||
model = AdHocExecution
|
||||
fields = [
|
||||
'id', 'task', 'task_display', 'hosts_amount', 'adhoc', 'date_start', 'stat',
|
||||
'date_finished', 'timedelta', 'is_finished', 'is_success',
|
||||
'short_id', 'adhoc_short_id', 'last_success', 'last_failure'
|
||||
]
|
||||
|
||||
|
||||
class TaskSerializer(serializers.ModelSerializer):
|
||||
|
@ -60,15 +64,15 @@ class TaskSerializer(serializers.ModelSerializer):
|
|||
|
||||
|
||||
class TaskDetailSerializer(TaskSerializer):
|
||||
last_success = serializers.ListField(source='latest_execution.success_hosts')
|
||||
last_failure = serializers.DictField(source='latest_execution.failed_hosts')
|
||||
contents = serializers.ListField(source='latest_adhoc.tasks')
|
||||
|
||||
class Meta(TaskSerializer.Meta):
|
||||
fields = TaskSerializer.Meta.fields + ['last_success', 'last_failure']
|
||||
fields = TaskSerializer.Meta.fields + ['contents']
|
||||
|
||||
|
||||
class AdHocSerializer(serializers.ModelSerializer):
|
||||
become_display = serializers.ReadOnlyField()
|
||||
tasks = serializers.ListField()
|
||||
|
||||
class Meta:
|
||||
model = AdHoc
|
||||
|
@ -86,6 +90,29 @@ class AdHocSerializer(serializers.ModelSerializer):
|
|||
}
|
||||
|
||||
|
||||
class AdHocExecutionNestSerializer(serializers.ModelSerializer):
|
||||
last_success = serializers.ListField(source='success_hosts')
|
||||
last_failure = serializers.DictField(source='failed_hosts')
|
||||
last_run = serializers.CharField(source='short_id')
|
||||
|
||||
class Meta:
|
||||
model = AdHocExecution
|
||||
fields = (
|
||||
'last_success', 'last_failure', 'last_run', 'timedelta', 'is_finished',
|
||||
'is_success'
|
||||
)
|
||||
|
||||
|
||||
class AdHocDetailSerializer(AdHocSerializer):
|
||||
latest_execution = AdHocExecutionNestSerializer(allow_null=True)
|
||||
task_name = serializers.CharField(source='task.name')
|
||||
|
||||
class Meta(AdHocSerializer.Meta):
|
||||
fields = AdHocSerializer.Meta.fields + [
|
||||
'latest_execution', 'created_by', 'run_times', 'task_name'
|
||||
]
|
||||
|
||||
|
||||
class CommandExecutionSerializer(serializers.ModelSerializer):
|
||||
result = serializers.JSONField(read_only=True)
|
||||
log_url = serializers.SerializerMethodField()
|
||||
|
|
Loading…
Reference in New Issue