views.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. # coding:utf-8
  2. from rest_framework.response import Response
  3. from rest_framework.views import APIView
  4. from drf_spectacular.utils import extend_schema, OpenApiResponse, OpenApiParameter, OpenApiExample, OpenApiTypes
  5. from .serializers import ProcessListSerializer, ProcessDetailPutSerializer, ProcessDetailDeleteSerializer
  6. from monitor.pagination import CustomPagination
  7. from utils.supervisord_utils import SupervisordUtils
  8. from monitor.permissions import LoginPermission
  9. class ProcessListView(APIView):
  10. permission_classes = [LoginPermission]
  11. @extend_schema(
  12. parameters=[
  13. OpenApiParameter(
  14. name='page',
  15. type=OpenApiTypes.STR,
  16. location=OpenApiParameter.QUERY,
  17. description='页码,第几页',
  18. ),
  19. OpenApiParameter(
  20. name='size',
  21. type=OpenApiTypes.STR,
  22. location=OpenApiParameter.QUERY,
  23. description='每页条目数',
  24. ),
  25. OpenApiParameter(
  26. name='name',
  27. type=OpenApiTypes.STR,
  28. location=OpenApiParameter.QUERY,
  29. description='进程名称',
  30. ),
  31. ],
  32. description="获取监控列表接口",
  33. request=None,
  34. responses=ProcessListSerializer
  35. )
  36. def get(self, request):
  37. name = request.query_params.get('name', '').strip()
  38. data_list = SupervisordUtils().list(name)
  39. page = CustomPagination()
  40. queryset = page.paginate_queryset(data_list, request=request, view=self)
  41. serobj = ProcessListSerializer(queryset, many=True)
  42. return page.get_paginated_response(serobj.data)
  43. class ProcessDetailView(APIView):
  44. permission_classes = [LoginPermission]
  45. @extend_schema(
  46. description="停止/重启进程接口",
  47. request=ProcessDetailPutSerializer,
  48. responses={
  49. 200: OpenApiResponse(description="无返回值")
  50. }
  51. )
  52. def post(self, request, *args, **kwargs):
  53. serobj = ProcessDetailPutSerializer(data=request.data)
  54. if not serobj.is_valid():
  55. return Response(serobj.errors, status=400)
  56. action = request.data['action']
  57. name = request.data['name']
  58. sup = SupervisordUtils()
  59. if action == 'restart':
  60. sup.restart(name)
  61. else:
  62. sup.stop(name)
  63. return Response(status=200)
  64. class ProcessDeleteView(APIView):
  65. permission_classes = [LoginPermission]
  66. @extend_schema(
  67. description="删除进程进程接口",
  68. request=ProcessDetailDeleteSerializer,
  69. responses={
  70. 200: OpenApiResponse(description="无返回值")
  71. }
  72. )
  73. def post(self, request, *args, **kwargs):
  74. serobj = ProcessDetailDeleteSerializer(data=request.data)
  75. if not serobj.is_valid():
  76. return Response(serobj.errors, status=400)
  77. name = request.data['name']
  78. sup = SupervisordUtils()
  79. sup.remove(name)
  80. return Response(status=200)