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
}