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
}