CMDB03 / storage assets, asset change history, not today acquired assets

CMDB03 / storage assets, asset change history, not today acquired assets

1. Assets Assets change recording & storage

  • Written to the database

        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('发送成功')
    
  • Consider asset changes

        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('发送成功')

to sum up

中控机汇报到api的资产需要做入库以及变更记录的处理。
 - 由于资产搜集时是利用工厂模式实现可扩展插件,方便于扩展。在api端也是使用相同模式,对插件进行一一处理。 
 - 在处理资产信息时候,对操作进行交集和差集的处理从而得到删除/更新/新增资产。
 - 在内部通过反射进行资产变更记录的获取,最终将资产以及变更记录写入数据库。 

3. Not today acquisition server - based Q implement complex SQL queries

  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 summary
  1. cmdb background
  2. cmdb implementation
  3. Control Unit
    1. paramiko
    2. pymysql operational database
    3. Singleton (other singleton)
    4. Factory Pattern
    5. Journal
    6. Stack information
    7. Object data encapsulation BaseReponse
    8. Thread Pool
    9. Module requests: data / json
    10. Command Acquisition of assets: dmidecode / megacli / saltstack
  4. Q acquisition of assets not acquired
  5. Pay and poor collection
  6. reflection
  7. orm increased bulk data: bulk_create ([], 10)

Guess you like

Origin www.cnblogs.com/liubing8/p/11892721.html