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
# -*- 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()
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))

浙公网安备 33010602011771号