func()

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
}