private async Task GetHttpProbesForServiceNamesAsync()

in src/routingmanager/RoutingManagerApp.cs [518:582]


        private async Task<(V1Probe, V1Probe)> GetHttpProbesForServiceNamesAsync(
            string resourceType,
            string resourceName,
            IEnumerable<V1Service> allServices,
            IEnumerable<V1Pod> allPods,
            IEnumerable<string> serviceNames,
            CancellationToken cancellationToken)
        {
            var servicesUnderIngressRoute = new List<V1Service>();
            V1Probe httpReadinessProbe = null;
            V1Probe httpLivenessProbe = null;

            await serviceNames.ExecuteForEachAsync(serviceName =>
            {
                cancellationToken.ThrowIfCancellationRequested();
                V1Service retrievedService = allServices.FirstOrDefault(svc => StringComparer.OrdinalIgnoreCase.Equals(svc.Metadata.Name, serviceName));
                if (retrievedService != null)
                {
                    servicesUnderIngressRoute.Add(retrievedService);
                }
                return Task.CompletedTask;
            });

            foreach (var service in servicesUnderIngressRoute)
            {
                cancellationToken.ThrowIfCancellationRequested();
                V1Pod selectedPod = null;
                // For all runs after the first one, we need to rely on the original service selector annotation because we modify the user's service's label selectors
                if (service.Metadata.Annotations?.ContainsKey(Constants.OriginalServiceSelectorAnnotation) == true)
                {
                    selectedPod = allPods.FirstOrDefault(pod => IsMatchSelectorsWithLabels(service.Metadata.GetOriginalServiceSelectors(), pod.Metadata.Labels));
                }
                else
                {
                    selectedPod = allPods.FirstOrDefault(pod => IsMatchSelectorsWithLabels(service.Spec.Selector, pod.Metadata.Labels));
                }
                if (selectedPod == null)
                {
                    continue;
                }

                var firstContainerInPod = selectedPod.Spec.Containers.FirstOrDefault();
                httpLivenessProbe = firstContainerInPod?.LivenessProbe;
                httpReadinessProbe = firstContainerInPod?.ReadinessProbe;

                if (httpLivenessProbe != null && httpLivenessProbe != null)
                {
                    _log.Info("Extracted probes for envoy pod under the '{0}' '{1}'", resourceType, new PII(resourceName));
                    if (httpLivenessProbe?.HttpGet?.Port?.Value != null
                    && !int.TryParse(httpLivenessProbe.HttpGet.Port.Value, out _))
                    {
                        httpLivenessProbe.HttpGet.Port = GetIntValueOfNamedPortFromContainer(firstContainerInPod, httpLivenessProbe.HttpGet.Port.Value);
                    }

                    if (httpReadinessProbe?.HttpGet?.Port?.Value != null
                        && !int.TryParse(httpReadinessProbe.HttpGet.Port.Value, out _))
                    {
                        httpReadinessProbe.HttpGet.Port = GetIntValueOfNamedPortFromContainer(firstContainerInPod, httpReadinessProbe.HttpGet.Port.Value);
                    }
                    break;
                }
            }

            return (httpLivenessProbe, httpReadinessProbe);
        }