private void Repopulate()
        {
            if (_XenObject == null)
            {
                return;
            }
            try
            {
                var perfmonDefinitions = PerfmonDefinition.GetPerfmonDefinitions(_XenObject);

                for (int i = 0; i < perfmonDefinitions.Length; i++)
                {
                    PerfmonDefinition perfmonDefinition = perfmonDefinitions[i];

                    if (perfmonDefinition.IsCPUUsage)
                    {
                        cpuAlert.Populate(perfmonDefinition);
                    }
                    else if (perfmonDefinition.IsNetworkUsage)
                    {
                        netAlert.Populate(perfmonDefinition);
                    }
                    else if (perfmonDefinition.IsDiskUsage)
                    {
                        diskAlert.Populate(perfmonDefinition);
                    }
                    else if (perfmonDefinition.IsMemoryUsage)
                    {
                        memoryAlert.Populate(perfmonDefinition);
                    }
                    else if (perfmonDefinition.IsSrUsage)
                    {
                        srAlert.Populate(perfmonDefinition);
                    }
                    else if (perfmonDefinition.IsDom0MemoryUsage)
                    {
                        dom0MemoryAlert.Populate(perfmonDefinition);
                    }
                    else if (perfmonDefinition.IsSrPhysicalUtilisation)
                    {
                        physicalUtilisationAlert.Populate(perfmonDefinition);
                    }
                }
            }
            catch { }
        }
示例#2
0
        protected override void Run()
        {
            if (xo == null)
            {
                return;
            }
            Host theHost = xo as Host;

            // Dom0 Memory usage alert is an exception. While configuration for all the alerts (eg. related to the Host) have to be saved to this "xo",
            // dom0 Memory usage's has to be in the Dom0's other config.
            //
            var dom0_memory_usage = perfmonDefinitions.FirstOrDefault(d => d.IsDom0MemoryUsage);

            if (dom0_memory_usage != null)
            {
                perfmonDefinitions.Remove(dom0_memory_usage);

                var dom0Vm = theHost == null ? null : theHost.ControlDomainZero;
                if (dom0Vm != null)
                {
                    var dom0PerfmonDefinitions = PerfmonDefinition.GetPerfmonDefinitions(dom0Vm).ToList();

                    bool found = false;
                    for (int ii = 0; ii < dom0PerfmonDefinitions.Count; ii++)
                    {
                        var pmd = dom0PerfmonDefinitions[ii];
                        if (pmd != null && pmd.IsDom0MemoryUsage)
                        {
                            dom0PerfmonDefinitions[ii] = dom0_memory_usage;
                            found = true;
                            break;
                        }
                    }

                    if (!found)
                    {
                        dom0PerfmonDefinitions.Add(dom0_memory_usage);
                    }

                    string dom0PerfmonConfigXML = PerfmonDefinition.GetPerfmonDefinitionXML(dom0PerfmonDefinitions);
                    Helpers.SetOtherConfig(Session, dom0Vm, PerfmonDefinition.PERFMON_KEY_NAME, dom0PerfmonConfigXML);
                }
            }
            else
            {
                var dom0Vm = theHost == null ? null : theHost.ControlDomainZero;
                if (dom0Vm != null)
                {
                    var dom0PerfmonDefinitions = PerfmonDefinition.GetPerfmonDefinitions(dom0Vm).ToList();

                    int found = dom0PerfmonDefinitions.RemoveAll(d => d.IsDom0MemoryUsage);
                    if (found > 0)
                    {
                        string dom0PerfmonDefinitionsXml = PerfmonDefinition.GetPerfmonDefinitionXML(dom0PerfmonDefinitions);
                        Helpers.SetOtherConfig(Session, dom0Vm, PerfmonDefinition.PERFMON_KEY_NAME, dom0PerfmonDefinitionsXml);
                    }
                }
            }

            if (perfmonDefinitions == null || perfmonDefinitions.Count == 0)
            {
                Helpers.RemoveFromOtherConfig(Session, xo, PerfmonDefinition.PERFMON_KEY_NAME);
            }
            else
            {
                string perfmonConfigXML = PerfmonDefinition.GetPerfmonDefinitionXML(perfmonDefinitions);
                Helpers.SetOtherConfig(Session, xo, PerfmonDefinition.PERFMON_KEY_NAME, perfmonConfigXML);
            }

            var hosts = new List <Host>();

            if (theHost == null)
            {
                VM vm = xo as VM;
                if (vm == null)
                {
                    SR sr = xo as SR;
                    if (sr != null)
                    {
                        foreach (var pbdRef in sr.PBDs)
                        {
                            PBD pbd = sr.Connection.Resolve(pbdRef);
                            if (pbd == null)
                            {
                                continue;
                            }

                            var host = pbd.Connection.Resolve(pbd.host);
                            if (host != null)
                            {
                                hosts.Add(host);
                            }
                        }
                    }
                }
                else
                {
                    var host = vm.Home();
                    if (host != null)
                    {
                        hosts.Add(host);
                    }
                }
            }
            else
            {
                hosts.Add(theHost);
            }

            foreach (var host in hosts)
            {
                try
                {
                    //NB The refresh causes the server to re-read the configuration
                    //immediately. But even if the refresh fails, the change will be
                    //noticed, just a bit later.

                    new ExecutePluginAction(host.Connection, host,
                                            XenServerPlugins.PLUGIN_PERFMON_PLUGIN,
                                            XenServerPlugins.PLUGIN_PERFMON_FUNCTION_REFRESH,
                                            new Dictionary <string, string>(), true).RunExternal(Session);
                }
                catch (Exception e)
                {
                    // Handle perfmon randomly being stopped
                    if (e.Message.StartsWith(XenServerPlugins.PLUGIN_PERFMON_ERROR_NOT_RUNNING))
                    {
                        // start perfmon and try again
                        try
                        {
                            new ExecutePluginAction(host.Connection, host,
                                                    XenServerPlugins.PLUGIN_PERFMON_PLUGIN,
                                                    XenServerPlugins.PLUGIN_PERFMON_FUNCTION_START,
                                                    new Dictionary <string, string>(), true).RunExternal(Session);

                            new ExecutePluginAction(host.Connection, host,
                                                    XenServerPlugins.PLUGIN_PERFMON_PLUGIN,
                                                    XenServerPlugins.PLUGIN_PERFMON_FUNCTION_REFRESH,
                                                    new Dictionary <string, string>(), true).RunExternal(Session);
                        }
                        catch (Exception ex)
                        {
                            log.DebugFormat("Perfmon refresh failed ({0}). Alerts will start being produced within half an hour.", ex.Message);
                        }
                    }
                    else
                    {
                        log.DebugFormat("Perfmon refresh failed ({0}). Alerts will start being produced within half an hour.", e.Message);
                    }
                }
            }
        }
