in custom-metrics-stackdriver-adapter/pkg/adapter/translator/response_translator.go [153:184]
func (t *Translator) getMetricValuesFromResponse(groupResource schema.GroupResource, response *stackdriver.ListTimeSeriesResponse, metricName string) (map[string]resource.Quantity, error) {
metricValues := make(map[string]resource.Quantity)
for _, series := range response.TimeSeries {
if len(series.Points) <= 0 {
// This shouldn't happen with correct query to Stackdriver
return nil, apierr.NewInternalError(fmt.Errorf("Empty time series returned from Stackdriver"))
}
// Points in a time series are returned in reverse time order
point := *series.Points[0]
value := point.Value
name, err := t.metricKey(series, groupResource.String())
if err != nil {
return nil, err
}
currentQuantity, ok := metricValues[name]
if !ok {
currentQuantity = *resource.NewQuantity(0, resource.DecimalSI)
}
switch {
case value.Int64Value != nil:
currentQuantity.Add(*resource.NewQuantity(*value.Int64Value, resource.DecimalSI))
metricValues[name] = currentQuantity
case value.DoubleValue != nil:
currentQuantity.Add(*resource.NewMilliQuantity(int64(*value.DoubleValue*1000), resource.DecimalSI))
metricValues[name] = currentQuantity
default:
return nil, apierr.NewBadRequest(fmt.Sprintf("Expected metric of type DoubleValue or Int64Value, but received TypedValue: %v", value))
}
}
return metricValues, nil
}