in clusterloader2/pkg/measurement/common/slos/api_responsiveness_prometheus.go [164:222]
func (a *apiResponsivenessGatherer) gatherAPICalls(executor common.QueryExecutor, startTime, endTime time.Time, config *measurement.Config) (*apiCallMetrics, error) {
measurementDuration := endTime.Sub(startTime)
promDuration := measurementutil.ToPrometheusTime(measurementDuration)
useSimple, err := util.GetBoolOrDefault(config.Params, "useSimpleLatencyQuery", false)
if err != nil {
return nil, err
}
var latencySamples []*model.Sample
if useSimple {
quantiles := []float64{0.5, 0.9, 0.99}
for _, q := range quantiles {
query := fmt.Sprintf(simpleLatencyQuery, q, filters, promDuration)
samples, err := executor.Query(query, endTime)
if err != nil {
return nil, err
}
// Underlying code assumes presence of 'quantile' label, so adding it manually.
for _, sample := range samples {
sample.Metric["quantile"] = model.LabelValue(fmt.Sprintf("%.2f", q))
}
latencySamples = append(latencySamples, samples...)
}
} else {
// Latency measurement is based on 5m window aggregation,
// therefore first 5 minutes of the test should be skipped.
latencyMeasurementDuration := measurementDuration - latencyWindowSize
if latencyMeasurementDuration < time.Minute {
latencyMeasurementDuration = time.Minute
}
duration := measurementutil.ToPrometheusTime(latencyMeasurementDuration)
query := fmt.Sprintf(latencyQuery, filters, duration)
latencySamples, err = executor.Query(query, endTime)
if err != nil {
return nil, err
}
}
query := fmt.Sprintf(countQuery, filters, promDuration)
countSamples, err := executor.Query(query, endTime)
if err != nil {
return nil, err
}
countFastSamples := make([]*model.Sample, 0)
filters := []string{filterGetAndMutating, filterNamespaceList, filterClusterList}
for _, filter := range filters {
query := fmt.Sprintf(countFastQuery, filter, promDuration)
samples, err := executor.Query(query, endTime)
if err != nil {
return nil, err
}
countFastSamples = append(countFastSamples, samples...)
}
return newFromSamples(latencySamples, countSamples, countFastSamples)
}