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