/// <summary> /// Deletes the kun lun on synchronize. /// </summary> /// <param name="fdIp">The e sight ip.</param> /// <param name="newIds">The new device ids.</param> public void CompareDataOnSync(string fdIp, List <string> newIds) { try { MGroup.Instance.CheckConnection(); HWLogger.GetFdSdkLogger(fdIp).Info($"Check And Removed Enclosure On Polling.[curQueryResult:{string.Join(",", newIds)}]"); var criteria = new MonitoringObjectCriteria($"Name like '%{fdIp}%'", EnclosureClass); var exsitObjects = MGroup.Instance.EntityObjects.GetObjectReader <MonitoringObject>(criteria, ObjectQueryOptions.Default).ToList(); var deleteObjects = exsitObjects.Where(x => newIds.All(newDeviceId => newDeviceId != x[EnclosureKey].Value.ToString())).ToList(); var newObjects = newIds.Where(x => exsitObjects.All(y => x != y[EnclosureKey].Value.ToString())).ToList(); HWLogger.GetFdSdkLogger(fdIp).Info($"Compare Enclosures Result:[new:{newObjects.Count}] [Delete:{deleteObjects.Count}]"); var discovery = new IncrementalDiscoveryData(); deleteObjects.ForEach(deleteDevice => { discovery.Remove(deleteDevice); }); discovery.Commit(this.MontioringConnector); HWLogger.GetFdSdkLogger(fdIp).Debug($"Remove Enclosure On Polling:[Count:{deleteObjects.Count}].[{string.Join(",", deleteObjects.Select(x => x[EnclosureKey].Value.ToString()))}]"); } catch (Exception e) { HWLogger.GetFdSdkLogger(fdIp).Error(e, $"Compare Enclosures Data On Sync."); } }
/// <summary> /// Deletes the servers on synchronize. /// </summary> /// <param name="eSightIp">The e sight ip.</param> /// <param name="newDeviceIds">The new device ids.</param> /// <param name="mpClass">The mp class.</param> public void RemoveServersOnSync(string eSightIp, List <string> newDeviceIds, ManagementPackClass mpClass) { try { HWLogger.GetESightSdkLogger(eSightIp).Info($"Check Removed Servers On Polling.[mpClass:{mpClass}][curQueryResult:{string.Join(",", newDeviceIds)}]"); MGroup.Instance.CheckConnection(); var criteria = new MonitoringObjectCriteria($"eSight = '{eSightIp}'", mpClass); var exsitDevices = MGroup.Instance.EntityObjects.GetObjectReader <MonitoringObject>(criteria, ObjectQueryOptions.Default).ToList(); var deleteDevices = exsitDevices.Where(x => newDeviceIds.All(newDeviceId => newDeviceId != x[this.HuaweiServerKey].Value.ToString())) .ToList(); var discovery = new IncrementalDiscoveryData(); deleteDevices.ForEach(deleteDevice => { discovery.Remove(deleteDevice); }); discovery.Commit(this.MontioringConnector); if (deleteDevices.Any()) { HWLogger.GetESightSdkLogger(eSightIp).Info($"RemoveServers OnSync:delete servers[{mpClass.Name}]:{string.Join(",", deleteDevices.Select(x => x[this.HuaweiServerKey].Value.ToString()).Distinct())} "); } } catch (Exception e) { HWLogger.GetESightSdkLogger(eSightIp).Error($"RemoveServers OnSync.", e); } }
/// <summary> /// Inserts the device change event. /// </summary> /// <param name="mpClass">The mp class.</param> /// <param name="deviceChangeEventData">The device change event data.</param> public void InsertDeviceChangeEvent(ManagementPackClass mpClass, DeviceChangeEventData deviceChangeEventData) { try { MGroup.Instance.CheckConnection(); var criteria = new MonitoringObjectCriteria($"DN = '{deviceChangeEventData.Dn}'", mpClass); var reader = MGroup.Instance.EntityObjects.GetObjectReader <PartialMonitoringObject>(criteria, ObjectQueryOptions.Default); if (reader.Any()) { var obj = reader.First(); { obj.InsertCustomMonitoringEvent(deviceChangeEventData.ToCustomMonitoringEvent()); } } else { throw new Exception($"cannot find DN '{deviceChangeEventData.Dn}'"); } } catch (Exception ex) { HWLogger.SERVICE.Error(ex); throw; } }
/// <summary> /// 根据eSight删除Server以及父级的Computer /// </summary> /// <param name="mpClass"> /// The class. /// </param> /// <param name="eSightIp"> /// The eSightIp. /// </param> public void RemoverServers(ManagementPackClass mpClass, string eSightIp) { try { MGroup.Instance.CheckConnection(); var criteria = new MonitoringObjectCriteria($"eSight = '{eSightIp}'", mpClass); var reader = MGroup.Instance.EntityObjects.GetObjectReader <PartialMonitoringObject>( criteria, ObjectQueryOptions.Default); var dns = reader.ToList().Select(x => x.Path).ToList(); var discovery = new IncrementalDiscoveryData(); dns.ForEach( dn => { var existingObject = this.GetComputerByDn(dn); if (existingObject != null) { discovery.Remove(existingObject); } }); discovery.Commit(this.MontioringConnector); } catch (Exception ex) { HWLogger.SERVICE.Error("RemoverServers", ex); } }
public IHttpActionResult EnableComputerMaintenance(SCOMComputerMaintenanceModel Data) { ManagementPackClassCriteria classCriteria = new ManagementPackClassCriteria("Name = 'Microsoft.Windows.Computer'"); IList <ManagementPackClass> monClasses = mg.EntityTypes.GetClasses(classCriteria); MonitoringObjectCriteria criteria = new MonitoringObjectCriteria(string.Format("Name = '{0}'", Data.DisplayName.ToString()), monClasses[0]); List <MonitoringObject> monObjects = new List <MonitoringObject>(); List <SCOMComputerMaintenanceModel> MaintenanceComputers = new List <SCOMComputerMaintenanceModel>(); //travers trough all classes to get monitoring objects foreach (ManagementPackClass monClass in monClasses) { monObjects.AddRange(mg.EntityObjects.GetObjectReader <MonitoringObject>(criteria, ObjectQueryOptions.Default)); } foreach (MonitoringObject monObject in monObjects) { if (!monObject.InMaintenanceMode) { { //set maintenance properties DateTime startTime = DateTime.UtcNow; DateTime schedEndTime = DateTime.UtcNow.AddMinutes(Data.Minutes); MaintenanceModeReason reason = MaintenanceModeReason.PlannedOther; string comment = Data.comment; monObject.ScheduleMaintenanceMode(startTime, schedEndTime, reason, comment); //Add properties to list SCOMComputerMaintenanceModel maintenanceComputer = new SCOMComputerMaintenanceModel(); maintenanceComputer.DisplayName = monObject.DisplayName; maintenanceComputer.EndTime = schedEndTime; maintenanceComputer.Minutes = Data.Minutes; maintenanceComputer.comment = comment; //add computers to list MaintenanceComputers.Add(maintenanceComputer); } } //If computer already in maintenance. Throw conflict message else { MaintenanceWindow MaintenanceWindow = monObject.GetMaintenanceWindow(); SCOMComputerMaintenanceModel maintenanceComputer = new SCOMComputerMaintenanceModel(); HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.Conflict); message.Content = new StringContent("Computer already in maintenance " + MaintenanceWindow.ScheduledEndTime); throw new HttpResponseException(message); } } //Return list of computers as Json return(Json(MaintenanceComputers)); }
/// <summary> /// The get object. /// </summary> /// <param name="expression">The expression.</param> /// <param name="mpClass">The class.</param> /// <returns>The <see cref="MonitoringObject" />.</returns> public MonitoringObject GetObject(string expression, ManagementPackClass mpClass) { MGroup.Instance.CheckConnection(); var criteria = new MonitoringObjectCriteria(expression, mpClass); var reader = MGroup.Instance.EntityObjects.GetObjectReader <MonitoringObject>(criteria, ObjectQueryOptions.Default); return(reader.FirstOrDefault()); }
/// <summary> /// UnionId是否存在 /// </summary> /// <param name="unionId">The device identifier.</param> /// <param name="mpClass">The mp class.</param> /// <returns>PartialMonitoringObject.</returns> public bool ExsitsUnionId(string unionId, ManagementPackClass mpClass) { MGroup.Instance.CheckConnection(); var criteria = new MonitoringObjectCriteria($"UnionId = '{unionId}'", mpClass); var reader = MGroup.Instance.EntityObjects.GetObjectReader <PartialMonitoringObject>(criteria, ObjectQueryOptions.Default); return(reader.Any()); }
/// <summary> /// Gets the object by device identifier. /// </summary> /// <param name="mpClass">The mp class.</param> /// <param name="deviceId">The device identifier.</param> /// <returns>PartialMonitoringObject.</returns> /// <exception cref="System.Exception">e</exception> private PartialMonitoringObject GetObjectByDeviceId(ManagementPackClass mpClass, string deviceId) { var criteria = new MonitoringObjectCriteria($"DN = '{deviceId}'", mpClass); var reader = MGroup.Instance.EntityObjects.GetObjectReader <PartialMonitoringObject>(criteria, ObjectQueryOptions.Default); if (!reader.Any()) { throw new Exception($"cannot find DN '{deviceId}'"); } return(reader.First()); }
/// <summary> /// Get monitoring device object by "SCOM Object Id" /// </summary> /// <param name="objectId">SCOM Object Id</param> /// <returns></returns> public static MonitoringDeviceObject GetDeviceByObjectId(ManagementPackClass mpClass, string objectId) { var criteria = new MonitoringObjectCriteria($"UnionId = '{objectId}'", mpClass); var objectReader = MGroup.Instance.EntityObjects.GetObjectReader <MonitoringObject>(criteria, ObjectQueryOptions.Default); if (!objectReader.Any()) { return(null); } return(new MonitoringDeviceObject(objectId, mpClass, objectReader.FirstOrDefault())); }
/// <summary> /// Gets the object by union identifier. /// </summary> /// <param name="mpClass">The mp class.</param> /// <param name="unionId">The union identifier.</param> /// <returns>PartialMonitoringObject.</returns> public PartialMonitoringObject GetObjectByUnionId(ManagementPackClass mpClass, string unionId) { var criteria = new MonitoringObjectCriteria($"UnionId = '{unionId}'", mpClass); var reader = MGroup.Instance.EntityObjects.GetObjectReader <PartialMonitoringObject>(criteria, ObjectQueryOptions.Default); if (!reader.Any()) { return(null); //throw new Exception($"cannot find unionId :'{unionId}'"); } return(reader.First()); }
public IHttpActionResult GetLinuxComputersByName(string ComputerName) { ManagementPackClassCriteria classCriteria = new ManagementPackClassCriteria("Name = 'Microsoft.Linux.Computer'"); IList <ManagementPackClass> monitoringClasses = mg.EntityTypes.GetClasses(classCriteria); if (string.IsNullOrEmpty(ComputerName)) { throw new HttpResponseException(Request .CreateResponse(HttpStatusCode.BadRequest)); } else { MonitoringObjectCriteria criteria = new MonitoringObjectCriteria(string.Format("Name = '{0}'", ComputerName), monitoringClasses[0]); List <PartialMonitoringObject> linuxComputerObjects = new List <PartialMonitoringObject>(); IObjectReader <PartialMonitoringObject> reader = mg.EntityObjects.GetObjectReader <PartialMonitoringObject>(criteria, ObjectQueryOptions.Default); linuxComputerObjects.AddRange(reader); //Check if computers are in list if (linuxComputerObjects.Count > 0) { List <SCOMComputerModel> SCOMLinuxComputers = new List <SCOMComputerModel>(); foreach (PartialMonitoringObject linuxComputerObject in linuxComputerObjects) { SCOMComputerModel SCOMComputer = new SCOMComputerModel(); SCOMComputer.id = linuxComputerObject.Id; SCOMComputer.displayName = linuxComputerObject.DisplayName; SCOMComputer.healthState = linuxComputerObject.HealthState.ToString(); SCOMComputer.inMaintenance = linuxComputerObject.InMaintenanceMode; SCOMComputer.isAvailable = linuxComputerObject.IsAvailable; SCOMLinuxComputers.Add(SCOMComputer); } //Successful return return(Json(SCOMLinuxComputers)); } //If computer cannot be found else { HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.NotFound); message.Content = new StringContent("Cannot find Computer. Please see input"); throw new HttpResponseException(message); } } }
/// <summary> /// Removes the server from m group. /// </summary> /// <param name="fdIp">The fd ip.</param> public void RemoveEnclosureByFd(string fdIp) { try { HWLogger.GetFdSdkLogger(fdIp).Info($"RemoveEnclosureByFd.[{fdIp}]"); MGroup.Instance.CheckConnection(); var criteria = new MonitoringObjectCriteria($"Name like '%{fdIp}%'", EnclosureClass); var devices = MGroup.Instance.EntityObjects.GetObjectReader <MonitoringObject>(criteria, ObjectQueryOptions.Default).ToList(); if (devices.Any()) { var discovery = new IncrementalDiscoveryData(); devices.ForEach(device => discovery.Remove(device)); discovery.Commit(this.MontioringConnector); } } catch (Exception ex) { HWLogger.GetFdSdkLogger(fdIp).Error(ex, "RemoveEnclosureByFd"); } }
/// <summary> /// 根据eSight删除Server以及父级的Computer /// </summary> /// <param name="mpClass">The class.</param> /// <param name="eSightIp">The eSightIp.</param> public void RemoverServersByESight(ManagementPackClass mpClass, string eSightIp) { try { HWLogger.GetESightSdkLogger(eSightIp).Info($"RemoverServersByESight.[{eSightIp}]"); MGroup.Instance.CheckConnection(); var criteria = new MonitoringObjectCriteria($"eSight = '{eSightIp}'", mpClass); var devices = MGroup.Instance.EntityObjects.GetObjectReader <MonitoringObject>(criteria, ObjectQueryOptions.Default).ToList(); if (devices.Any()) { var discovery = new IncrementalDiscoveryData(); devices.ForEach(device => discovery.Remove(device)); discovery.Commit(this.MontioringConnector); } } catch (Exception ex) { HWLogger.GetESightSdkLogger(eSightIp).Error("RemoverServersByESight", ex); } }
/// <summary> /// Removes the server by device identifier. /// </summary> /// <param name="eSightIp">The e sight ip.</param> /// <param name="deviceId">The device identifier.</param> public void RemoveServerByDeviceId(string eSightIp, string deviceId) { try { HWLogger.GetESightSdkLogger(eSightIp).Info($"RemoveServerByDeviceId.[{deviceId}]"); MGroup.Instance.CheckConnection(); var criteria = new MonitoringObjectCriteria($"DN = '{deviceId}'", HuaweiServerClass); var reader = MGroup.Instance.EntityObjects.GetObjectReader <MonitoringObject>(criteria, ObjectQueryOptions.Default); if (reader.Any()) { var existingObject = reader.First(); var discovery = new IncrementalDiscoveryData(); discovery.Remove(existingObject); discovery.Commit(this.MontioringConnector); } } catch (Exception e) { HWLogger.GetESightSdkLogger(eSightIp).Error($"RemoveServerByDeviceId.", e); } }
//This is sending the Command in the button the user selected to SCOM, looking for the task protected void ButtonClick(object sender, GridViewCommandEventArgs e) { string query = ""; if (e.CommandName == "startService" || e.CommandName == "stopService" || e.CommandName == "killService" || e.CommandName == "restartService" || e.CommandName == "Cred") { query = "DisplayName = '" + System.Configuration.ConfigurationManager.AppSettings[e.CommandName] + "'"; int index = Convert.ToInt32(e.CommandArgument); GridViewRow row = ServiceView.Rows[index]; string ServiceName = row.Cells[0].Text; ManagementGroup mg = new ManagementGroup(msserver); ManagementPackTaskCriteria taskCriteria = new ManagementPackTaskCriteria(query); IList <ManagementPackTask> tasks = mg.TaskConfiguration.GetTasks(taskCriteria); ManagementPackTask task = null; if (tasks.Count == 1) { task = tasks[0]; } else { Server.Transfer("~/ErrorPage.aspx?Error=6"); } // Get the agent class. query = "Name = 'Microsoft.Windows.Computer'"; ManagementPackClassCriteria criteria = new ManagementPackClassCriteria(query); IList <ManagementPackClass> classes = mg.EntityTypes.GetClasses(criteria); if (classes.Count != 1) { Server.Transfer("~/ErrorPage.aspx?Error=5"); } // Create a MonitoringObject list containing a specific agent (the // target of the task). if (Request.QueryString["id"] == null) { Server.Transfer("~/ErrorPage.aspx?Error=1"); } string fullAgentName = Request.QueryString["id"]; List <MonitoringObject> targets = new List <MonitoringObject>(); query = "Id = '" + fullAgentName + "'"; MonitoringObjectCriteria targetCriteria = new MonitoringObjectCriteria(query, classes[0]); targets.AddRange(mg.EntityObjects.GetObjectReader <MonitoringObject>(targetCriteria, ObjectQueryOptions.Default)); if (targets.Count != 1) { Server.Transfer("~/ErrorPage.aspx?Error=3"); } // Use the default task configuration. Microsoft.EnterpriseManagement.Runtime.TaskConfiguration config = new Microsoft.EnterpriseManagement.Runtime.TaskConfiguration(); if (userchanged) { SecureString theSecureString = new NetworkCredential("", userpassword).SecurePassword; Microsoft.EnterpriseManagement.Runtime.TaskCredentials cred = new Microsoft.EnterpriseManagement.Runtime.WindowsTaskCredentials(userdomain, username, theSecureString); config.Credentials = cred; } IList <Microsoft.EnterpriseManagement.Configuration.ManagementPackOverrideableParameter> overrideparams = task.GetOverrideableParameters(); config.Overrides.Add(new Pair <ManagementPackOverrideableParameter, string>(overrideparams[1], ServiceName)); // Run the task. IList <Microsoft.EnterpriseManagement.Runtime.TaskResult> results = mg.TaskRuntime.ExecuteTask(targets, task, config); if (results.Count == 0) { Server.Transfer("~/ErrorPage.aspx?Error=4"); } } Response.Redirect(Request.RawUrl); }
protected void Page_Load(object sender, EventArgs e) { if (userchanged) { logedinuser.Text = ". Tasks will run with the user:"******"\\" + username; } //Connect to SCOM ManagementGroup mg = new ManagementGroup(msserver); if (!(mg.IsConnected)) { Server.Transfer("~/ErrorPage.aspx?Error=6"); } string query = "DisplayName = '" + System.Configuration.ConfigurationManager.AppSettings["GetServices"] + "'"; ManagementPackTaskCriteria taskCriteria = new ManagementPackTaskCriteria(query); IList <ManagementPackTask> tasks = mg.TaskConfiguration.GetTasks(taskCriteria); ManagementPackTask task = null; if (tasks.Count == 1) { task = tasks[0]; } else { Server.Transfer("~/ErrorPage.aspx?Error=2"); } // Get the agent class. query = "Name = 'Microsoft.Windows.Computer'"; ManagementPackClassCriteria criteria = new ManagementPackClassCriteria(query); IList <ManagementPackClass> classes = mg.EntityTypes.GetClasses(criteria); if (classes.Count != 1) { Server.Transfer("~/ErrorPage.aspx?Error=5"); } // Create a MonitoringObject list containing a specific agent (the // target of the task). string fullAgentName; if (Request.QueryString["id"] == null && Request.QueryString["DisplayName"] == null) { Server.Transfer("~/ErrorPage.aspx?Error=1"); } else if (Request.QueryString["id"] != null) { fullAgentName = Request.QueryString["id"]; query = "Id = '" + fullAgentName + "'"; objectid = fullAgentName; } else if (Request.QueryString["DisplayName"] != null) { fullAgentName = Request.QueryString["DisplayName"]; query = "DisplayName = '" + fullAgentName + "'"; objectid = fullAgentName; } else { //to be developed } List <MonitoringObject> targets = new List <MonitoringObject>(); MonitoringObjectCriteria targetCriteria = new MonitoringObjectCriteria(query, classes[0]); targets.AddRange(mg.EntityObjects.GetObjectReader <MonitoringObject>(targetCriteria, ObjectQueryOptions.Default)); if (targets.Count != 1) { Server.Transfer("~/ErrorPage.aspx?Error=3"); } //Get user filter options Microsoft.EnterpriseManagement.Runtime.TaskConfiguration config = new Microsoft.EnterpriseManagement.Runtime.TaskConfiguration(); try { IList <Microsoft.EnterpriseManagement.Configuration.ManagementPackOverrideableParameter> overrideparams = task.GetOverrideableParameters(); //user Service State Filter string State = Request.QueryString["state"]; State = $"($_.startmode -match \"{State}\")"; //user Service Status filter string Status = Request.QueryString["status"]; Status = $"($_.state -match \"{Status}\")"; //user Service Name like filter string ServiceName = Request.QueryString["name"]; //user Service sorting string Sort = Request.QueryString["sort"]; string overridevalue = ""; if (ServiceName != null) { overridevalue = $"gwmi -Query \"select * from win32_service where name like '%{ServiceName}%'\" | select displayname,name,startmode,state"; } else { overridevalue = "gwmi -Query \"select * from win32_service\" | select displayname,name,startmode,state"; } if ((Request.QueryString["state"] != null) && (Request.QueryString["status"]) != null) { overridevalue += "| ?{" + State + " -and " + Status + "}"; } else if ((Request.QueryString["state"] != null)) { overridevalue += "| ?{" + State + "}"; } else if ((Request.QueryString["status"] != null)) { overridevalue += "| ?{" + Status + "}"; } else { //do nothing } if ((Request.QueryString["sort"] != null)) { string sort = Request.QueryString["sort"]; sort = sort.Replace("|", ","); overridevalue = overridevalue + "| sort " + sort; } else { overridevalue = overridevalue + "| sort-object -property @{Expression = {$_.State}; Ascending = $false},startmode ,name"; } config.Overrides.Add(new Pair <ManagementPackOverrideableParameter, string>(overrideparams[1], overridevalue)); } catch { Server.Transfer("~/ErrorPage.aspx?Error=7"); } // Run the task. try { IList <Microsoft.EnterpriseManagement.Runtime.TaskResult> results = mg.TaskRuntime.ExecuteTask(targets, task, config); if (results.Count == 0) { Server.Transfer("~/ErrorPage.aspx?Error=4"); } // Display the task results. int resultNo = 0; foreach (Microsoft.EnterpriseManagement.Runtime.TaskResult res in results) { resultNo++; if (res.Status == Microsoft.EnterpriseManagement.Runtime.TaskStatus.Failed) { } else { //convert task result XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(res.Output); string xPathQry = @"/DataItem/Description"; System.Xml.XmlNode TaskDescription = xmlDoc.SelectSingleNode(xPathQry); string Servicelist = TaskDescription.OuterXml.ToString(); Servicelist = Servicelist.Replace("<Description>", "").Replace("</Description>", ""); // put result in table //DataTable dt = new DataTable(); dt.Columns.AddRange(new DataColumn[4] { new DataColumn("Name", typeof(string)), new DataColumn("DisplayName", typeof(string)), new DataColumn("StartType", typeof(string)), new DataColumn("Status", typeof(string)) }); //Read the contents of CSV file. string csvData = Servicelist; string test = csvData.Split('\r')[0].ToString(); if (test == "<Description />") { Server.Transfer("~/ErrorPage.aspx?Error=7"); } string[] stringSeparators = new string[] { "\r\n" }; foreach (string row in csvData.Split(stringSeparators, StringSplitOptions.None)) { int i = 0; try { if (!string.IsNullOrEmpty(row)) { dt.Rows.Add(); dt.Rows[dt.Rows.Count - 1][0] = row.Split(',')[0]; dt.Rows[dt.Rows.Count - 1][1] = row.Split(',')[1]; dt.Rows[dt.Rows.Count - 1][2] = row.Split(',')[2]; dt.Rows[dt.Rows.Count - 1][3] = row.Split(',')[3].Replace(";", ""); i++; } string privrew = row.ToString(); } catch { } } ServiceView.DataSource = dt; ServiceView.DataBind(); } } } catch { Server.Transfer("~/ErrorPage.aspx?Error=0"); } }
public IHttpActionResult GetLinuxComputersByNameDetailed(string ComputerName) { ManagementPackClassCriteria classCriteria = new ManagementPackClassCriteria("Name = 'Microsoft.Linux.Computer'"); IList <ManagementPackClass> monitoringClasses = mg.EntityTypes.GetClasses(classCriteria); if (string.IsNullOrEmpty(ComputerName)) { throw new HttpResponseException(Request .CreateResponse(HttpStatusCode.BadRequest)); } else { MonitoringObjectCriteria criteria = new MonitoringObjectCriteria(string.Format("Name = '{0}'", ComputerName), monitoringClasses[0]); List <PartialMonitoringObject> linuxComputerObjects = new List <PartialMonitoringObject>(); IObjectReader <PartialMonitoringObject> reader = mg.EntityObjects.GetObjectReader <PartialMonitoringObject>(criteria, ObjectQueryOptions.Default); linuxComputerObjects.AddRange(reader); //Check if computers are in list if (linuxComputerObjects.Count > 0) { List <SCOMComputerModelDetailed> SCOMLinuxComputers = new List <SCOMComputerModelDetailed>(); foreach (PartialMonitoringObject linuxComputerObject in linuxComputerObjects) { ReadOnlyCollection <PartialMonitoringObject> RelatedObjects = linuxComputerObject.GetRelatedPartialMonitoringObjects(); SCOMComputerModelDetailed SCOMComputer = new SCOMComputerModelDetailed(); SCOMComputer.id = linuxComputerObject.Id; SCOMComputer.displayName = linuxComputerObject.DisplayName; SCOMComputer.healthState = linuxComputerObject.HealthState.ToString(); SCOMComputer.inMaintenance = linuxComputerObject.InMaintenanceMode; SCOMComputer.isAvailable = linuxComputerObject.IsAvailable; SCOMComputer.relatedObjectsCount = RelatedObjects.Count(); //Populate a list of child objects List <SCOMComputerModelChild> SCOMLinuxComputerChildObjects = new List <SCOMComputerModelChild>(); foreach (PartialMonitoringObject RelatedObject in RelatedObjects) { SCOMComputerModelChild ChildObject = new SCOMComputerModelChild(); ChildObject.id = RelatedObject.Id; ChildObject.displayName = RelatedObject.DisplayName; ChildObject.fullName = RelatedObject.FullName; ChildObject.inMaintenance = RelatedObject.InMaintenanceMode; ChildObject.path = RelatedObject.Path; ChildObject.healthState = RelatedObject.HealthState.ToString(); SCOMLinuxComputerChildObjects.Add(ChildObject); } //Add the list of all child objects to property of the computer object SCOMComputer.relatedObjects = SCOMLinuxComputerChildObjects; //Add the computer to the list to return SCOMLinuxComputers.Add(SCOMComputer); } //Successful return return(Json(SCOMLinuxComputers)); } //If computer cannot be found else { HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.NotFound); message.Content = new StringContent("Cannot find Computer. Please see input"); throw new HttpResponseException(message); } } }
/// <summary> /// Inserts the event. /// </summary> /// <param name="mpClass">The mp class.</param> /// <param name="eventData">The event data.</param> public void InsertEvent(ManagementPackClass mpClass, EventData eventData) { try { MGroup.Instance.CheckConnection(); var criteria = new MonitoringObjectCriteria($"DN = '{eventData.Dn}'", mpClass); var reader = MGroup.Instance.EntityObjects.GetObjectReader <PartialMonitoringObject>(criteria, ObjectQueryOptions.Default); if (!reader.Any()) { throw new Exception($"cannot find DN '{eventData.Dn}'"); } var obj = reader.First(); { if (eventData.OptType == 1 || eventData.OptType == 6) { obj.InsertCustomMonitoringEvent(eventData.ToCustomMonitoringEvent()); } else if (eventData.OptType == 2) { var alerts = obj.GetMonitoringAlerts().Where(x => x.CustomField6 == eventData.AlarmSn.ToString()).ToList(); if (!alerts.Any()) { // throw new Exception($"cannot find alert '{eventData.AlarmSn}'"); } else { alerts.ForEach(alert => { alert.ResolutionState = this.CloseState.ResolutionState; alert.Update(eventData.AlarmData.Comments); }); } } else if (eventData.OptType == 5) { var alerts = obj.GetMonitoringAlerts().Where(x => x.CustomField6 == eventData.AlarmSn.ToString()).ToList(); if (!alerts.Any()) { // 未找到,则当做是新增告警 obj.InsertCustomMonitoringEvent(eventData.ToCustomMonitoringEvent()); } else { alerts.ForEach(alert => { alert.CustomField2 = eventData.AlarmData.AdditionalInformation; alert.CustomField3 = eventData.AlarmData.AdditionalText; alert.CustomField4 = eventData.AlarmData.AlarmId.ToString(); alert.CustomField5 = eventData.AlarmData.AlarmName; alert.CustomField6 = eventData.AlarmData.AlarmSN.ToString(); alert.CustomField7 = TimeHelper.StampToDateTime(eventData.AlarmData.ArrivedTime.ToString()).ToString(); alert.CustomField8 = eventData.AlarmData.DevCsn.ToString(); alert.CustomField9 = eventData.AlarmData.EventType.ToString(); alert.CustomField10 = eventData.AlarmData.MoName; alert.Update(eventData.AlarmData.Comments); }); } } else { HWLogger.SERVICE.Error($"Unknown optType {eventData.OptType}"); } } } catch (Exception ex) { HWLogger.SERVICE.Error(ex); throw; } }