in clusterloader2/pkg/measurement/common/api_availability_measurement.go [141:178]
func (a *apiAvailabilityMeasurement) start(config *measurement.Config) error {
if a.isRunning {
klog.V(2).Infof("%s: measurement already running", a)
return nil
}
if err := a.initFields(config); err != nil {
return err
}
k8sClient := config.ClusterFramework.GetClientSets().GetClient()
provider := config.ClusterFramework.GetClusterConfig().Provider
a.wg.Add(1)
go func() {
defer a.wg.Done()
for {
if a.isPaused {
select {
case <-a.unpauseCh:
a.isPaused = false
case <-a.stopCh:
return
}
}
select {
case <-a.pauseCh:
a.isPaused = true
case <-time.After(a.pollFrequency):
a.updateClusterAvailabilityMetrics(k8sClient)
if a.hostLevelAvailabilityEnabled() {
a.updateHostAvailabilityMetrics(k8sClient, provider)
}
case <-a.stopCh:
return
}
}
}()
return nil
}