/// <summary> /// Queries the highdensity detial. /// </summary> /// <param name="x">The x.</param> public void QueryHighdensityDetial(HighdensityServer x) { var task = Task.Run(() => { try { var device = this.Session.GetServerDetails(x.DN); x.MakeDetail(device); x.ChildHighdensitys.ForEach( m => { var deviceDatail = this.Session.GetServerDetails(m.DN); m.MakeChildBladeDetail(deviceDatail); }); // 插入數據 HighdensityConnector.Instance.InsertDetials(x); } catch (Exception ex) { this.OnError($"QueryHighdensityDetial Error:DN:{x.DN}", ex); } }); this.taskList.Add(task); }
/// <summary> /// Queries the highdensity detial. /// </summary> /// <param name="x">The x.</param> /// <param name="isPolling">是否轮询</param> private void QueryHighdensityDetial(HighdensityServer x) { var task = taskFactory.StartNew(() => { try { var device = this.Session.GetServerDetails(x.DN); x.MakeDetail(device, this.ESightIp); x.ChildHighdensitys.ForEach( m => { var deviceDatail = this.Session.GetServerDetails(m.DN); m.MakeChildBladeDetail(deviceDatail); }); // 插入數據 HighdensityConnector.Instance.SyncServer(x); } catch (Exception ex) { OnPollingError($"QueryHighdensityDetial Error:DN:{x.DN}", ex); } }, cts.Token); this.taskList.Add(task); }
/// <summary> /// The create highdensity server. /// </summary> /// <param name="model"> /// The model. /// </param> /// <returns> /// The <see cref="MPObject"/>. /// </returns> private MPObject CreateHighdensityServer(HighdensityServer model) { var propertys = this.HighdensityClass.PropertyCollection; // 获取到class的属性 var obj = new MPObject(MGroup.Instance, this.HighdensityClass); // 实例化一个class obj[this.ComputerKey].Value = model.DN; obj[propertys["eSight"]].Value = model.ESight; obj[propertys["Status"]].Value = model.Status; obj[propertys["UUID"]].Value = model.UUID; obj[propertys["Vendor"]].Value = "HUAWEI"; obj[propertys["Manufacturer"]].Value = model.Manufacturer; obj[propertys["IPAddress"]].Value = model.IpAddress; obj[propertys["iBMCVersion"]].Value = model.Version; obj[propertys["ProductSn"]].Value = model.ProductSN; obj[propertys["ServerName"]].Value = model.ServerName; var entityClass = MGroup.Instance.GetManagementPackClass("System.Entity"); obj[entityClass.PropertyCollection["DisplayName"]].Value = model.ServerName; return(obj); }
/// <summary> /// 查询高密列表 /// </summary> /// <param name="startPage">The start page.</param> /// <returns>高密列表</returns> public ApiServerList <HighdensityServer> QueryHighDesentyServer(int startPage) { var result = new ApiServerList <HighdensityServer>(); var queryDeviceParam = new DeviceParam() { PageSize = 100, StartPage = startPage, ServerType = "highdensity" }; var reqResult = this.GetServerList(queryDeviceParam); reqResult.Data.ForEach(x => { var highDesentyServer = new HighdensityServer(x); x.ChildBlades.ForEach(m => { var childHighdensity = new ChildHighdensity(m, this.ESight.HostIP); highDesentyServer.ChildHighdensitys.Add(childHighdensity); }); result.Data.Add(highDesentyServer); }); result.TotalSize = reqResult.TotalSize; result.TotalPage = reqResult.TotalPage; return(result); }
/// <summary> /// 更新高密管理板 /// </summary> /// <param name="model">The model.</param> /// <param name="alarmSn">The alarm sn.</param> private void UpdateHighdensityServer(HWDeviceDetail model, int alarmSn) { try { logger.NotifyProcess.Info($"Start Update HighdensityServer:{model.DN} .[alarmSn:{alarmSn}]"); var server = new HighdensityServer { DN = model.DN, ServerName = model.Name, Manufacturer = string.Empty, ServerModel = model.Mode, IpAddress = model.IpAddress, Location = string.Empty, Status = model.Status }; server.MakeDetail(model, this.ESightIp); HighdensityConnector.Instance.UpdateMain(server, false); } catch (Exception ex) { logger.NotifyProcess.Error(ex, $"UpdateHighdensityServer Error.Dn:{model.DN} .[alarmSn:{alarmSn}] "); } }
/// <summary> /// 更新高密管理板 /// </summary> /// <param name="model">The model.</param> public void UpdateHighdensityServer(HWDeviceDetail model) { try { var server = new HighdensityServer { DN = model.DN, ServerName = model.Name, Manufacturer = string.Empty, ServerModel = model.Mode, IpAddress = model.IpAddress, Location = string.Empty, Status = model.Status, ESight = this.ESightIp }; server.MakeDetail(model); HighdensityConnector.Instance.UpdateMainWithOutChildBlade(server); } catch (Exception ex) { this.OnNotifyError($"UpdateHighdensityServer Error.eSight:{this.ESightIp} Dn:{model.DN}. ", ex); } }
/// <summary> /// 更新高密管理板 /// </summary> /// <param name="parentDn">The parent dn.</param> public void UpdateHighdensityServer(string parentDn) { try { var model = this.Session.GetServerDetails(parentDn); var server = new HighdensityServer { DN = parentDn,//查询高密服务器详情返回的是第一个子刀片的dn.因此此处需要以管理板dn为准 ServerName = model.Name, Manufacturer = string.Empty, ServerModel = model.Mode, IpAddress = model.IpAddress, Location = string.Empty, Status = model.Status }; server.MakeDetail(model, this.ESightIp); this.QueryHighdensityDetial(server); } catch (Exception ex) { this.OnNotifyError($"UpdateHighdensityServer Error.eSight:{this.ESightIp} Dn:{parentDn}. ", ex); } }
/// <summary> /// Updates the main with out related. /// </summary> /// <param name="model"> /// The model. /// </param> public void UpdateMainWithOutChildBlade(HighdensityServer model) { HWLogger.NOTIFICATION_PROCESS.Debug("Start UpdateHighdensity WithOut ChildBoard"); var oldBlade = this.GetHighdensityServer(model.DN); if (oldBlade == null) { throw new Exception($"Can not find the server:{model.DN}"); } var propertys = this.HighdensityClass.PropertyCollection; // 获取到class的属性 var discoveryData = new IncrementalDiscoveryData(); oldBlade[propertys["eSight"]].Value = model.ESight; oldBlade[propertys["Status"]].Value = model.Status; oldBlade[propertys["UUID"]].Value = model.UUID; oldBlade[propertys["Vendor"]].Value = "HUAWEI"; oldBlade[propertys["Manufacturer"]].Value = model.Manufacturer; oldBlade[propertys["IPAddress"]].Value = model.IpAddress; oldBlade[propertys["ProductSn"]].Value = model.ProductSN; // oldBlade[propertys["ServerName"]].Value = model.ServerName; // oldBlade[propertys["iBMCVersion"]].Value = model.Version; oldBlade[this.DisplayNameField].Value = model.ServerName; discoveryData.Add(oldBlade); var fanGroup = oldBlade.GetRelatedMonitoringObjects(this.FanGroupClass).First(); discoveryData.Add(fanGroup); var relatedFanObjects = fanGroup.GetRelatedMonitoringObjects(this.FanClass); var deleteFan = relatedFanObjects.Where( x => model.FanList.All(y => y.UUID != x[this.FanClass.PropertyCollection["UUID"]].Value.ToString())) .ToList(); deleteFan.ForEach(x => { discoveryData.Remove(x); }); model.FanList.ForEach( x => { var fan = this.UpdateFan(x); if (fan == null) { var newFan = this.CreateFan(x); newFan[this.PartGroupKey].Value = fanGroup[this.PartGroupKey].Value; newFan[this.ComputerKey].Value = model.DN; newFan[this.HuaweiServerKey].Value = model.DN; discoveryData.Add(newFan); } else { discoveryData.Add(fan); } }); #region PSU var psuGroup = oldBlade.GetRelatedMonitoringObjects(this.PowerSupplyGroupClass).First(); discoveryData.Add(psuGroup); var relatedPsuObjects = psuGroup.GetRelatedMonitoringObjects(this.PowerSupplyClass); var deletePsu = relatedPsuObjects.Where( x => model.PowerSupplyList.All( y => y.UUID != x[this.PowerSupplyClass.PropertyCollection["UUID"]].Value.ToString())).ToList(); deletePsu.ForEach(x => { discoveryData.Remove(x); }); model.PowerSupplyList.ForEach( x => { var psu = this.UpdatePowerSupply(x); if (psu == null) { var newpsu = this.CreatePowerSupply(x); newpsu[this.PartGroupKey].Value = psuGroup[this.PartGroupKey].Value; newpsu[this.ComputerKey].Value = model.DN; newpsu[this.HuaweiServerKey].Value = model.DN; discoveryData.Add(newpsu); } else { discoveryData.Add(psu); } }); #endregion // var relatedObjects = oldBlade.GetRelatedMonitoringObjects(ChildHighdensityClass); // relatedObjects.ToList().ForEach(x => discoveryData.Add(x)); discoveryData.Overwrite(this.MontioringConnector); HWLogger.NOTIFICATION_PROCESS.Debug("End UpdateHighdensity WithOut ChildBoard"); }
/// <summary> /// The insert detials. /// </summary> /// <param name="model"> /// The model. /// </param> public void InsertDetials(HighdensityServer model) { var discoveryData = new IncrementalDiscoveryData(); var baseComputer = this.GetComputerByDn(model.DN); if (baseComputer == null) { var newBaseComputer = this.CreateComputer(model.DN); discoveryData.Add(newBaseComputer); } else { discoveryData.Add(baseComputer); } #region HighdensityServer var highdensityServer = this.CreateHighdensityServer(model); highdensityServer[this.HuaweiServerKey].Value = model.DN; discoveryData.Add(highdensityServer); #endregion #region Fan var fanGroup = this.CreateLogicalGroup(this.FanGroupClass, model.DN); discoveryData.Add(fanGroup); model.FanList.ForEach( x => { var fan = this.CreateFan(x); fan[this.PartGroupKey].Value = fanGroup[this.PartGroupKey].Value; fan[this.ComputerKey].Value = model.DN; fan[this.HuaweiServerKey].Value = model.DN; discoveryData.Add(fan); }); #endregion #region PSU var psuGroup = this.CreateLogicalGroup(this.PowerSupplyGroupClass, model.DN); discoveryData.Add(psuGroup); model.PowerSupplyList.ForEach( x => { var powerSupply = this.CreatePowerSupply(x); powerSupply[this.PartGroupKey].Value = psuGroup[this.PartGroupKey].Value; powerSupply[this.ComputerKey].Value = model.DN; powerSupply[this.HuaweiServerKey].Value = model.DN; discoveryData.Add(powerSupply); }); #endregion #region Child Highdensity var childHighdensityGroup = this.CreateLogicalGroup(this.ChildHighdensityGroupClass, model.DN); var childHighdensityGroupKey = childHighdensityGroup[this.PartGroupKey].Value.ToString(); discoveryData.Add(childHighdensityGroup); model.ChildHighdensitys.ForEach( x => { var childHighdensity = this.CreateChildHighdensity(x); childHighdensity[this.PartGroupKey].Value = childHighdensityGroupKey; childHighdensity[this.ComputerKey].Value = model.DN; childHighdensity[this.HuaweiServerKey].Value = model.DN; discoveryData.Add(childHighdensity); var childHighdensityKey = this.ChildHighdensityClass.PropertyCollection["DN"]; #region CPU var cpuGroup = this.CreateLogicalChildGroup(this.CpuGroupClass, model.DN, x.DN); cpuGroup[childHighdensityKey].Value = x.DN; cpuGroup[this.PartGroupKey].Value = childHighdensityGroupKey; discoveryData.Add(cpuGroup); x.CPUList.ForEach( y => { var cpu = this.CreateCpu(y); cpu[this.PartChildGroupKey].Value = cpuGroup[this.PartChildGroupKey].Value; cpu[childHighdensityKey].Value = x.DN; cpu[this.PartGroupKey].Value = childHighdensityGroupKey; cpu[this.ComputerKey].Value = model.DN; cpu[this.HuaweiServerKey].Value = model.DN; discoveryData.Add(cpu); }); #endregion #region Memory var memoryGroup = this.CreateLogicalChildGroup(this.MemoryGroupClass, model.DN, x.DN); memoryGroup[childHighdensityKey].Value = x.DN; memoryGroup[this.PartGroupKey].Value = childHighdensityGroupKey; discoveryData.Add(memoryGroup); x.MemoryList.ForEach( y => { var memory = this.CreateMemory(y); memory[this.PartChildGroupKey].Value = memoryGroup[this.PartChildGroupKey].Value; memory[childHighdensityKey].Value = x.DN; memory[this.PartGroupKey].Value = childHighdensityGroupKey; memory[this.ComputerKey].Value = model.DN; memory[this.HuaweiServerKey].Value = model.DN; discoveryData.Add(memory); }); #endregion #region Disk var diskGroup = this.CreateLogicalChildGroup(this.DiskGroupClass, model.DN, x.DN); diskGroup[this.PartGroupKey].Value = childHighdensityGroupKey; diskGroup[childHighdensityKey].Value = x.DN; discoveryData.Add(diskGroup); x.DiskList.ForEach( y => { var disk = this.CreateDisk(y); disk[this.PartChildGroupKey].Value = diskGroup[this.PartChildGroupKey].Value; disk[childHighdensityKey].Value = x.DN; disk[this.PartGroupKey].Value = childHighdensityGroupKey; disk[this.ComputerKey].Value = model.DN; disk[this.HuaweiServerKey].Value = model.DN; discoveryData.Add(disk); }); #endregion #region Raid var raidGroup = this.CreateLogicalChildGroup(this.RaidGroupClass, model.DN, x.DN); raidGroup[this.PartGroupKey].Value = childHighdensityGroupKey; raidGroup[childHighdensityKey].Value = x.DN; discoveryData.Add(raidGroup); x.RaidList.ForEach( y => { var raid = this.CreateRaidControl(y); raid[this.PartChildGroupKey].Value = raidGroup[this.PartChildGroupKey].Value; raid[childHighdensityKey].Value = x.DN; raid[this.PartGroupKey].Value = childHighdensityGroupKey; raid[this.HuaweiServerKey].Value = model.DN; raid[this.ComputerKey].Value = model.DN; discoveryData.Add(raid); }); #endregion }); #endregion if (!this.ExsitsHighdensityServer(model.DN)) { discoveryData.Commit(this.MontioringConnector); } else { discoveryData.Overwrite(this.MontioringConnector); } }