示例#3
0
        private void Repopulate()
        {
            if (_XenObject == null)
            {
                return;
            }

            try
            {
                var perfmonDefinitions = PerfmonDefinition.GetPerfmonDefinitions(_XenObject);

                for (int i = 0; i < perfmonDefinitions.Length; i++)
                {
                    PerfmonDefinition perfmonDefinition = perfmonDefinitions[i];

                    if (perfmonDefinition.IsCPUUsage)
                    {
                        cpuAlert.Populate(perfmonDefinition);
                    }
                    else if (perfmonDefinition.IsNetworkUsage)
                    {
                        netAlert.Populate(perfmonDefinition);
                    }
                    else if (perfmonDefinition.IsDiskUsage)
                    {
                        diskAlert.Populate(perfmonDefinition);
                    }
                    else if (perfmonDefinition.IsMemoryUsage)
                    {
                        memoryAlert.Populate(perfmonDefinition);
                    }
                    else if (perfmonDefinition.IsSrUsage)
                    {
                        srAlert.Populate(perfmonDefinition);
                    }
                    else if (perfmonDefinition.IsSrPhysicalUtilisation)
                    {
                        physicalUtilisationAlert.Populate(perfmonDefinition);
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error("Unexpected error during populating controls for Alerts. Exception swallowed.", ex); //Adding this to pre-existing empty catch block to log it at least
            }

            // Dom0 memory usage is stored in the other_config of the Dom0 vm not on the host (or any other XenObject)
            try
            {
                var host = _XenObject as Host;
                if (host != null)
                {
                    var dom0 = host.ControlDomainZero;

                    if (dom0 != null)
                    {
                        var controlDomainPerfmonDefinitions = PerfmonDefinition.GetPerfmonDefinitions(dom0);

                        if (controlDomainPerfmonDefinitions != null)
                        {
                            for (int i = 0; i < controlDomainPerfmonDefinitions.Length; i++)
                            {
                                var def = controlDomainPerfmonDefinitions[i];

                                if (def != null && def.IsDom0MemoryUsage)
                                {
                                    dom0MemoryAlert.Populate(def);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error("Unexpected error during populating controls for Dom0 Memory Usage alert. Exception swallowed.", ex);     //Any error here will cause the controls not being populated, but they will be still usable.
            }
        }