in clusterloader2/pkg/measurement/common/scheduling_throughput.go [59:103]
func (s *schedulingThroughputMeasurement) Execute(config *measurement.Config) ([]measurement.Summary, error) {
action, err := util.GetString(config.Params, "action")
if err != nil {
return nil, err
}
switch action {
case "start":
if s.isRunning {
klog.V(3).Infof("%s: measurement already running", s)
return nil, nil
}
selector := util.NewObjectSelector()
if err := selector.Parse(config.Params); err != nil {
return nil, err
}
measurmentInterval, err := util.GetDurationOrDefault(config.Params, "measurmentInterval", defaultSchedulingThroughputInterval)
if err != nil {
return nil, err
}
s.stopCh = make(chan struct{})
return nil, s.start(config.ClusterFramework.GetClientSets().GetClient(), selector, measurmentInterval)
case "gather":
threshold, err := util.GetFloat64OrDefault(config.Params, "threshold", 0)
if err != nil {
klog.Warningf("error while getting threshold param: %v", err)
}
enableViolations, err := util.GetBoolOrDefault(config.Params, "enableViolations", true)
if err != nil {
klog.Warningf("error while getting enableViolations param: %v", err)
}
summary, err := s.gather(threshold)
if err != nil {
if !errors.IsMetricViolationError(err) {
klog.Errorf("%s gathering error: %v", config.Identifier, err)
return nil, err
}
if !enableViolations {
err = nil
}
}
return summary, err
default:
return nil, fmt.Errorf("unknown action %v", action)
}
}