示例#1
0
 private DiscoveryResultBase FilterItems(
     DiscoveryResultBase discoveryResult,
     Func <IDiscoveryPlugin, DiscoveryResultBase, DiscoveryPluginResultBase> filterFunction)
 {
     using (IEnumerator <IDiscoveryPlugin> enumerator1 = ((IEnumerable <IDiscoveryPlugin>)DiscoveryHelper.GetOrderedDiscoveryPlugins()).GetEnumerator())
     {
         while (((IEnumerator)enumerator1).MoveNext())
         {
             IDiscoveryPlugin          current1         = enumerator1.Current;
             DiscoveryPluginResultBase pluginResultBase = filterFunction(current1, discoveryResult);
             if (pluginResultBase != null)
             {
                 pluginResultBase.set_PluginTypeName(((object)current1).GetType().FullName);
                 Type returnedType = ((object)pluginResultBase).GetType();
                 List <DiscoveryPluginResultBase> list = ((IEnumerable <DiscoveryPluginResultBase>)discoveryResult.get_PluginResults()).Where <DiscoveryPluginResultBase>((Func <DiscoveryPluginResultBase, bool>)(item => ((object)item).GetType() != returnedType)).ToList <DiscoveryPluginResultBase>();
                 discoveryResult.get_PluginResults().Clear();
                 discoveryResult.get_PluginResults().Add(pluginResultBase);
                 using (List <DiscoveryPluginResultBase> .Enumerator enumerator2 = list.GetEnumerator())
                 {
                     while (enumerator2.MoveNext())
                     {
                         DiscoveryPluginResultBase current2 = enumerator2.Current;
                         discoveryResult.get_PluginResults().Add(current2);
                     }
                 }
             }
         }
     }
     return(discoveryResult);
 }
