CMDB03 /资产入库、资产变更记录、今日未采集的资产

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总结
  1. cmdb背景
  2. cmdb的实现
  3. 中控机
    1. paramiko
    2. pymysql操作数据库
    3. 单例模式(其它的单例模式)
    4. 工厂模式
    5. 日志
    6. 堆栈信息
    7. 对象进行数据封装 BaseReponse
    8. 线程池
    9. requests模块:data/json
    10. 采集资产的命令:dmidecode / megacli / saltstack
  4. Q获取未采集资产
  5. 集合交并差
  6. 反射
  7. orm批量增加数据:bulk_create([], 10)

猜你喜欢

转载自www.cnblogs.com/liubing8/p/11892721.html
今日推荐