|
|
|
|
import datetime
|
|
|
|
|
import json
|
|
|
|
|
import logging
|
|
|
|
|
import random
|
|
|
|
|
|
|
|
|
|
from django.db.models import Count, F, Sum
|
|
|
|
|
from django.db.models.functions import ExtractMonth
|
|
|
|
|
from rest_framework.response import Response
|
|
|
|
|
from rest_framework.viewsets import ModelViewSet
|
|
|
|
|
|
|
|
|
|
from app import shortuuid, consts
|
|
|
|
|
from app.pagination import MyPageNumberPagination
|
|
|
|
|
from app.serializers import ServerSerializer, AlgModelSerializer, EnterpriseSerializer, EnterpriseDeviceSerializer, \
|
|
|
|
|
DeviceClassificationSerializer, WarningStatisticsSerializer, EnterpriseNodeSerializer, ComputeConfigSerializer, \
|
|
|
|
|
ModelVersionSerializer, EnterpriseAlertDeviceSerializer, ModelHubSerializer, EnterpriseBusiModelSerializer, \
|
|
|
|
|
EnterpriseBusiModelNodeSerializer, EnterpriseBusiModelNodeDeviceSerializer, ServerLogSerializer, \
|
|
|
|
|
ModelClassificationSerializer, FilesSerializer, MessageSerializer, WorkshopSerializer, WorkshopDeviceSerializer
|
|
|
|
|
from app.models import ServerModel, AlgModelModel, EnterpriseModel, EnterpriseDeviceModel, DeviceClassificationModel, \
|
|
|
|
|
WarningStatisticsModel, EnterpriseNodeModel, ComputeConfigModel, ModelVersionModel, EnterpriseAlertDeviceModel, \
|
|
|
|
|
ModelHubModel, EnterpriseBusiModelModel, EnterpriseBusiModelNodeModel, EnterpriseBusiModelNodeDeviceModel, \
|
|
|
|
|
ServerLogModel, ModelClassificationModel, FilesModel, MessageModel, WorkshopModel, WorkshopDeviceModel
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger('mylogger')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Create your views here.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EnterpriseModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = EnterpriseModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = EnterpriseSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
industry = data.get("industry")
|
|
|
|
|
|
|
|
|
|
# 新增
|
|
|
|
|
if not obj_id:
|
|
|
|
|
if not industry:
|
|
|
|
|
return Response({"msg": "缺少行业类型", "status": 400, "success": False, "data": None})
|
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
# 更新
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
if industry and industry not in consts.industry_map:
|
|
|
|
|
return Response({"msg": "行业类型错误", "status": 400, "success": False, "data": None})
|
|
|
|
|
try:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询企业对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
|
|
|
|
|
if not obj_id:
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EnterpriseAlertModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = EnterpriseAlertDeviceModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = EnterpriseAlertDeviceSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
node_id = data.get("node_id")
|
|
|
|
|
node_suid = data.get("node_suid") # 新增
|
|
|
|
|
if not (obj_id or node_suid or node_id):
|
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
# 更新
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
elif node_suid:
|
|
|
|
|
instance = self.queryset.filter(node_suid=node_suid).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(node_id=node_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
enterprise_suid = data.get("enterprise_suid")
|
|
|
|
|
node_id = data.get("node_id")
|
|
|
|
|
node_suid = data.get("node_suid")
|
|
|
|
|
|
|
|
|
|
status = data.get("status")
|
|
|
|
|
|
|
|
|
|
if status:
|
|
|
|
|
self.queryset = self.queryset.filter(status=status)
|
|
|
|
|
|
|
|
|
|
if enterprise_suid:
|
|
|
|
|
self.queryset = self.queryset.filter(enterprise_suid=enterprise_suid)
|
|
|
|
|
|
|
|
|
|
if not (obj_id or node_id or node_suid):
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
elif node_suid:
|
|
|
|
|
instance = self.queryset.filter(node_suid=node_suid).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(node_id=node_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ServerModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = ServerModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = ServerSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
# 新增
|
|
|
|
|
if not obj_id:
|
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
# 更新
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询设备对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
status = data.get("status")
|
|
|
|
|
|
|
|
|
|
online_count = 0
|
|
|
|
|
offline_count = 0
|
|
|
|
|
all_count_res = self.queryset.values("status").annotate(count=Count("id")).order_by("status")
|
|
|
|
|
for i in all_count_res:
|
|
|
|
|
if i["status"] == 1001:
|
|
|
|
|
online_count = i["count"]
|
|
|
|
|
else:
|
|
|
|
|
offline_count = i["count"]
|
|
|
|
|
|
|
|
|
|
all_count = online_count + offline_count
|
|
|
|
|
|
|
|
|
|
if status:
|
|
|
|
|
self.queryset = self.queryset.filter(status=status)
|
|
|
|
|
|
|
|
|
|
if not obj_id:
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"all_count": all_count,
|
|
|
|
|
"online_count": online_count,
|
|
|
|
|
"offline_count": offline_count,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询服务器对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ServerLogModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = ServerLogModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = ServerLogSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
# 新增
|
|
|
|
|
if not obj_id:
|
|
|
|
|
# 服务器id不存在时,查询后添加
|
|
|
|
|
if not data.get("server_id"):
|
|
|
|
|
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
|
|
|
|
|
if x_forwarded_for:
|
|
|
|
|
server_ip = x_forwarded_for.split(',')[0]
|
|
|
|
|
else:
|
|
|
|
|
server_ip = request.META.get('REMOTE_ADDR')
|
|
|
|
|
|
|
|
|
|
server_obj = ServerModel.objects.filter(server_ip=server_ip).last()
|
|
|
|
|
if server_obj:
|
|
|
|
|
data["server_id"] = server_obj.id
|
|
|
|
|
else:
|
|
|
|
|
return Response({"msg": "该服务器不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(data=data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
# 更新
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
server_id = data.get("server_id")
|
|
|
|
|
|
|
|
|
|
if server_id:
|
|
|
|
|
self.queryset = self.queryset.filter(server_id=server_id)
|
|
|
|
|
|
|
|
|
|
if not obj_id:
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询服务器对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AlgModelModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = AlgModelModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = AlgModelSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
# 新增
|
|
|
|
|
if not obj_id:
|
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
# 更新
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询设备对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
classification = data.get("classification")
|
|
|
|
|
model_type = data.get("model_type")
|
|
|
|
|
provider = data.get("provider")
|
|
|
|
|
default_version = data.get("default_version")
|
|
|
|
|
status = data.get("status")
|
|
|
|
|
|
|
|
|
|
if classification:
|
|
|
|
|
self.queryset = self.queryset.filter(classification=classification)
|
|
|
|
|
if model_type:
|
|
|
|
|
self.queryset = self.queryset.filter(model_type=model_type)
|
|
|
|
|
if status:
|
|
|
|
|
self.queryset = self.queryset.filter(status=status)
|
|
|
|
|
if provider:
|
|
|
|
|
self.queryset = self.queryset.filter(provider=provider)
|
|
|
|
|
if default_version:
|
|
|
|
|
self.queryset = self.queryset.filter(default_version=default_version)
|
|
|
|
|
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询模型对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ModelClassificationModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = ModelClassificationModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = ModelClassificationSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
# 新增
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
# 更新
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
|
|
|
|
|
# status = data.get("status")
|
|
|
|
|
#
|
|
|
|
|
# if status:
|
|
|
|
|
# self.queryset = self.queryset.filter(status=status)
|
|
|
|
|
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ModelVersionModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = ModelVersionModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = ModelVersionSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
# 新增
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
# 更新
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
model_id = data.get("model_id")
|
|
|
|
|
status = data.get("status")
|
|
|
|
|
|
|
|
|
|
if status:
|
|
|
|
|
self.queryset = self.queryset.filter(status=status)
|
|
|
|
|
if model_id:
|
|
|
|
|
self.queryset = self.queryset.filter(model_id=model_id)
|
|
|
|
|
|
|
|
|
|
if not obj_id:
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def set_default_version(self, request, *args, **kwargs):
|
|
|
|
|
version_id = request.data.get("version_id")
|
|
|
|
|
model_id = request.data.get("model_id")
|
|
|
|
|
if not version_id or not model_id:
|
|
|
|
|
return Response({"msg": "参数缺失", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
ModelVersionModel.objects.filter(model_id=model_id).update(is_default=0)
|
|
|
|
|
ModelVersionModel.objects.filter(id=version_id).update(is_default=1)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": None,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ModelHubModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = ModelHubModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = ModelHubSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
# 新增
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
# 更新
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EnterpriseDeviceModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = EnterpriseDeviceModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = EnterpriseDeviceSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
# 新增
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
# 更新
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询设备对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
|
|
|
|
|
classification = data.get("classification")
|
|
|
|
|
entity_id = data.get("entity_id")
|
|
|
|
|
entity_suid = data.get("entity_suid")
|
|
|
|
|
node_id = data.get("node_id")
|
|
|
|
|
node_suid = data.get("node_suid")
|
|
|
|
|
status = data.get("status")
|
|
|
|
|
is_used = data.get("is_used")
|
|
|
|
|
|
|
|
|
|
if classification:
|
|
|
|
|
self.queryset = self.queryset.filter(classification=classification)
|
|
|
|
|
if entity_id:
|
|
|
|
|
self.queryset = self.queryset.filter(entity_id=entity_id)
|
|
|
|
|
if entity_suid:
|
|
|
|
|
self.queryset = self.queryset.filter(entity_suid=entity_suid)
|
|
|
|
|
if node_id:
|
|
|
|
|
self.queryset = self.queryset.filter(node_id=node_id)
|
|
|
|
|
if node_suid:
|
|
|
|
|
self.queryset = self.queryset.filter(node_suid=node_suid)
|
|
|
|
|
if status:
|
|
|
|
|
self.queryset = self.queryset.filter(status=status)
|
|
|
|
|
if is_used:
|
|
|
|
|
self.queryset = self.queryset.filter(is_used=is_used)
|
|
|
|
|
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询服务器对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DeviceClassificationModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = DeviceClassificationModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = DeviceClassificationSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
# 新增
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
# 更新
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
name = data.get("name")
|
|
|
|
|
|
|
|
|
|
if name:
|
|
|
|
|
self.queryset = self.queryset.filter(name=name)
|
|
|
|
|
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WarningStatisticsModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = WarningStatisticsModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = WarningStatisticsSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
# 新增
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
# 更新
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
|
|
|
|
|
warning_level = data.get("warning_level")
|
|
|
|
|
warning_name = data.get("warning_name")
|
|
|
|
|
server_id = data.get("server_id")
|
|
|
|
|
server_suid = data.get("server_suid")
|
|
|
|
|
node_id = data.get("node_id")
|
|
|
|
|
node_suid = data.get("node_suid")
|
|
|
|
|
device_id = data.get("device_id")
|
|
|
|
|
device_suid = data.get("device_suid")
|
|
|
|
|
warning_type = data.get("warning_type")
|
|
|
|
|
start_trigger_time = data.get("start_time")
|
|
|
|
|
# end_trigger_time = data.get("end_time")
|
|
|
|
|
|
|
|
|
|
if warning_level:
|
|
|
|
|
self.queryset = self.queryset.filter(warning_level=warning_level)
|
|
|
|
|
|
|
|
|
|
if warning_name:
|
|
|
|
|
self.queryset = self.queryset.filter(warning_name=warning_name)
|
|
|
|
|
|
|
|
|
|
if server_id:
|
|
|
|
|
self.queryset = self.queryset.filter(server_id=server_id)
|
|
|
|
|
|
|
|
|
|
if server_suid:
|
|
|
|
|
self.queryset = self.queryset.filter(server_suid=server_suid)
|
|
|
|
|
|
|
|
|
|
if node_id:
|
|
|
|
|
self.queryset = self.queryset.filter(node_id=node_id)
|
|
|
|
|
|
|
|
|
|
if node_suid:
|
|
|
|
|
self.queryset = self.queryset.filter(node_suid=node_suid)
|
|
|
|
|
|
|
|
|
|
if device_id:
|
|
|
|
|
self.queryset = self.queryset.filter(device_id=device_id)
|
|
|
|
|
|
|
|
|
|
if device_suid:
|
|
|
|
|
self.queryset = self.queryset.filter(device_suid=device_suid)
|
|
|
|
|
|
|
|
|
|
if warning_type:
|
|
|
|
|
self.queryset = self.queryset.filter(warning_type=warning_type)
|
|
|
|
|
|
|
|
|
|
if start_trigger_time:
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
start_datetime = datetime.datetime.strptime(start_trigger_time, "%Y-%m-%d")
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询告警时间格式报错{e},参数为:{start_trigger_time}")
|
|
|
|
|
return Response({"data": None, "msg": "时间格式不正确", "success": False, "status": 400})
|
|
|
|
|
|
|
|
|
|
end_datetime = start_datetime + datetime.timedelta(days=1)
|
|
|
|
|
|
|
|
|
|
self.queryset = self.queryset.filter(trigger_time__range=[start_datetime, end_datetime])
|
|
|
|
|
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def get_warning_names(self, request, *args, **kwargs):
|
|
|
|
|
warning_names = self.queryset.values_list("warning_name", flat=True).order_by("warning_name").distinct()
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": warning_names,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def get_warning_types(self, request, *args, **kwargs):
|
|
|
|
|
warning_types = self.queryset.values_list('warning_type', flat=True).order_by("warning_type").distinct()
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": warning_types,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EnterpriseNodeModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = EnterpriseNodeModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = EnterpriseNodeSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
# 新增
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
# 更新
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
|
|
|
|
|
entity_suid = data.get("entity_suid")
|
|
|
|
|
name = data.get("name")
|
|
|
|
|
parent = data.get("parent")
|
|
|
|
|
status = data.get("status")
|
|
|
|
|
|
|
|
|
|
children = data.get("children")
|
|
|
|
|
|
|
|
|
|
if entity_suid:
|
|
|
|
|
self.queryset = self.queryset.filter(entity_suid=entity_suid)
|
|
|
|
|
|
|
|
|
|
if name:
|
|
|
|
|
self.queryset = self.queryset.filter(name=name)
|
|
|
|
|
|
|
|
|
|
if parent:
|
|
|
|
|
self.queryset = self.queryset.filter(parent=parent)
|
|
|
|
|
|
|
|
|
|
if status:
|
|
|
|
|
self.queryset = self.queryset.filter(status=status)
|
|
|
|
|
|
|
|
|
|
if children and not obj_id:
|
|
|
|
|
self.queryset = self.queryset.filter(parent=None)
|
|
|
|
|
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
queryset = self.filter_queryset(self.get_queryset())
|
|
|
|
|
|
|
|
|
|
page = self.paginate_queryset(queryset)
|
|
|
|
|
if page is not None:
|
|
|
|
|
serializer = self.get_serializer(page, many=True)
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(queryset, many=True)
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data_with_children if children else serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data_with_children if children else serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EnterpriseBusiModelModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = EnterpriseBusiModelModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = EnterpriseBusiModelSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
|
|
|
|
|
model_node_data = {
|
|
|
|
|
"entity_id": data.get("entity_id"),
|
|
|
|
|
"busimodel_id": None,
|
|
|
|
|
"busimodel_suid": None,
|
|
|
|
|
"node_ids": data.get("link_node_ids")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 新增
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
|
|
|
|
|
model_node_data["busimodel_id"] = serializer.data.get("id")
|
|
|
|
|
model_node_data["busimodel_suid"] = serializer.data.get("suid")
|
|
|
|
|
self.insert_model_node(model_node_data)
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
# 更新
|
|
|
|
|
else:
|
|
|
|
|
# 删除前判断是否关联设备,否则删除相关节点
|
|
|
|
|
if data.get("status"):
|
|
|
|
|
flag = EnterpriseBusiModelNodeDeviceModel.objects.filter(busi_model_id=obj_id).all()
|
|
|
|
|
if flag:
|
|
|
|
|
return Response(
|
|
|
|
|
{"msg": "该业务模型已关联设备,无法删除", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
model_node_data["busimodel_id"] = serializer.data.get("id")
|
|
|
|
|
model_node_data["busimodel_suid"] = serializer.data.get("suid")
|
|
|
|
|
self.insert_model_node(model_node_data, "update")
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def insert_model_node(self, data, mode="create"):
|
|
|
|
|
# 删除关联节点
|
|
|
|
|
if mode == "update":
|
|
|
|
|
EnterpriseBusiModelNodeModel.objects.filter(busi_model_id=data.get("busimodel_id")).all().delete()
|
|
|
|
|
|
|
|
|
|
link_node_ids = [int(node_id) for node_id in data['node_ids'].split(',')]
|
|
|
|
|
|
|
|
|
|
model_node_data_list = []
|
|
|
|
|
for node_id in link_node_ids:
|
|
|
|
|
logging.info("node_id: %s")
|
|
|
|
|
node_obj = EnterpriseNodeModel.objects.filter(id=node_id).get()
|
|
|
|
|
|
|
|
|
|
node_suid = node_obj.suid
|
|
|
|
|
entity_suid = node_obj.entity_suid
|
|
|
|
|
model_node_data = {
|
|
|
|
|
"suid": shortuuid.ShortUUID().random(10),
|
|
|
|
|
"entity_suid": entity_suid,
|
|
|
|
|
"busi_model_id": data['busimodel_id'],
|
|
|
|
|
"busi_model_suid": data['busimodel_suid'],
|
|
|
|
|
"node_id": node_id,
|
|
|
|
|
"node_suid": node_suid,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
model_node_data_list.append(model_node_data)
|
|
|
|
|
|
|
|
|
|
if model_node_data_list:
|
|
|
|
|
serializer = EnterpriseBusiModelNodeSerializer(data=model_node_data_list, many=True)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
serializer.save()
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
|
|
|
|
|
entity_suid = data.get("entity_suid")
|
|
|
|
|
name = data.get("name")
|
|
|
|
|
status = data.get("status")
|
|
|
|
|
|
|
|
|
|
if entity_suid:
|
|
|
|
|
self.queryset = self.queryset.filter(entity_suid=entity_suid)
|
|
|
|
|
if name:
|
|
|
|
|
self.queryset = self.queryset.filter(name=name)
|
|
|
|
|
|
|
|
|
|
if status:
|
|
|
|
|
self.queryset = self.queryset.filter(status=status)
|
|
|
|
|
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EnterpriseBusiModelNodeDeviceModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = EnterpriseBusiModelNodeDeviceModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = EnterpriseBusiModelNodeDeviceSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
|
|
|
|
|
node_id = data.get("node_id")
|
|
|
|
|
busi_model_id = data.get("busi_model_id")
|
|
|
|
|
device_ids = data.get("device_ids", "")
|
|
|
|
|
|
|
|
|
|
if not (node_id and busi_model_id):
|
|
|
|
|
return Response({"msg": "参数错误", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
if not device_ids:
|
|
|
|
|
return Response({"msg": "设备不能为空", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
# 新增
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
# serializer = self.get_serializer(data=request.data)
|
|
|
|
|
# serializer.is_valid(raise_exception=True)
|
|
|
|
|
# self.perform_create(serializer)
|
|
|
|
|
|
|
|
|
|
flag, serializer = self.insert_model_node_device(node_id, busi_model_id, device_ids)
|
|
|
|
|
|
|
|
|
|
if not flag:
|
|
|
|
|
return Response({"msg": serializer, "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
# 更新
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def deal_with_compute(self, node_id, busi_model_id):
|
|
|
|
|
all_compute_objs = ComputeConfigModel.objects.all()
|
|
|
|
|
percentage = 0
|
|
|
|
|
for i in all_compute_objs:
|
|
|
|
|
percentage += i.percentage
|
|
|
|
|
|
|
|
|
|
if percentage < 0.5:
|
|
|
|
|
data = {
|
|
|
|
|
"node_id": node_id,
|
|
|
|
|
"model_id": busi_model_id,
|
|
|
|
|
"percentage": 0.1,
|
|
|
|
|
"efficiency": "20帧/秒"
|
|
|
|
|
}
|
|
|
|
|
else:
|
|
|
|
|
data = {
|
|
|
|
|
"node_id": node_id,
|
|
|
|
|
"model_id": busi_model_id,
|
|
|
|
|
"percentage": (1 - percentage) * 0.5,
|
|
|
|
|
"efficiency": "20帧/秒"
|
|
|
|
|
}
|
|
|
|
|
ComputeConfigModel.objects.create(**data)
|
|
|
|
|
|
|
|
|
|
def insert_model_node_device(self, node_id, busi_model_id, device_ids, mode="create"):
|
|
|
|
|
|
|
|
|
|
if mode == "update":
|
|
|
|
|
EnterpriseBusiModelNodeDeviceModel.objects.filter(node_id=node_id,
|
|
|
|
|
busi_model_id=busi_model_id).all().delete()
|
|
|
|
|
ComputeConfigModel.objects.filter(node_id=node_id, model_id=busi_model_id).all().delete()
|
|
|
|
|
|
|
|
|
|
# node = EnterpriseNodeModel.objects.filter(id=node_id).last()
|
|
|
|
|
#
|
|
|
|
|
# if not node:
|
|
|
|
|
# return False, "节点不存在"
|
|
|
|
|
|
|
|
|
|
entity_suid_row = EnterpriseNodeModel.objects.filter(id=node_id).last()
|
|
|
|
|
if not entity_suid_row:
|
|
|
|
|
return False, "节点不存在"
|
|
|
|
|
|
|
|
|
|
node_suid = entity_suid_row.suid
|
|
|
|
|
|
|
|
|
|
busi_model = EnterpriseBusiModelModel.objects.filter(id=busi_model_id).last()
|
|
|
|
|
if not busi_model:
|
|
|
|
|
return False, "企业模型不存在"
|
|
|
|
|
|
|
|
|
|
busi_model_suid = busi_model.suid
|
|
|
|
|
|
|
|
|
|
records = []
|
|
|
|
|
for device_id in device_ids.split(","):
|
|
|
|
|
device = EnterpriseDeviceModel.objects.filter(id=int(device_id)).last()
|
|
|
|
|
if not device:
|
|
|
|
|
return False, f"设备{device_id}不存在"
|
|
|
|
|
|
|
|
|
|
records.append(
|
|
|
|
|
{
|
|
|
|
|
"suid": shortuuid.ShortUUID().random(length=10),
|
|
|
|
|
"entity_suid": entity_suid_row.entity_suid,
|
|
|
|
|
"node_id": node_id,
|
|
|
|
|
"node_suid": node_suid,
|
|
|
|
|
"busi_model_id": busi_model_id,
|
|
|
|
|
"busi_model_suid": busi_model_suid,
|
|
|
|
|
"device_id": int(device_id),
|
|
|
|
|
"device_suid": device.suid,
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
serializer = EnterpriseBusiModelNodeDeviceSerializer(data=records, many=True)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
serializer.save()
|
|
|
|
|
|
|
|
|
|
self.deal_with_compute(node_id, busi_model_id)
|
|
|
|
|
|
|
|
|
|
return True, serializer
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
|
|
|
|
|
node_id = data.get("node_id")
|
|
|
|
|
busi_model_id = data.get("busi_model_id")
|
|
|
|
|
|
|
|
|
|
if not (obj_id or obj_suid or node_id or busi_model_id):
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
|
|
if not node_id or not busi_model_id:
|
|
|
|
|
return Response({"msg": "参数错误", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
busi_model = EnterpriseBusiModelModel.objects.filter(id=busi_model_id).last()
|
|
|
|
|
if not busi_model:
|
|
|
|
|
return Response({"msg": "企业模型不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
busi_model_name = busi_model.name
|
|
|
|
|
busi_model_comment = busi_model.comment
|
|
|
|
|
base_models = json.loads(busi_model.base_models)
|
|
|
|
|
base_model_names = ",".join([base_model["name"] for base_model in base_models])
|
|
|
|
|
|
|
|
|
|
device_ids = self.queryset.filter(node_id=node_id, busi_model_id=busi_model_id).all().values("device_id")
|
|
|
|
|
device_ids = list(set([item["device_id"] for item in device_ids]))
|
|
|
|
|
devices = EnterpriseDeviceModel.objects.filter(id__in=device_ids, status=0).all()
|
|
|
|
|
|
|
|
|
|
devices_return = [
|
|
|
|
|
{"device_id": item.id, "device_name": item.name} for item in devices
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": {
|
|
|
|
|
"busi_model_name": busi_model_name,
|
|
|
|
|
"busi_model_comment": busi_model_comment,
|
|
|
|
|
"base_models": base_model_names,
|
|
|
|
|
"devices": devices_return,
|
|
|
|
|
},
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ComputeConfigModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = ComputeConfigModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = ComputeConfigSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
obj_suid = data.get("suid")
|
|
|
|
|
# 新增
|
|
|
|
|
if not (obj_id or obj_suid):
|
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
# 更新
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(suid=obj_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
|
|
|
|
|
flag = data.get("flag", True)
|
|
|
|
|
|
|
|
|
|
if flag:
|
|
|
|
|
data = [
|
|
|
|
|
{
|
|
|
|
|
"type": 1,
|
|
|
|
|
"proportion": 7,
|
|
|
|
|
"pretreatmentEfficiency": 20,
|
|
|
|
|
"color": "#014BE6",
|
|
|
|
|
"bgColor": "linear-gradient(180deg, #015DE6 0%, #4881F6 100%)"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": 2,
|
|
|
|
|
"proportion": 8,
|
|
|
|
|
"pretreatmentEfficiency": 20,
|
|
|
|
|
"color": "#FAA90B",
|
|
|
|
|
"bgColor": "linear-gradient(180deg, #E64601 0%, #F6A648 100%)"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": 3,
|
|
|
|
|
"proportion": 4,
|
|
|
|
|
"pretreatmentEfficiency": 15,
|
|
|
|
|
"color": "#EA1281",
|
|
|
|
|
"bgColor": "linear-gradient(180deg, #E60161 0%, #F648E5 100%)"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": 4,
|
|
|
|
|
"proportion": 7,
|
|
|
|
|
"pretreatmentEfficiency": 20,
|
|
|
|
|
"color": "#FA8616",
|
|
|
|
|
"bgColor": "linear-gradient(180deg, #FA8316 0%, #FAAD16 100%)"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": 5,
|
|
|
|
|
"proportion": 32,
|
|
|
|
|
"pretreatmentEfficiency": 38,
|
|
|
|
|
"color": "#F9DB18",
|
|
|
|
|
"bgColor": "linear-gradient(180deg, #FFC56F 0%, #F9E006 100%)"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": 6,
|
|
|
|
|
"proportion": 8,
|
|
|
|
|
"pretreatmentEfficiency": 38,
|
|
|
|
|
"color": "#1CCCFA",
|
|
|
|
|
"bgColor": "linear-gradient(180deg, #6FFFFF 0%, #06BEF9 100%)"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": 7,
|
|
|
|
|
"proportion": 12,
|
|
|
|
|
"pretreatmentEfficiency": 38,
|
|
|
|
|
"color": "#9E26EE",
|
|
|
|
|
"bgColor": "linear-gradient(180deg, #FF2494 0%, #8D27FF 100%)"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": 8,
|
|
|
|
|
"proportion": 7,
|
|
|
|
|
"pretreatmentEfficiency": 38,
|
|
|
|
|
"color": "#6F50F6",
|
|
|
|
|
"bgColor": "linear-gradient(180deg, #6B55F6 0%, #8C38F8 100%)"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": 9,
|
|
|
|
|
"proportion": 5,
|
|
|
|
|
"pretreatmentEfficiency": 38,
|
|
|
|
|
"color": "#24ED75",
|
|
|
|
|
"bgColor": "linear-gradient(180deg, #43EA80 0%, #38F8D4 100%)"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
results = []
|
|
|
|
|
all_data = super().list(request, *args, **kwargs).data.get("results")
|
|
|
|
|
|
|
|
|
|
total_per = 0
|
|
|
|
|
for l, single in enumerate(all_data):
|
|
|
|
|
total_per += float(single.get("percentage").strip("%"))
|
|
|
|
|
|
|
|
|
|
tmp = data[(l + 1) % 9]
|
|
|
|
|
tmp["name"] = single.get("name")
|
|
|
|
|
tmp["proportion"] = eval(single.get("percentage").strip("%"))
|
|
|
|
|
tmp["pretreatmentEfficiency"] = single.get("efficiency")
|
|
|
|
|
results.append(
|
|
|
|
|
tmp
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
results.append(
|
|
|
|
|
{
|
|
|
|
|
"name": "空闲算力",
|
|
|
|
|
"type": 0,
|
|
|
|
|
"proportion": (100 - total_per) if (100 - total_per) > 0 else 0,
|
|
|
|
|
"pretreatmentEfficiency": 0,
|
|
|
|
|
"color": "#DCDCDC",
|
|
|
|
|
"bgColor": "linear-gradient(90deg, #7B7979 0%, #C1C1C1 100%)"
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": results,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
|
|
|
|
|
status = data.get("status")
|
|
|
|
|
|
|
|
|
|
server_id = data.get("server_id")
|
|
|
|
|
server_suid = data.get("server_suid")
|
|
|
|
|
node_id = data.get("node_id")
|
|
|
|
|
node_suid = data.get("node_suid")
|
|
|
|
|
device_id = data.get("device_id")
|
|
|
|
|
device_suid = data.get("device_suid")
|
|
|
|
|
model_id = data.get("model_id")
|
|
|
|
|
model_suid = data.get("model_suid")
|
|
|
|
|
|
|
|
|
|
if server_id:
|
|
|
|
|
self.queryset = self.queryset.filter(server_id=server_id)
|
|
|
|
|
|
|
|
|
|
if server_suid:
|
|
|
|
|
self.queryset = self.queryset.filter(server_suid=server_suid)
|
|
|
|
|
|
|
|
|
|
if node_id:
|
|
|
|
|
self.queryset = self.queryset.filter(node_id=node_id)
|
|
|
|
|
|
|
|
|
|
if node_suid:
|
|
|
|
|
self.queryset = self.queryset.filter(node_suid=node_suid)
|
|
|
|
|
|
|
|
|
|
if device_id:
|
|
|
|
|
self.queryset = self.queryset.filter(device_id=device_id)
|
|
|
|
|
|
|
|
|
|
if device_suid:
|
|
|
|
|
self.queryset = self.queryset.filter(device_suid=device_suid)
|
|
|
|
|
|
|
|
|
|
if model_id:
|
|
|
|
|
self.queryset = self.queryset.filter(model_id=model_id)
|
|
|
|
|
|
|
|
|
|
if model_suid:
|
|
|
|
|
self.queryset = self.queryset.filter(model_suid=model_suid)
|
|
|
|
|
|
|
|
|
|
if status:
|
|
|
|
|
self.queryset = self.queryset.filter(status=status)
|
|
|
|
|
|
|
|
|
|
if not (obj_id or model_suid or model_id):
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
elif model_id:
|
|
|
|
|
instance = self.queryset.filter(model_id=model_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(model_suid=model_suid).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FilesModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = FilesModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = FilesSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
if not obj_id:
|
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
# return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
md5_str = data.get("md5_str")
|
|
|
|
|
|
|
|
|
|
if not obj_id or not md5_str:
|
|
|
|
|
# return super().list(request, *args, **kwargs)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
if obj_id:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
else:
|
|
|
|
|
instance = self.queryset.filter(md5_str=md5_str).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def destroy(self, request, *args, **kwargs):
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
try:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
self.perform_destroy(instance)
|
|
|
|
|
return Response({"msg": "对象已删除", "status": 200, "success": True, "data": None})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MessageModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = MessageModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = MessageSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
if not obj_id:
|
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
# return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
is_checked = data.get("is_checked", "all")
|
|
|
|
|
|
|
|
|
|
if is_checked is not "all":
|
|
|
|
|
self.queryset = self.queryset.filter(is_checked=is_checked)
|
|
|
|
|
|
|
|
|
|
if not obj_id:
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DataOverviewModelViewSet(ModelViewSet):
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
total_warning = WarningStatisticsModel.objects.count()
|
|
|
|
|
total_device = EnterpriseDeviceModel.objects.count()
|
|
|
|
|
total_node = EnterpriseNodeModel.objects.count()
|
|
|
|
|
|
|
|
|
|
data = {
|
|
|
|
|
"total_warning": total_warning if total_warning else 0,
|
|
|
|
|
"total_device": total_device if total_device else 0,
|
|
|
|
|
"total_node": total_node if total_node else 0,
|
|
|
|
|
"total_resource": f"{random.uniform(0.3, 0.8) * 100:.3f}%"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DeviceAndWarningsModelViewSet(ModelViewSet):
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
device_status_dic = {
|
|
|
|
|
"onlineCount": 0,
|
|
|
|
|
"errorCount": 0,
|
|
|
|
|
"processCount": 0,
|
|
|
|
|
"outlineCount": 0
|
|
|
|
|
}
|
|
|
|
|
device_status_list = EnterpriseDeviceModel.objects.values("status").annotate(count=Count("id")).order_by("status")
|
|
|
|
|
|
|
|
|
|
for i in device_status_list:
|
|
|
|
|
if i["status"] == 1001:
|
|
|
|
|
device_status_dic["onlineCount"] = i["count"]
|
|
|
|
|
elif i["status"] == 1002:
|
|
|
|
|
device_status_dic["outlineCount"] = i["count"]
|
|
|
|
|
elif i["status"] == 1003:
|
|
|
|
|
device_status_dic["errorCount"] = i["count"]
|
|
|
|
|
|
|
|
|
|
running_count = EnterpriseBusiModelNodeDeviceModel.objects.values("device_id").annotate(count=Count("id")).order_by("device_id")
|
|
|
|
|
device_status_dic["processCount"] = len(running_count)
|
|
|
|
|
|
|
|
|
|
device_warnings_list = list()
|
|
|
|
|
# device_warnings = WarningStatisticsModel.objects.values("warning_level").annotate(value=Count("id"), name=F("warning_level")).order_by("value")
|
|
|
|
|
dic = {
|
|
|
|
|
"1": "紧急",
|
|
|
|
|
"2": "较高",
|
|
|
|
|
"3": "一般",
|
|
|
|
|
"4": "低",
|
|
|
|
|
"5": "较低",
|
|
|
|
|
"6": "非常低",
|
|
|
|
|
}
|
|
|
|
|
device_warnings = WarningStatisticsModel.objects.values("warning_level").annotate(value=Count("id")).order_by("value")
|
|
|
|
|
for dw in device_warnings:
|
|
|
|
|
dw["name"] = dic.get(dw["warning_level"])
|
|
|
|
|
device_warnings_list.append(dw)
|
|
|
|
|
|
|
|
|
|
compute_used = ComputeConfigModel.objects.values("percentage").aggregate(value=Sum("percentage")).get("value", 0)
|
|
|
|
|
|
|
|
|
|
compute_used_info = [
|
|
|
|
|
{"value": (1 - compute_used) * 100, "name": "未占用"},
|
|
|
|
|
{"value": compute_used * 100, "name": "已占用"}
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
data = {
|
|
|
|
|
"device_status": device_status_dic,
|
|
|
|
|
"device_warnings": device_warnings_list,
|
|
|
|
|
"compute_used": compute_used_info
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WarningsAndMessageModelViewSet(ModelViewSet):
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
warnings_list = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
|
|
|
|
warnings_values = WarningStatisticsModel.objects.annotate(month=ExtractMonth('trigger_time')).values("month").annotate(count=Count("id"))
|
|
|
|
|
|
|
|
|
|
for warnings in warnings_values:
|
|
|
|
|
warnings_list[warnings["month"] - 1] = warnings["count"]
|
|
|
|
|
|
|
|
|
|
message_dic = {
|
|
|
|
|
"checked": 0,
|
|
|
|
|
"unchecked": 0
|
|
|
|
|
}
|
|
|
|
|
message_amount = MessageModel.objects.values("is_checked").annotate(count=Count("id"))
|
|
|
|
|
|
|
|
|
|
for message in message_amount:
|
|
|
|
|
if message["is_checked"] == 0:
|
|
|
|
|
message_dic["unchecked"] = message["count"]
|
|
|
|
|
else:
|
|
|
|
|
message_dic["checked"] = message["count"]
|
|
|
|
|
|
|
|
|
|
data = {
|
|
|
|
|
"warnings_list": warnings_list,
|
|
|
|
|
"message": message_dic
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ClassifyWarningsModelViewSet(ModelViewSet):
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
# 缺陷总数折线图
|
|
|
|
|
defectData = [46, 460, 100, 300, 20]
|
|
|
|
|
|
|
|
|
|
# 告警分类折线图
|
|
|
|
|
alarmData = {
|
|
|
|
|
"thread": [246, 246, 246, 180, 160],
|
|
|
|
|
"PIN": [160, 246, 450, 100, 246],
|
|
|
|
|
"plate": [100, 200, 400, 150, 306],
|
|
|
|
|
"scratched": [10, 20, 400, 150, 206],
|
|
|
|
|
"workpieceSize": [150, 250, 500, 50, 36]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 缺陷3D柱状图
|
|
|
|
|
defect3DData = [100, 500, 400, 600, 700, 200]
|
|
|
|
|
|
|
|
|
|
data = {
|
|
|
|
|
"defectData": defectData,
|
|
|
|
|
"alarmData": alarmData,
|
|
|
|
|
"defect3DData": defect3DData
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WorkshopModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = WorkshopModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = WorkshopSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
status = data.get("status", 0)
|
|
|
|
|
|
|
|
|
|
if status in (0, 1):
|
|
|
|
|
self.queryset = self.queryset.filter(status=status)
|
|
|
|
|
|
|
|
|
|
if not obj_id:
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
if not obj_id:
|
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
# return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
# 同步删除所有相关联记录
|
|
|
|
|
if data.get("status") in (1, "1"):
|
|
|
|
|
WorkshopDeviceModel.objects.filter(workshop_id=obj_id).all().update(status=1)
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WorkshopDeviceModelViewSet(ModelViewSet):
|
|
|
|
|
# 查询类
|
|
|
|
|
queryset = WorkshopDeviceModel.objects.all().order_by("id")
|
|
|
|
|
# 序列化类
|
|
|
|
|
serializer_class = WorkshopDeviceSerializer
|
|
|
|
|
# 分页类
|
|
|
|
|
pagination_class = MyPageNumberPagination
|
|
|
|
|
|
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
|
|
|
data = request.query_params
|
|
|
|
|
obj_id = data.get("id")
|
|
|
|
|
status = data.get("status", 0)
|
|
|
|
|
workshop_id = data.get("workshop_id")
|
|
|
|
|
|
|
|
|
|
if status in (0, 1):
|
|
|
|
|
self.queryset = self.queryset.filter(status=status)
|
|
|
|
|
|
|
|
|
|
if workshop_id:
|
|
|
|
|
self.queryset = self.queryset.filter(workshop_id=workshop_id)
|
|
|
|
|
|
|
|
|
|
if not obj_id:
|
|
|
|
|
return Response({
|
|
|
|
|
"data": super().list(request, *args, **kwargs).data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
|
|
|
data = request.data
|
|
|
|
|
obj_id = data.get("id") or data.get("wd_id")
|
|
|
|
|
# 设备重复绑定
|
|
|
|
|
# device_id = data.get("device_id")
|
|
|
|
|
# workshop_id = data.get("workshop_id")
|
|
|
|
|
# exist_obj = self.queryset.filter(device_id=device_id).last()
|
|
|
|
|
# if exist_obj:
|
|
|
|
|
# if exist_obj.workshop_id == workshop_id:
|
|
|
|
|
# obj_id = obj_id if obj_id else exist_obj.id
|
|
|
|
|
|
|
|
|
|
if not obj_id:
|
|
|
|
|
# exist_id = data.get("wd_id")
|
|
|
|
|
# WorkshopDeviceModel.objects.filter(id=exist_id).update(status=1)
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(data=request.data)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_create(serializer)
|
|
|
|
|
headers = self.get_success_headers(serializer.data)
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": "新增成功",
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
}, headers=headers)
|
|
|
|
|
else:
|
|
|
|
|
partial = kwargs.pop('partial', True)
|
|
|
|
|
try:
|
|
|
|
|
instance = self.queryset.filter(id=obj_id).get()
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"查询对象报错:{e}")
|
|
|
|
|
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
|
|
|
|
|
|
|
|
|
|
serializer = self.get_serializer(instance, data=request.data, partial=partial)
|
|
|
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
|
self.perform_update(serializer)
|
|
|
|
|
if getattr(instance, '_prefetched_objects_cache', None):
|
|
|
|
|
instance._prefetched_objects_cache = {}
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": serializer.data,
|
|
|
|
|
"msg": "编辑成功",
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def destroy(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
data = request.data
|
|
|
|
|
ids = data.get("ids")
|
|
|
|
|
self.queryset.filter(id__in=ids).all().update(status=1)
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": None,
|
|
|
|
|
"msg": "删除成功",
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def get_devices(self, request, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
device_ids_dict = dict()
|
|
|
|
|
# device_ids = self.queryset.filter(status=0).order_by("id").values("device_id", "id")
|
|
|
|
|
wd_objs = self.queryset.filter(status=0).order_by("id").all()
|
|
|
|
|
|
|
|
|
|
wd_objs_serializer = self.get_serializer(wd_objs, many=True)
|
|
|
|
|
|
|
|
|
|
for obj in wd_objs_serializer.data:
|
|
|
|
|
device_ids_dict[obj.get("device_id")] = obj
|
|
|
|
|
|
|
|
|
|
queryset = EnterpriseDeviceModel.objects.all()
|
|
|
|
|
serializer = EnterpriseDeviceSerializer(queryset, many=True)
|
|
|
|
|
|
|
|
|
|
res = []
|
|
|
|
|
|
|
|
|
|
for i in serializer.data:
|
|
|
|
|
if i.get("id") in device_ids_dict:
|
|
|
|
|
i["is_binding"] = True
|
|
|
|
|
i["wd_id"] = device_ids_dict[i.get("id")].get("id")
|
|
|
|
|
i["workshop_name"] = device_ids_dict[i.get("id")].get("workshop_name")
|
|
|
|
|
else:
|
|
|
|
|
i["is_binding"] = False
|
|
|
|
|
|
|
|
|
|
res.append(i)
|
|
|
|
|
|
|
|
|
|
return Response({
|
|
|
|
|
"data": res,
|
|
|
|
|
"msg": None,
|
|
|
|
|
"success": True,
|
|
|
|
|
"status": 200
|
|
|
|
|
})
|
|
|
|
|
|