views.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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 put(self, request):
  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. @extend_schema(
  65. description="删除进程进程接口",
  66. request=ProcessDetailDeleteSerializer,
  67. responses={
  68. 200: OpenApiResponse(description="无返回值")
  69. }
  70. )
  71. def delete(self, request):
  72. serobj = ProcessDetailDeleteSerializer(data=request.data)
  73. if not serobj.is_valid():
  74. return Response(serobj.errors, status=400)
  75. name = request.data['name']
  76. sup = SupervisordUtils()
  77. sup.remove(name)
  78. return Response(status=200)