CMDB硬件信息管理系统开发(二)

 

完成任务:

  1、网卡、内存资产变更数据及日志记录;

  2、get请求获取今日未采集主机列表;

# -*- coding: utf-8 -*-
# __author__ = "maple"
from repository import models


class Nic:
    def __init__(self, server_obj, info):
        self.server_obj = server_obj
        self.nic_dict = info
        self.record_list = []

    def process(self):
        # 网卡
        new_nic_info_dict = self.nic_dict['data']

        old_nic_info_list = self.server_obj.nic.values('name')
        new_nic_name_set = set(name for name in new_nic_info_dict)
        old_nic_name_set = {obj['name'] for obj in old_nic_info_list}

        add_name_list = new_nic_name_set.difference(old_nic_name_set)
        del_name_list = old_nic_name_set.difference(new_nic_name_set)
        update_name_list = old_nic_name_set.intersection(new_nic_name_set)

        if add_name_list:
            self.add_nic(add_name_list, new_nic_info_dict)

        if del_name_list:
            self.del_nic(del_name_list)

        if update_name_list:
            self.update_disk(update_name_list, new_nic_info_dict)

        if self.record_list:
            models.ServerRecord.objects.create(server_obj=self.server_obj, content='\n'.join(self.record_list))

    def add_nic(self, add_name_list, new_nic_info_dict):
        # 增加
        for name in add_name_list:
            value = new_nic_info_dict[name]
            tmp = "新增一块名称为[%s],hwaddr为[%s]的网卡" % (name, value['hwaddr'])
            self.record_list.append(tmp)
            value['server_obj'] = self.server_obj
            value['name'] = name
            models.NIC.objects.create(**value)

    def del_nic(self, del_name_list):
        # 删除
        tmp = "名称为%s的网卡被移除" % ([i for i in del_name_list])
        self.record_list.append(tmp)
        models.NIC.objects.filter(server_obj=self.server_obj, name__in=del_name_list).delete()

    def update_disk(self, update_name_list, new_disk_info_dict):
        # 更新
        for name in update_name_list:
            value = new_disk_info_dict[name]
            obj = models.NIC.objects.filter(server_obj=self.server_obj, name=name).first()
            for k, new_val in value.items():
                old_val = getattr(obj, k)

                if old_val != new_val:
                    print(k, old_val, type(old_val), new_val, type(new_val))
                    tmp = "名称%s的网卡的%s由%s变更为%s" % (name, k, old_val, new_val)
                    self.record_list.append(tmp)
                    setattr(obj, k, new_val)
            obj.save()

nic.py
nic.py

 

# -*- coding: utf-8 -*-
# __author__ = "maple"
from repository import models


class Memory:
    def __init__(self, server_obj, info):
        self.server_obj = server_obj
        self.memory_dict = info
        self.record_list = []

    def process(self):
        # 内存
        new_memory_info_dict = self.memory_dict['data']
        old_memory_info_list = self.server_obj.memory.all()
        new_memory_slot_set = set(new_memory_info_dict.keys())
        old_memory_slot_set = {obj.slot for obj in old_memory_info_list}

        add_slot_list = new_memory_slot_set.difference(old_memory_slot_set)
        del_slot_list = old_memory_slot_set.difference(new_memory_slot_set)
        update_slot_list = old_memory_slot_set.intersection(new_memory_slot_set)

        if add_slot_list:
            self.add_memory(add_slot_list, new_memory_info_dict)

        if del_slot_list:
            self.del_memory(del_slot_list)

        if update_slot_list:
            self.update_memory(update_slot_list, new_memory_info_dict)

        if self.record_list:
            models.ServerRecord.objects.create(server_obj=self.server_obj, content='\n'.join(self.record_list))

    def add_memory(self, add_slot_list, new_memory_info_dict):
        # 增加
        for slot in add_slot_list:
            value = new_memory_info_dict[slot]
            tmp = "槽位[%s]添加一块[%sG]内存" % (slot, value['capacity'])
            self.record_list.append(tmp)
            value['server_obj'] = self.server_obj
            models.Memory.objects.create(**value)

    def del_memory(self, del_slot_list):
        # 删除
        tmp = "槽位%s的内存被移除" % ([i for i in del_slot_list])
        self.record_list.append(tmp)
        models.Memory.objects.filter(server_obj=self.server_obj, slot__in=del_slot_list).delete()

    def update_memory(self, update_slot_list, new_memory_info_dict):
        # 删除
        for slot in update_slot_list:
            value = new_memory_info_dict[slot]
            obj = models.Memory.objects.filter(server_obj=self.server_obj, slot=slot).first()
            for k, new_val in value.items():
                old_val = getattr(obj, k)
                if str(old_val) != new_val:
                    print(k, old_val, type(old_val), new_val, type(new_val))
                    tmp = "槽位%s的硬盘的%s由%s变更为%s" % (slot, k, old_val, new_val)
                    self.record_list.append(tmp)
                    setattr(obj, k, new_val)
            obj.save()
memory.py

 

import json
from django.shortcuts import render, HttpResponse
from django.views.decorators.csrf import csrf_exempt
from .plugins import PluginManger
from datetime import date
from repository import models
from django.db.models import Q


@csrf_exempt  # 不再验证csrf
def server(request):
    if request.method == "GET":
        current_date = date.today()
        # 获取今日未采集的主机列表
        host_list = models.Server.objects.filter(
            Q(Q(latest_date=None) | Q(latest_date__date__lt=current_date)) & Q(server_status_id=2)
        ).values('hostname')
        host_list = list(host_list)
        print(host_list)
        return HttpResponse(json.dumps(host_list))
    if request.method == "POST":
        # 客服端提交的最新资产数据
        server_dict = json.loads(request.body.decode('utf-8'))

        if not server_dict['basic']['status']:
            return HttpResponse("臣妾做不到啊")

        manager = PluginManger()
        response = manager.exec(server_dict)

        return HttpResponse(json.dumps(response))
API/views.py

 

posted @ 2019-06-26 13:58  7411  阅读(127)  评论(0)    收藏  举报