func()

in clusterloader2/pkg/measurement/common/slos/pod_startup_latency.go [225:271]


func (p *podStartupLatencyMeasurement) gather(c clientset.Interface, identifier string, schedulerName string) ([]measurement.Summary, error) {
	klog.V(2).Infof("%s: gathering pod startup latency measurement...", p)
	if !p.isRunning {
		return nil, fmt.Errorf("metric %s has not been started", podStartupLatencyMeasurementName)
	}

	p.stop()

	if err := p.gatherScheduleTimes(c, schedulerName); err != nil {
		return nil, err
	}

	checks := []podStartupLatencyCheck{
		{
			namePrefix: "",
			filter:     measurementutil.MatchAll,
		},
		{
			namePrefix: "Stateless",
			filter:     p.podMetadata.FilterStateless,
		},
		{
			namePrefix: "Stateful",
			filter:     p.podMetadata.FilterStateful,
		},
	}

	var summaries []measurement.Summary
	var err error
	for _, check := range checks {
		transitions := podStartupTransitionsWithThreshold(p.threshold)
		podStartupLatency := p.podStartupEntries.CalculateTransitionsLatency(transitions, check.filter)

		if slosErr := podStartupLatency["pod_startup"].VerifyThreshold(p.threshold); slosErr != nil {
			err = errors.NewMetricViolationError("pod startup", slosErr.Error())
			klog.Errorf("%s%s: %v", check.namePrefix, p, err)
		}

		content, jsonErr := util.PrettyPrintJSON(measurementutil.LatencyMapToPerfData(podStartupLatency))
		if jsonErr != nil {
			return nil, jsonErr
		}
		summaryName := fmt.Sprintf("%s%s_%s", check.namePrefix, podStartupLatencyMeasurementName, identifier)
		summaries = append(summaries, measurement.CreateSummary(summaryName, "json", content))
	}
	return summaries, err
}