示例#2
0
        private void MergePluginResults(
            int?profileId,
            DiscoveryPluginItems <DiscoveryPluginResultBase> results,
            DiscoveryPluginItems <DiscoveryPluginResultBase> partialResultsToMerge)
        {
            DiscoveryPluginResultObjectMapping resultObjectMapping  = new DiscoveryPluginResultObjectMapping();
            List <DiscoveryPluginResultBase>   pluginResultBaseList = new List <DiscoveryPluginResultBase>();

            using (IEnumerator <DiscoveryPluginResultBase> enumerator = results.GetEnumerator())
            {
                while (((IEnumerator)enumerator).MoveNext())
                {
                    DiscoveryPluginResultBase item             = enumerator.Current;
                    DiscoveryPluginResultBase pluginResultBase = ((IEnumerable <DiscoveryPluginResultBase>)partialResultsToMerge).Except <DiscoveryPluginResultBase>((IEnumerable <DiscoveryPluginResultBase>)pluginResultBaseList).FirstOrDefault <DiscoveryPluginResultBase>((Func <DiscoveryPluginResultBase, bool>)(x => ((object)x).GetType() == ((object)item).GetType()));
                    if (pluginResultBase != null)
                    {
                        if (!(item is IDiscoveryPluginResultMerge pluginResultMerge))
                        {
                            PartialDiscoveryResultsContainer._log.WarnFormat("Plugin discovery results '{0}' do not implement IDiscoveryPluginResultMerge interface and will not be merged with other results instances.", (object)((object)item).GetType());
                        }
                        else
                        {
                            pluginResultMerge.MergeResults(pluginResultBase, resultObjectMapping, profileId);
                            pluginResultBaseList.Add(pluginResultBase);
                        }
                    }
                }
            }
示例#3
0
        private List <DiscoveryPluginResultBase> Linearize(
            IEnumerable <DiscoveryPluginResultBase> input)
        {
            List <DiscoveryPluginResultBase>        pluginResultBaseList1 = (List <DiscoveryPluginResultBase>)Linearizer.Linearize <DiscoveryPluginResultBase>((IEnumerable <Linearizer.Input <M0> >)input.Select <DiscoveryPluginResultBase, Linearizer.Input <DiscoveryPluginResultBase> >((Func <DiscoveryPluginResultBase, Linearizer.Input <DiscoveryPluginResultBase> >)(item => (Linearizer.Input <DiscoveryPluginResultBase>)Linearizer.CreateInputItem <DiscoveryPluginResultBase>((M0)item, (IEnumerable <M0>)item.GetPrerequisites(input)))).ToArray <Linearizer.Input <DiscoveryPluginResultBase> >(), true, true);
            IEnumerable <DiscoveryPluginResultBase> collection            = ((IEnumerable <DiscoveryPluginResultBase>)pluginResultBaseList1).Where <DiscoveryPluginResultBase>((Func <DiscoveryPluginResultBase, bool>)(item => item is CoreDiscoveryPluginResult && item.get_PluginTypeName() == "SolarWinds.Orion.Core.DiscoveryPlugin.CoreDiscoveryPlugin"));
            List <DiscoveryPluginResultBase>        pluginResultBaseList2 = new List <DiscoveryPluginResultBase>();

            pluginResultBaseList2.AddRange(collection);
            for (int index = 0; index < pluginResultBaseList1.Count; ++index)
            {
                DiscoveryPluginResultBase pluginResultBase = pluginResultBaseList1[index];
                if (!(pluginResultBase is CoreDiscoveryPluginResult) || !(pluginResultBase.get_PluginTypeName() == "SolarWinds.Orion.Core.DiscoveryPlugin.CoreDiscoveryPlugin"))
                {
                    pluginResultBaseList2.Add(pluginResultBase);
                }
            }
            return(pluginResultBaseList2);
        }
        // Token: 0x060002C1 RID: 705 RVA: 0x00011544 File Offset: 0x0000F744
        private static void LoadResults(object args)
        {
            DiscoveryResultManager.LoadResultsArgs loadResultsArgs = (DiscoveryResultManager.LoadResultsArgs)args;
            Stopwatch stopwatch = new Stopwatch();

            foreach (IDiscoveryPlugin discoveryPlugin in loadResultsArgs.discoveryPlugins)
            {
                stopwatch.Restart();
                DiscoveryResultManager.log.DebugFormat("Loading results from plugin {0}", discoveryPlugin.GetType());
                DiscoveryPluginResultBase discoveryPluginResultBase = discoveryPlugin.LoadResults(loadResultsArgs.profileId);
                DiscoveryResultManager.log.DebugFormat("Loading results from plugin {0} took {1} milliseconds.", discoveryPlugin.GetType(), stopwatch.ElapsedMilliseconds);
                if (discoveryPluginResultBase == null)
                {
                    throw new Exception(string.Format("unable to get valid result for plugin {0}", discoveryPlugin.GetType()));
                }
                discoveryPluginResultBase.PluginTypeName = discoveryPlugin.GetType().FullName;
                loadResultsArgs.result.PluginResults.Add(discoveryPluginResultBase);
            }
        }
        // Token: 0x06000625 RID: 1573 RVA: 0x000251D8 File Offset: 0x000233D8
        private List <DiscoveryPluginResultBase> Linearize(IEnumerable <DiscoveryPluginResultBase> input)
        {
            List <DiscoveryPluginResultBase> list = Linearizer.Linearize <DiscoveryPluginResultBase>((from item in input
                                                                                                      select Linearizer.CreateInputItem <DiscoveryPluginResultBase>(item, item.GetPrerequisites(input))).ToArray <Linearizer.Input <DiscoveryPluginResultBase> >(), true, true);
            IEnumerable <DiscoveryPluginResultBase> collection = from item in list
                                                                 where item is CoreDiscoveryPluginResult && item.PluginTypeName == "SolarWinds.Orion.Core.DiscoveryPlugin.CoreDiscoveryPlugin"
                                                                 select item;
            List <DiscoveryPluginResultBase> list2 = new List <DiscoveryPluginResultBase>();

            list2.AddRange(collection);
            for (int i = 0; i < list.Count; i++)
            {
                DiscoveryPluginResultBase discoveryPluginResultBase = list[i];
                if (!(discoveryPluginResultBase is CoreDiscoveryPluginResult) || !(discoveryPluginResultBase.PluginTypeName == "SolarWinds.Orion.Core.DiscoveryPlugin.CoreDiscoveryPlugin"))
                {
                    list2.Add(discoveryPluginResultBase);
                }
            }
            return(list2);
        }
 // Token: 0x0600061E RID: 1566 RVA: 0x00024C38 File Offset: 0x00022E38
 private DiscoveryResultBase FilterItems(DiscoveryResultBase discoveryResult, Func <IDiscoveryPlugin, DiscoveryResultBase, DiscoveryPluginResultBase> filterFunction)
 {
     foreach (IDiscoveryPlugin discoveryPlugin in DiscoveryHelper.GetOrderedDiscoveryPlugins())
     {
         DiscoveryPluginResultBase discoveryPluginResultBase = filterFunction(discoveryPlugin, discoveryResult);
         if (discoveryPluginResultBase != null)
         {
             discoveryPluginResultBase.PluginTypeName = discoveryPlugin.GetType().FullName;
             Type returnedType = discoveryPluginResultBase.GetType();
             List <DiscoveryPluginResultBase> list = (from item in discoveryResult.PluginResults
                                                      where item.GetType() != returnedType
                                                      select item).ToList <DiscoveryPluginResultBase>();
             discoveryResult.PluginResults.Clear();
             discoveryResult.PluginResults.Add(discoveryPluginResultBase);
             foreach (DiscoveryPluginResultBase discoveryPluginResultBase2 in list)
             {
                 discoveryResult.PluginResults.Add(discoveryPluginResultBase2);
             }
         }
     }
     return(discoveryResult);
 }
示例#7
0
        private static void LoadResults(object args)
        {
            DiscoveryResultManager.LoadResultsArgs loadResultsArgs = (DiscoveryResultManager.LoadResultsArgs)args;
            Stopwatch stopwatch = new Stopwatch();

            using (IEnumerator <IDiscoveryPlugin> enumerator = ((IEnumerable <IDiscoveryPlugin>)loadResultsArgs.discoveryPlugins).GetEnumerator())
            {
                while (((IEnumerator)enumerator).MoveNext())
                {
                    IDiscoveryPlugin current = enumerator.Current;
                    stopwatch.Restart();
                    DiscoveryResultManager.log.DebugFormat("Loading results from plugin {0}", (object)((object)current).GetType());
                    DiscoveryPluginResultBase pluginResultBase = current.LoadResults(loadResultsArgs.profileId);
                    DiscoveryResultManager.log.DebugFormat("Loading results from plugin {0} took {1} milliseconds.", (object)((object)current).GetType(), (object)stopwatch.ElapsedMilliseconds);
                    if (pluginResultBase == null)
                    {
                        throw new Exception(string.Format("unable to get valid result for plugin {0}", (object)((object)current).GetType()));
                    }
                    pluginResultBase.set_PluginTypeName(((object)current).GetType().FullName);
                    loadResultsArgs.result.get_PluginResults().Add(pluginResultBase);
                }
            }
        }
示例#8
0
        public static DiscoveryResultBase GetDiscoveryResult(
            int profileId,
            IList <IDiscoveryPlugin> discoveryPlugins)
        {
            if (discoveryPlugins == null)
            {
                throw new ArgumentNullException(nameof(discoveryPlugins));
            }
            if (profileId <= 0)
            {
                throw new ArgumentException(string.Format("Invalid profile ID [{0}]", (object)profileId));
            }
            DiscoveryResultBase discoveryResultBase = new DiscoveryResultBase();

            try
            {
                DiscoveryProfileEntry profileById = DiscoveryProfileEntry.GetProfileByID(profileId);
                discoveryResultBase.set_EngineId(profileById.get_EngineID());
                discoveryResultBase.set_ProfileID(profileById.get_ProfileID());
            }
            catch (Exception ex)
            {
                string message = string.Format("Unable to load profile {0}", (object)profileId);
                DiscoveryResultManager.log.Error((object)message, ex);
                throw new Exception(message, ex);
            }
            if (((ICollection <IDiscoveryPlugin>)discoveryPlugins).Count == 0)
            {
                return(discoveryResultBase);
            }
            int  millisecondsTimeout = 300000;
            bool flag = Environment.StackTrace.Contains("ServiceModel");

            if (flag)
            {
                try
                {
                    System.Configuration.Configuration configuration = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
                    XmlDocument xmlDocument = new XmlDocument();
                    xmlDocument.Load(configuration.FilePath);
                    XmlNode xmlNode = xmlDocument.SelectSingleNode("/configuration/system.serviceModel/bindings/netTcpBinding/binding[@name=\"Core.NetTcpBinding\"]");
                    if (xmlNode != null)
                    {
                        if (xmlNode.Attributes != null)
                        {
                            millisecondsTimeout = (int)TimeSpan.Parse(xmlNode.Attributes["receiveTimeout"].Value).TotalMilliseconds;
                        }
                    }
                }
                catch (Exception ex)
                {
                    DiscoveryResultManager.log.Warn((object)"Unable to read WCF timeout from Config file.");
                }
            }
            Thread thread = new Thread(new ParameterizedThreadStart(DiscoveryResultManager.LoadResults));

            DiscoveryResultManager.LoadResultsArgs loadResultsArgs = new DiscoveryResultManager.LoadResultsArgs()
            {
                discoveryPlugins = discoveryPlugins,
                profileId        = profileId,
                result           = discoveryResultBase
            };
            thread.Start((object)loadResultsArgs);
            if (flag)
            {
                if (!thread.Join(millisecondsTimeout))
                {
                    DiscoveryResultManager.log.Error((object)"Loading results takes more time than WCF timeout is set. Enable debug logging to see which plugin takes too long.");
                    return(discoveryResultBase);
                }
            }
            else
            {
                thread.Join();
            }
            DiscoveryResultBase result = loadResultsArgs.result;

            DiscoveryFilterResultByTechnology.FilterByPriority(result, TechnologyManager.Instance);
            Stopwatch stopwatch = Stopwatch.StartNew();
            List <DiscoveryPluginResultBase> list = ((IEnumerable <DiscoveryPluginResultBase>)result.get_PluginResults()).ToList <DiscoveryPluginResultBase>();

            result.get_PluginResults().Clear();
            using (List <DiscoveryPluginResultBase> .Enumerator enumerator = list.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    DiscoveryPluginResultBase current = enumerator.Current;
                    result.get_PluginResults().Add(current.GetFilteredPluginResult());
                }
            }
            DiscoveryResultManager.log.DebugFormat("Filtering results took {0} milliseconds.", (object)stopwatch.ElapsedMilliseconds);
            GC.Collect();
            return(result);
        }
