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