| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- # coding:utf-8
- import datetime
- from rest_framework import serializers
- from utils.supervisord_utils import SupervisordUtils
- from drf_spectacular.utils import extend_schema_field
- from drf_spectacular.types import OpenApiTypes
- class ProcessListSerializer(serializers.Serializer):
- pid = serializers.IntegerField(help_text='进程id', default=1)
- name = serializers.CharField(help_text="进程名称", default="nginx")
- start_time = serializers.DateTimeField(help_text="启动时间", default="2020-03-06 20:54:00")
- state_name = serializers.CharField(label="运行状态", help_text="当运行状态不等于RUNNING时候,停止按钮设置为不可点击状态", default="RUNNING")
- description = serializers.CharField(help_text="描述信息", default="Exited too quickly (process log may have details)")
- def to_representation(self, instance):
- start_date = datetime.datetime.fromtimestamp(instance['start'])
- start_time = start_date.strftime('%Y-%m-%d %H:%M:%S')
- state_name = instance['statename']
- description = instance['description']
- pid = -1
- if state_name == 'RUNNING':
- pid = instance['pid']
- now = datetime.datetime.fromtimestamp(instance['now'])
- diff_date = now - start_date
- description = '已运行 ' + str(diff_date).replace('days', '天')
- return {
- "pid": pid,
- "name": instance['name'],
- "start_time": start_time,
- "state_name": instance['statename'],
- "description": description
- }
- class ProcessDetailDeleteSerializer(serializers.Serializer):
- name = serializers.CharField(required=True, help_text="进程名称", error_messages={
- 'required': '参数必须存在',
- 'blank': '进程名称不能为空',
- })
- def validate_name(self, value):
- if not SupervisordUtils().is_exists(value):
- raise serializers.ValidationError('{}进程不存在'.format(value))
- class ProcessDetailPutSerializer(ProcessDetailDeleteSerializer):
- action = serializers.CharField(label="操作方式", required=True, help_text="stop 表示停止,restart 表示重启")
- def validate_action(self, value):
- if value not in ['stop', 'restart']:
- raise serializers.ValidationError('仅支持stop或restart')
|