/// <summary> /// Make list of nodes as per configuration. /// When adding, a node's ip address is resolved via Dns. /// </summary> private IEnumerable <WmiNode> InitNodeList(IList <string> names) { var nodesList = new List <WmiNode>(names.Count); var exclude = Current.Settings.Dashboard.ExcludePatternRegex; foreach (var nodeName in names) { if (exclude?.IsMatch(nodeName) ?? false) { continue; } var node = new WmiNode(nodeName) { Config = _config, DataProvider = this }; try { var hostEntry = Dns.GetHostEntry(node.Name); if (hostEntry.AddressList.Any()) { node.Ip = hostEntry.AddressList[0].ToString(); node.Status = NodeStatus.Active; } else { node.Status = NodeStatus.Unreachable; } } catch (Exception) { node.Status = NodeStatus.Unreachable; } var staticDataCache = ProviderCache( () => node.PollNodeInfoAsync(), _config.StaticDataTimeoutSeconds, memberName: node.Name + "-Static"); node.Caches.Add(staticDataCache); node.Caches.Add(ProviderCache( () => node.PollStats(), _config.DynamicDataTimeoutSeconds, memberName: node.Name + "-Dynamic")); //Force update static host data, incuding os info, volumes, interfaces. Task.WaitAll(staticDataCache.PollAsync(true)); nodesList.Add(node); } return(nodesList); }
/// <summary> /// Make list of nodes as per configuration. /// When adding, a node's IP address is resolved via DNS. /// </summary> /// <param name="nodeNames">The names of the server nodes to monitor.</param> private IEnumerable <WmiNode> InitNodeList(IList <string> nodeNames) { var nodesList = new List <WmiNode>(nodeNames.Count); var exclude = Current.Settings.Dashboard.ExcludePatternRegex; foreach (var nodeName in nodeNames) { if (exclude?.IsMatch(nodeName) ?? false) { continue; } var node = new WmiNode(nodeName) { Config = _config, DataProvider = this }; try { var hostEntry = Dns.GetHostEntry(node.Name); if (hostEntry.AddressList.Length > 0) { node.Ip = hostEntry.AddressList[0].ToString(); node.Status = NodeStatus.Active; } else { node.Status = NodeStatus.Unreachable; } } catch (Exception) { node.Status = NodeStatus.Unreachable; } var staticDataCache = ProviderCache( () => node.PollNodeInfoAsync(), _config.StaticDataTimeoutSeconds.Seconds(), memberName: node.Name + "-Static"); node.Caches.Add(staticDataCache); var dynamicDataCache = ProviderCache( () => node.PollStats(), _config.DynamicDataTimeoutSeconds.Seconds(), memberName: node.Name + "-Dynamic"); node.Caches.Add(dynamicDataCache); nodesList.Add(node); } //// Force update static host data, incuding os info, volumes, interfaces. //{ // var caches = staticDataCaches.ToArray(); // Task.WaitAll(caches); //} //// Force first dynamic polling of utilization. //// This is needed because we use PerfRawData performance counters and we need this as a first starting point for our calculations. //{ // var caches = dynamicDataCaches.ToArray(); // Task.WaitAll(caches); //} return(nodesList); }