func runProbe()

in util-images/probes/pkg/dnspropagation/probe.go [91:137]


func runProbe(client kubernetes.Interface) {
	klog.V(1).Infof("DNS propagation probe started")
	var wg sync.WaitGroup
	ch := make(chan DNSPodPropagationResult, *sampleCount)
	indices := selectSample(*podCount, *sampleCount)
	durations := make([]float64, 0, *sampleCount)
	for _, idx := range indices {
		podName := fmt.Sprintf("%s-%d", *statefulSet, idx)
		url := fmt.Sprintf("%s.%s.%s.%s.%s.%s", podName, *service, *namespace, "svc", *clusterDomain, *suffix)
		wg.Add(1)
		go func(client kubernetes.Interface, url, podName string, namespace string, interval time.Duration) {
			defer wg.Done()
			result := runSinglePod(client, url, podName, namespace, interval)
			ch <- DNSPodPropagationResult{
				podName:  podName,
				duration: result,
			}
		}(client, url, podName, *namespace, *interval)
	}
	klog.V(2).Infof("Waiting for all sample pods processes to finish")
	go func() {
		wg.Wait()
		close(ch)
	}()

	for propagationResult := range ch {
		labels := prometheus.Labels{
			"namespace": *namespace,
			"service":   *service,
			"podName":   propagationResult.podName,
		}
		DNSPropagationSeconds.With(labels).Set(propagationResult.duration.Seconds())
		DNSPropagationCount.With(labels).Inc()
		durations = append(durations, propagationResult.duration.Seconds())
	}
	klog.V(2).Infof("Finished calculating DNS propagation for all sample pods")

	if len(durations) == 0 {
		klog.Warningf("DNS propagation probe has zero observations")
		return
	}
	sum := 0.0
	for _, duration := range durations {
		sum += duration
	}
	klog.V(1).Infof("DNS propagation probe finished, total of %v observations, average duration, %v s", len(durations), sum/float64(len(durations)))
}