/// <summary> /// The create kun lun server. /// </summary> /// <param name="model"> /// The model. /// </param> /// <returns> /// The <see cref="MPObject"/>. /// </returns> private MPObject CreateKunLunServer(KunLunServer model) { var propertys = this.KunLunClass.PropertyCollection; // 获取到class的属性 var obj = new MPObject(MGroup.Instance, this.KunLunClass); // 实例化一个class obj[this.HuaweiServerKey].Value = model.DN; obj[propertys["Status"]].Value = model.Status; obj[propertys["Vendor"]].Value = "HUAWEI"; obj[propertys["Manufacturer"]].Value = model.Manufacturer; obj[propertys["UUID"]].Value = model.UUID; obj[propertys["IPAddress"]].Value = model.IpAddress; obj[propertys["iBMCVersion"]].Value = model.Version; obj[propertys["CPLDVersion"]].Value = string.Empty; obj[propertys["UbootVersion"]].Value = string.Empty; obj[propertys["ProductSn"]].Value = model.ProductSN; obj[propertys["MemoryCapacity"]].Value = model.MemoryCapacity; obj[propertys["CPUNums"]].Value = model.CPUNums; obj[propertys["CPUCores"]].Value = model.CPUCores; obj[propertys["ServerName"]].Value = model.ServerName; obj[propertys["BMCMacAddr"]].Value = model.BmcMacAddr; obj[propertys["eSight"]].Value = model.ESight; obj[this.DisplayNameField].Value = model.Name; return(obj); }
/// <summary> /// Synchronizes the server. /// </summary> /// <param name="model">The model.</param> public void SyncServer(KunLunServer model) { // 存在则更新 if (ExsitsKunLunServer(model.DeviceId)) { this.UpdateKunLun(model, true); } else { this.InsertDetials(model); } }
/// <summary> /// 更新昆仑 /// </summary> /// <param name="model">The model.</param> public void UpdateKunLunServer(HWDeviceDetail model) { try { var server = new KunLunServer(); server.MakeDetail(model, this.ESightIp); KunLunConnector.Instance.UpdateKunLun(server); } catch (Exception ex) { this.OnNotifyError($"UpdateKunLunServer Error.eSight:{this.ESightIp} Dn:{model.DN}. ", ex); } }
/// <summary> /// 更新昆仑 /// </summary> /// <param name="model">The model.</param> /// <param name="alarmSn">The alarm sn.</param> private void UpdateKunLunServer(HWDeviceDetail model, int alarmSn) { try { logger.NotifyProcess.Info($"Start Update KunLunServer:{model.DN}.[alarmSn:{alarmSn}]"); var server = new KunLunServer(); server.MakeDetail(model, this.ESightIp); KunLunConnector.Instance.UpdateKunLun(server, false); } catch (Exception ex) { logger.NotifyProcess.Error(ex, $"UpdateKunLunServer Error. Dn:{model.DN}.[alarmSn:{alarmSn}] "); } }
/// <summary> /// 查询昆仑列表 /// </summary> /// <param name="startPage">The start page.</param> /// <returns>机架列表</returns> public ApiServerList <KunLunServer> QueryKunLunServer(int startPage) { var result = new ApiServerList <KunLunServer>(); var queryDeviceParam = new DeviceParam() { PageSize = 100, StartPage = startPage, ServerType = "kunlun" }; var reqResult = this.GetServerList(queryDeviceParam); reqResult.Data.ForEach(x => { KunLunServer kunlunServer = new KunLunServer(x); result.Data.Add(kunlunServer); }); result.TotalSize = reqResult.TotalSize; result.TotalPage = reqResult.TotalPage; return(result); }
/// <summary> /// Queries the kunLun detial. /// </summary> /// <param name="kunLun">The kun lun.</param> public void QueryKunLunDetial(KunLunServer kunLun) { var task = Task.Run(() => { try { var device = this.Session.GetServerDetails(kunLun.DN); kunLun.MakeDetail(device, this.ESightIp); KunLunConnector.Instance.InsertDetials(kunLun); } catch (Exception ex) { this.OnError($"QueryKunLunDetial Error:{kunLun.DN}", ex); } }); this.taskList.Add(task); }
/// <summary> /// Queries the kunLun detial. /// </summary> /// <param name="kunLun">The kun lun.</param> private void QueryKunLunDetial(KunLunServer kunLun) { var task = taskFactory.StartNew(() => { try { var device = this.Session.GetServerDetails(kunLun.DN); kunLun.MakeDetail(device, this.ESightIp); KunLunConnector.Instance.SyncServer(kunLun); } catch (Exception ex) { OnPollingError($"QueryKunLunDetial Error:{kunLun.DN}", ex); } }, cts.Token); this.taskList.Add(task); }
/// <summary> /// The update kun lun. /// </summary> /// <param name="model">The model.</param> /// <exception cref="Exception">Can not find the server</exception> public void UpdateKunLun(KunLunServer model) { HWLogger.NOTIFICATION_PROCESS.Debug("Start UpdateKunLun"); var oldServer = this.GetKunLunServer(model.DN); if (oldServer == null) { throw new Exception($"Can not find the server:{model.DN}"); } var propertys = this.KunLunClass.PropertyCollection; // 获取到class的属性 var discoveryData = new IncrementalDiscoveryData(); oldServer[this.DisplayNameField].Value = model.Name; oldServer[propertys["Status"]].Value = model.Status; oldServer[propertys["Vendor"]].Value = "HUAWEI"; oldServer[propertys["Manufacturer"]].Value = model.Manufacturer; oldServer[propertys["UUID"]].Value = model.UUID; oldServer[propertys["IPAddress"]].Value = model.IpAddress; // oldBlade[propertys["iBMCVersion"]].Value = model.Version; oldServer[propertys["CPLDVersion"]].Value = string.Empty; oldServer[propertys["UbootVersion"]].Value = string.Empty; oldServer[propertys["ProductSn"]].Value = model.ProductSN; oldServer[propertys["MemoryCapacity"]].Value = model.MemoryCapacity; oldServer[propertys["CPUNums"]].Value = model.CPUNums; oldServer[propertys["CPUCores"]].Value = model.CPUCores; // oldBlade[propertys["ServerName"]].Value = model.ServerName; oldServer[propertys["BMCMacAddr"]].Value = model.BmcMacAddr; oldServer[propertys["eSight"]].Value = model.ESight; discoveryData.Add(oldServer); var fanGroup = oldServer.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.ComputerKey].Value = model.DN; newFan[this.HuaweiServerKey].Value = model.DN; newFan[this.PartGroupKey].Value = fanGroup[this.PartGroupKey].Value; discoveryData.Add(newFan); } else { discoveryData.Add(fan); } }); #region PSU var psuGroup = oldServer.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.ComputerKey].Value = model.DN; newpsu[this.HuaweiServerKey].Value = model.DN; newpsu[this.PartGroupKey].Value = psuGroup[this.PartGroupKey].Value; discoveryData.Add(newpsu); } else { discoveryData.Add(psu); } }); #endregion #region Disk var diskGroup = oldServer.GetRelatedMonitoringObjects(this.PhysicalDiskGroupClass).First(); discoveryData.Add(diskGroup); var relatedDiskObjects = diskGroup.GetRelatedMonitoringObjects(this.PhysicalDiskClass); var deleteDisk = relatedDiskObjects.Where( x => model.DiskList.All( y => y.UUID != x[this.PhysicalDiskClass.PropertyCollection["UUID"]].Value.ToString())).ToList(); deleteDisk.ForEach(x => { discoveryData.Remove(x); }); model.DiskList.ForEach( y => { var disk = this.UpdateDisk(y); if (disk == null) { var newDisk = this.CreateDisk(y); newDisk[this.ComputerKey].Value = model.DN; newDisk[this.HuaweiServerKey].Value = model.DN; newDisk[this.PartGroupKey].Value = diskGroup[this.PartGroupKey].Value; discoveryData.Add(newDisk); } else { discoveryData.Add(disk); } }); #endregion #region Raid var raidGroup = oldServer.GetRelatedMonitoringObjects(this.RaidGroupClass).First(); discoveryData.Add(raidGroup); var relatedRaidObjects = raidGroup.GetRelatedMonitoringObjects(this.RaidClass); var deleteRaid = relatedRaidObjects.Where( x => model.RaidList.All( y => y.UUID != x[this.RaidClass.PropertyCollection["UUID"]].Value.ToString())) .ToList(); deleteRaid.ForEach(x => { discoveryData.Remove(x); }); model.RaidList.ForEach( y => { var raid = this.UpdateRaidControl(y); if (raid == null) { var newRaid = this.CreateRaidControl(y); newRaid[this.ComputerKey].Value = model.DN; newRaid[this.HuaweiServerKey].Value = model.DN; newRaid[this.PartGroupKey].Value = raidGroup[this.PartGroupKey].Value; discoveryData.Add(newRaid); } else { discoveryData.Add(raid); } }); #endregion discoveryData.Overwrite(this.MontioringConnector); HWLogger.NOTIFICATION_PROCESS.Debug("Start UpdateKunLun"); }
/// <summary> /// The insert detials. /// </summary> /// <param name="model"> /// The model. /// </param> public void InsertDetials(KunLunServer 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 KunLunServer var kunLunServer = this.CreateKunLunServer(model); kunLunServer[this.ComputerKey].Value = model.DN; discoveryData.Add(kunLunServer); #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.HuaweiServerKey].Value = model.DN; fan[this.ComputerKey].Value = model.DN; discoveryData.Add(fan); }); #endregion #region PSU var powerSupplyGroup = this.CreateLogicalGroup(this.PowerSupplyGroupClass, model.DN); discoveryData.Add(powerSupplyGroup); model.PowerSupplyList.ForEach( x => { var powerSupply = this.CreatePowerSupply(x); powerSupply[this.PartGroupKey].Value = powerSupplyGroup[this.PartGroupKey].Value; powerSupply[this.HuaweiServerKey].Value = model.DN; powerSupply[this.ComputerKey].Value = model.DN; discoveryData.Add(powerSupply); }); #endregion #region Raid var raidGroup = this.CreateLogicalGroup(this.RaidGroupClass, model.DN); discoveryData.Add(raidGroup); model.RaidList.ForEach( y => { var raid = this.CreateRaidControl(y); raid[this.PartGroupKey].Value = raidGroup[this.PartGroupKey].Value; raid[this.HuaweiServerKey].Value = model.DN; raid[this.ComputerKey].Value = model.DN; discoveryData.Add(raid); }); #endregion #region Disk var diskGroup = this.CreateLogicalGroup(this.PhysicalDiskGroupClass, model.DN); discoveryData.Add(diskGroup); model.DiskList.ForEach( x => { var disk = this.CreateDisk(x); disk[this.PartGroupKey].Value = diskGroup[this.PartGroupKey].Value; disk[this.HuaweiServerKey].Value = model.DN; disk[this.ComputerKey].Value = model.DN; discoveryData.Add(disk); }); #endregion if (!this.ExsitsKunLunServer(model.DN)) { discoveryData.Commit(this.MontioringConnector); } else { discoveryData.Overwrite(this.MontioringConnector); } }
/// <summary> /// The insert detials. /// </summary> /// <param name="model"> /// The model. /// </param> private void InsertDetials(KunLunServer model) { try { HWLogger.GetESightSdkLogger(model.ESight).Debug($"Insert KunLun:{model.DN}"); var discoveryData = new IncrementalDiscoveryData(); #region KunLunServer var kunLunServer = this.CreateKunLunServer(model); discoveryData.Add(kunLunServer); #endregion #region Fan var fanGroup = this.CreateLogicalGroup(this.FanGroupClass, model.DeviceId); discoveryData.Add(fanGroup); model.FanList.ForEach( x => { var fan = this.CreateFan(x); fan[this.PartGroupKey].Value = fanGroup[this.PartGroupKey].Value; fan[this.HuaweiServerKey].Value = model.DeviceId; discoveryData.Add(fan); }); #endregion #region PSU var powerSupplyGroup = this.CreateLogicalGroup(this.PowerSupplyGroupClass, model.DeviceId); discoveryData.Add(powerSupplyGroup); model.PowerSupplyList.ForEach( x => { var powerSupply = this.CreatePowerSupply(x); powerSupply[this.PartGroupKey].Value = powerSupplyGroup[this.PartGroupKey].Value; powerSupply[this.HuaweiServerKey].Value = model.DeviceId; discoveryData.Add(powerSupply); }); #endregion #region Raid var raidGroup = this.CreateLogicalGroup(this.RaidGroupClass, model.DeviceId); discoveryData.Add(raidGroup); model.RaidList.ForEach( y => { var raid = this.CreateRaidControl(y); raid[this.PartGroupKey].Value = raidGroup[this.PartGroupKey].Value; raid[this.HuaweiServerKey].Value = model.DeviceId; discoveryData.Add(raid); }); #endregion #region Disk var diskGroup = this.CreateLogicalGroup(this.PhysicalDiskGroupClass, model.DeviceId); discoveryData.Add(diskGroup); model.DiskList.ForEach( x => { var disk = this.CreateDisk(x); disk[this.PartGroupKey].Value = diskGroup[this.PartGroupKey].Value; disk[this.HuaweiServerKey].Value = model.DeviceId; discoveryData.Add(disk); }); #endregion discoveryData.Commit(this.MontioringConnector); } catch (Exception e) { HWLogger.GetESightSdkLogger(model.ESight).Error($"Insert KunLun Error:{model.DN}", e); } }