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); }
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); } } } }
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); }
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); } } }
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); }
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); } }