目录
CMDB03 /资产入库、资产变更记录、今日未采集的资产
1. 资产入库 & 资产变更记录
-
写入数据库
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端也是使用相同模式,对插件进行一一处理。
- 在处理资产信息时候,对操作进行交集和差集的处理从而得到删除/更新/新增资产。
- 在内部通过反射进行资产变更记录的获取,最终将资产以及变更记录写入数据库。
3.今日未采集服务器 -- 基于Q实现复杂的SQL查询
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)
CMDB总结
- cmdb背景
- cmdb的实现
- 中控机
- paramiko
- pymysql操作数据库
- 单例模式(其它的单例模式)
- 工厂模式
- 日志
- 堆栈信息
- 对象进行数据封装 BaseReponse
- 线程池
- requests模块:data/json
- 采集资产的命令:dmidecode / megacli / saltstack
- Q获取未采集资产
- 集合交并差
- 反射
- orm批量增加数据:bulk_create([], 10)