/// <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.");
            }
        }
Пример #2
0
        /// <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);
     }
 }
Пример #5
0
        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());
        }
Пример #8
0
        /// <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");
     }
 }
Пример #13
0
 /// <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);
     }
 }
Пример #14
0
 /// <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;
            }
        }