serializers.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # coding:utf-8
  2. import datetime
  3. from rest_framework import serializers
  4. from utils.supervisord_utils import SupervisordUtils
  5. from drf_spectacular.utils import extend_schema_field
  6. from drf_spectacular.types import OpenApiTypes
  7. class ProcessListSerializer(serializers.Serializer):
  8. pid = serializers.IntegerField(help_text='进程id', default=1)
  9. name = serializers.CharField(help_text="进程名称", default="nginx")
  10. start_time = serializers.DateTimeField(help_text="启动时间", default="2020-03-06 20:54:00")
  11. state_name = serializers.CharField(label="运行状态", help_text="当运行状态不等于RUNNING时候,停止按钮设置为不可点击状态", default="RUNNING")
  12. description = serializers.CharField(help_text="描述信息", default="Exited too quickly (process log may have details)")
  13. def to_representation(self, instance):
  14. start_date = datetime.datetime.fromtimestamp(instance['start'])
  15. start_time = start_date.strftime('%Y-%m-%d %H:%M:%S')
  16. state_name = instance['statename']
  17. description = instance['description']
  18. pid = -1
  19. if state_name == 'RUNNING':
  20. pid = instance['pid']
  21. now = datetime.datetime.fromtimestamp(instance['now'])
  22. diff_date = now - start_date
  23. description = '已运行 ' + str(diff_date).replace('days', '天')
  24. return {
  25. "pid": pid,
  26. "name": instance['name'],
  27. "start_time": start_time,
  28. "state_name": instance['statename'],
  29. "description": description
  30. }
  31. class ProcessDetailDeleteSerializer(serializers.Serializer):
  32. name = serializers.CharField(required=True, help_text="进程名称", error_messages={
  33. 'required': '参数必须存在',
  34. 'blank': '进程名称不能为空',
  35. })
  36. def validate_name(self, value):
  37. if not SupervisordUtils().is_exists(value):
  38. raise serializers.ValidationError('{}进程不存在'.format(value))
  39. class ProcessDetailPutSerializer(ProcessDetailDeleteSerializer):
  40. action = serializers.CharField(label="操作方式", required=True, help_text="stop 表示停止,restart 表示重启")
  41. def validate_action(self, value):
  42. if value not in ['stop', 'restart']:
  43. raise serializers.ValidationError('仅支持stop或restart')