func()

in clusterloader2/pkg/measurement/common/timer.go [57:106]


func (t *timer) Execute(config *measurement.Config) ([]measurement.Summary, error) {
	action, err := util.GetString(config.Params, "action")
	if err != nil {
		return nil, err
	}

	t.lock.Lock()
	defer t.lock.Unlock()
	switch action {
	case "start":
		label, err := util.GetString(config.Params, "label")
		if err != nil {
			return nil, err
		}
		t.startTimes[label] = time.Now()
	case "stop":
		label, err := util.GetString(config.Params, "label")
		if err != nil {
			return nil, err
		}
		startTime, ok := t.startTimes[label]
		if !ok {
			return nil, fmt.Errorf("uninitialized timer %s", label)
		}
		duration := time.Since(startTime)
		klog.V(0).Infof("%s: %s - %v", t, label, duration)
		t.durations[label] = duration
		delete(t.startTimes, label)
	case "gather":
		result := measurementutil.PerfData{
			Version: "v1",
			DataItems: []measurementutil.DataItem{{
				Unit:   "s",
				Labels: map[string]string{"test": "phases"},
				Data:   make(map[string]float64)}}}

		for label, duration := range t.durations {
			result.DataItems[0].Data[label] = duration.Seconds()
		}
		content, err := util.PrettyPrintJSON(result)
		if err != nil {
			return nil, err
		}
		summary := measurement.CreateSummary(timerMeasurementName, "json", content)
		return []measurement.Summary{summary}, nil
	default:
		return nil, fmt.Errorf("unknown action %s", action)
	}
	return nil, nil
}