示例#9
0
        public void ImportDiscoveryResultsForConfiguration(
            DiscoveryImportConfiguration importCfg,
            Guid importID)
        {
            DiscoveryLogic.log.DebugFormat("Loading discovery results.", Array.Empty <object>());
            if (DiscoveryProfileEntry.GetProfileByID(importCfg.get_ProfileID()) == null)
            {
                throw new Exception(string.Format("Requested profile {0} not found.", (object)importCfg.get_ProfileID()));
            }
            DiscoveryImportManager.UpdateProgress(importID, "ImportDiscoveryResults Started", "Loading Plugins", false);
            IList <IDiscoveryPlugin> discoveryPlugins = DiscoveryHelper.GetOrderedDiscoveryPlugins();
            SortedDictionary <int, List <IDiscoveryPlugin> > orderedPlugins = DiscoveryPluginHelper.GetOrderedPlugins(discoveryPlugins, (IList <DiscoveryPluginInfo>)DiscoveryHelper.GetDiscoveryPluginInfos());
            DiscoveryResultBase discoveryResult = DiscoveryResultManager.GetDiscoveryResult(importCfg.get_ProfileID(), discoveryPlugins);
            DiscoveryResultBase result1;

            if (importCfg.get_NodeIDs().Count > 0)
            {
                DiscoveryLogic.log.DebugFormat("Nodes to be imported : {0}", (object)importCfg.get_NodeIDs().Count);
                using (List <DiscoveredNode> .Enumerator enumerator = ((CoreDiscoveryPluginResult)discoveryResult.GetPluginResultOfType <CoreDiscoveryPluginResult>()).get_DiscoveredNodes().GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        DiscoveredNode current = enumerator.Current;
                        if (importCfg.get_NodeIDs().Contains(current.get_NodeID()))
                        {
                            ((DiscoveredObjectBase)current).set_IsSelected(true);
                        }
                        else
                        {
                            ((DiscoveredObjectBase)current).set_IsSelected(false);
                        }
                    }
                }
                using (List <DiscoveryPluginResultBase> .Enumerator enumerator = this.Linearize((IEnumerable <DiscoveryPluginResultBase>)discoveryResult.get_PluginResults()).GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        DiscoveryPluginResultBase current          = enumerator.Current;
                        DiscoveryPluginResultBase pluginResultBase = !(current is IDiscoveryPluginResultContextFiltering contextFiltering) ? current.GetFilteredPluginResult() : contextFiltering.GetFilteredPluginResultFromContext(discoveryResult);
                        discoveryResult.get_PluginResults().Remove(current);
                        discoveryResult.get_PluginResults().Add(pluginResultBase);
                        DiscoveryLogic.log.DebugFormat("Applying filters for pluggin - {0}.", (object)current.get_PluginTypeName());
                    }
                }
                result1 = this.FilterIgnoredItems(discoveryResult);
            }
            else
            {
                result1 = discoveryResult;
            }
            result1.set_ProfileID(importCfg.get_ProfileID());
            DiscoveryLogic.log.DebugFormat("Importing started.", Array.Empty <object>());
            if (importCfg.get_DeleteProfileAfterImport())
            {
                DiscoveryImportManager.StartImport(importID, result1, orderedPlugins, false, (DiscoveryImportManager.CallbackDiscoveryImportFinished)((result, importId, importStatus) => this.DeleteOrionDiscoveryProfile(result.get_ProfileID())));
            }
            else
            {
                DiscoveryImportManager.StartImport(importID, result1, orderedPlugins);
            }
        }