func()

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