mirror of https://github.com/jumpserver/jumpserver
				
				
				
			
		
			
				
	
	
		
			137 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
# ~*~ coding: utf-8 ~*~
 | 
						|
from __future__ import unicode_literals
 | 
						|
from rest_framework import serializers
 | 
						|
from django.shortcuts import reverse
 | 
						|
 | 
						|
from orgs.mixins.serializers import BulkOrgResourceModelSerializer
 | 
						|
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 = [
 | 
						|
            '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):
 | 
						|
        return obj.task.id
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def get_stat(obj):
 | 
						|
        count_failed_hosts = len(obj.failed_hosts)
 | 
						|
        count_success_hosts = len(obj.success_hosts)
 | 
						|
        count_total = count_success_hosts + count_failed_hosts
 | 
						|
        return {
 | 
						|
            "total": count_total,
 | 
						|
            "success": count_success_hosts,
 | 
						|
            "failed": count_failed_hosts
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
class AdHocExecutionExcludeResultSerializer(AdHocExecutionSerializer):
 | 
						|
    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(BulkOrgResourceModelSerializer):
 | 
						|
    summary = serializers.ReadOnlyField(source='history_summary')
 | 
						|
    latest_execution = AdHocExecutionExcludeResultSerializer(read_only=True)
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = Task
 | 
						|
        fields = [
 | 
						|
            'id', 'name', 'interval', 'crontab', 'is_periodic',
 | 
						|
            'is_deleted', 'comment', 'date_created',
 | 
						|
            'date_updated', 'latest_execution', 'summary',
 | 
						|
        ]
 | 
						|
        read_only_fields = [
 | 
						|
            'is_deleted', 'date_created', 'date_updated',
 | 
						|
            'latest_adhoc', 'latest_execution', 'total_run_amount',
 | 
						|
            'success_run_amount', 'summary',
 | 
						|
        ]
 | 
						|
 | 
						|
 | 
						|
class TaskDetailSerializer(TaskSerializer):
 | 
						|
    contents = serializers.ListField(source='latest_adhoc.tasks')
 | 
						|
 | 
						|
    class Meta(TaskSerializer.Meta):
 | 
						|
        fields = TaskSerializer.Meta.fields + ['contents']
 | 
						|
 | 
						|
 | 
						|
class AdHocSerializer(serializers.ModelSerializer):
 | 
						|
    become_display = serializers.ReadOnlyField()
 | 
						|
    tasks = serializers.ListField()
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = AdHoc
 | 
						|
        fields = [
 | 
						|
            "id", "task", 'tasks', "pattern", "options",
 | 
						|
            "hosts", "run_as_admin", "run_as", "become",
 | 
						|
            "date_created", "short_id",
 | 
						|
            "become_display",
 | 
						|
        ]
 | 
						|
        read_only_fields = [
 | 
						|
            'date_created'
 | 
						|
        ]
 | 
						|
        extra_kwargs = {
 | 
						|
            "become": {'write_only': True}
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
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()
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = CommandExecution
 | 
						|
        fields = [
 | 
						|
            'id', 'hosts', 'run_as', 'command', 'result', 'log_url',
 | 
						|
            'is_finished', 'date_created', 'date_finished'
 | 
						|
        ]
 | 
						|
        read_only_fields = [
 | 
						|
            'result', 'is_finished', 'log_url', 'date_created',
 | 
						|
            'date_finished'
 | 
						|
        ]
 | 
						|
        ref_name = 'OpsCommandExecution'
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def get_log_url(obj):
 | 
						|
        return reverse('api-ops:celery-task-log', kwargs={'pk': obj.id})
 | 
						|
 |