Ejemplo n.º 1
0
        /// <summary>
        /// Extracts process configuration info for a given process on a given worker.
        /// </summary>
        /// <param name="workerIndex">The index of the worker, e.g. 0 for worker0.</param>
        /// <param name="processName">The name of the process.</param>
        /// <returns>Collection of discovered process configuration information.</returns>
        protected IEnumerable <ConfigProcessInfo> ExtractProcessInfo(int workerIndex, string processName)
        {
            // Retrieve the hostname for a worker with the given index.
            var hostname = GetHostname(workerIndex);

            // Get process count.
            var processCount = GetProcessCount(workerIndex, processName);

            // Get port.
            var processPort = GetPort(workerIndex, processName);

            // Sanity check.
            if (!processCount.HasValue || !processPort.HasValue)
            {
                return(new List <ConfigProcessInfo>());
            }

            ICollection <ConfigProcessInfo> results = new List <ConfigProcessInfo>();

            for (int i = 0; i < processCount; i++)
            {
                var configProcessInfo = new ConfigProcessInfo(logsetHash, fileLastModifiedTimestamp, hostname, processName, workerIndex.ToString(), processPort.Value + i);
                results.Add(configProcessInfo);
            }

            return(results);
        }
Ejemplo n.º 2
0
        private IEnumerable <ConfigProcessInfo> GetWorkerDetails(int workerIndex)
        {
            var workerDetails = new List <ConfigProcessInfo>();
            var workerKeyRoot = $"worker{workerIndex}.";
            var workerKeys    = _workgroupYml.Values.Keys.Where(key => key.StartsWith(workerKeyRoot, StringComparison.InvariantCultureIgnoreCase));

            var processNames = workerKeys
                               .Select(key => key.Substring(workerKeyRoot.Length))
                               .Where(key => key.Contains('.'))
                               .Select(key => key.Substring(0, key.IndexOf('.')))
                               .Distinct();

            foreach (var processName in processNames)
            {
                var processCount = GetProcessCount(workerIndex, processName);
                var processPort  = GetPort(workerIndex, processName);

                if (!processCount.HasValue || !processPort.HasValue)
                {
                    continue;
                }

                for (var i = 0; i < processCount; i++)
                {
                    var configProcessInfo = new ConfigProcessInfo(_workgroupYml.LogFileInfo.LastModifiedUtc, _hostnameMap[workerIndex], processPort.Value + i, processName, workerIndex);
                    workerDetails.Add(configProcessInfo);
                }
            }

            return(workerDetails);
        }