in custom-metrics-stackdriver-adapter/pkg/adapter/coreprovider/client.go [47:77]
func (p *stackdriverCoreClient) getPodMetric(podsNames []string, metricName, metricKind, metricValueType string, labels labels.Selector) (map[string]map[string]resource.Quantity, map[string]api.TimeInfo, error) {
numOfRequests := (len(podsNames) + translator.MaxNumOfArgsInOneOfFilter - 1) / translator.MaxNumOfArgsInOneOfFilter // ceil
r := translator.NewPodResult(p.translator)
for i := 0; i < numOfRequests; i++ {
segmentBeg := i * translator.MaxNumOfArgsInOneOfFilter
segmentEnd := min((i+1)*translator.MaxNumOfArgsInOneOfFilter, len(podsNames))
stackdriverRequest, err := translator.NewQueryBuilder(p.translator, metricName).
AsContainerType().
WithPodNames(podsNames[segmentBeg:segmentEnd]).
WithMetricKind(metricKind).
WithMetricValueType(metricValueType).
WithMetricSelector(labels).
WithNamespace(translator.AllNamespaces).
Build()
if err != nil {
return nil, nil, err
}
response, err := p.doRequest.do(stackdriverRequest) // TODO: make this calls parallel
if err != nil {
return nil, nil, err
}
err = r.AddCoreContainerMetricFromResponse(response)
if err != nil {
return nil, nil, err
}
}
return r.ContainerMetric, r.TimeInfo, nil
}