示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }