serializers.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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 SystemDetailSerializer(serializers.Serializer):
  8. cpu_rate = serializers.IntegerField(help_text='cpu使用率', default=0.0)
  9. disk_rate = serializers.IntegerField(help_text='磁盘使用率', default=0.0)
  10. memory_rate = serializers.IntegerField(help_text='内存使用率', default=0.0)
  11. disk_used = serializers.CharField(help_text="磁盘已使用", default="20G")
  12. disk_total = serializers.CharField(help_text=" 磁盘总数", default="100G")
  13. memory_used = serializers.CharField(help_text="内存已使用", default="3G")
  14. memory_total = serializers.CharField(help_text="内存总数", default="8G")
  15. def to_representation(self, instance):
  16. return {
  17. 'cpu_rate': instance['cpu_rate'],
  18. 'disk_rate': instance['disk_rate'],
  19. 'memory_rate': instance['memory_rate'],
  20. 'disk_used': instance['disk_used'],
  21. 'disk_total': instance['disk_total'],
  22. 'memory_used': instance['memory_used'],
  23. 'memory_total': instance['memory_total']
  24. }
  25. class ProcessListSerializer(serializers.Serializer):
  26. pid = serializers.IntegerField(help_text='进程id', default=1)
  27. name = serializers.CharField(help_text="进程名称", default="nginx")
  28. start_time = serializers.DateTimeField(help_text="启动时间", default="2020-03-06 20:54:00")
  29. state_name = serializers.CharField(label="运行状态", help_text="当运行状态不等于RUNNING时候,停止按钮设置为不可点击状态", default="RUNNING")
  30. description = serializers.CharField(help_text="描述信息", default="Exited too quickly (process log may have details)")
  31. def to_representation(self, instance):
  32. start_date = datetime.datetime.fromtimestamp(instance['start'])
  33. start_time = start_date.strftime('%Y-%m-%d %H:%M:%S')
  34. state_name = instance['statename']
  35. description = instance['description']
  36. pid = -1
  37. if state_name == 'RUNNING':
  38. pid = instance['pid']
  39. now = datetime.datetime.fromtimestamp(instance['now'])
  40. diff_date = now - start_date
  41. description = '已运行 ' + str(diff_date).replace('days', '天')
  42. return {
  43. "pid": pid,
  44. "name": instance['name'],
  45. "start_time": start_time,
  46. "state_name": instance['statename'],
  47. "description": description
  48. }
  49. class ProcessDetailDeleteSerializer(serializers.Serializer):
  50. name = serializers.CharField(required=True, help_text="进程名称", error_messages={
  51. 'required': '参数必须存在',
  52. 'blank': '进程名称不能为空',
  53. })
  54. def validate_name(self, value):
  55. if not SupervisordUtils().is_exists(value):
  56. raise serializers.ValidationError('{}进程不存在'.format(value))
  57. class ProcessDetailPutSerializer(ProcessDetailDeleteSerializer):
  58. action = serializers.CharField(label="操作方式", required=True, help_text="stop 表示停止,restart 表示重启")
  59. def validate_action(self, value):
  60. if value not in ['stop', 'restart']:
  61. raise serializers.ValidationError('仅支持stop或restart')