写入数据库
def post(self,request,*args,**kwargs):
# 1. 获取到用户提交资产信息
# 2. 保存到数据库(表关系)
hostname = request.data.get('hostname')
server_object = models.Server.objects.filter(hostname=hostname).first()
if not server_object:
return Response('主机不存在')
disk_info = request.data['info']['disk']
"""
if not disk_info['status']:
print(disk_info['error'])
else:
for slot,row_dict in disk_info['data'].items():
# models.Disk.objects.create(**row_dict,server=server_object)
models.Disk.objects.create(**row_dict,server_id=server_object.id)
"""
return Response('发送成功')
考虑资产变更
def post(self,request,*args,**kwargs):
# 1. 获取到用户提交资产信息
# 2. 保存到数据库(表关系)
hostname = request.data.get('hostname')
server_object = models.Server.objects.filter(hostname=hostname).first()
if not server_object:
return Response('主机不存在')
print('汇报过来的数据',request.data['info'])
process_server_info(request.data['info'],server_object)
"""
# 今日已经采集
server_object.last_date = datetime.datetime.today()
server_object.save()
"""
return Response('发送成功')
中控机汇报到api的资产需要做入库以及变更记录的处理。
- 由于资产搜集时是利用工厂模式实现可扩展插件,方便于扩展。在api端也是使用相同模式,对插件进行一一处理。
- 在处理资产信息时候,对操作进行交集和差集的处理从而得到删除/更新/新增资产。
- 在内部通过反射进行资产变更记录的获取,最终将资产以及变更记录写入数据库。
def get(self,request,*args,**kwargs):
""" 返回今日未采集的服务器列表 """
today = datetime.datetime.today()
queryset = models.Server.objects.filter(status=1).filter(Q(last_date__isnull=True)|Q(last_date__lt=today)).values('hostname')
host_list = [item['hostname'] for item in queryset]
print('获取今日未采集的资产',host_list)
return Response(host_list)
原文:https://www.cnblogs.com/liubing8/p/11892721.html