in pkg/client/custom_api/client.go [105:144]
func (mc *metricsClient) GetMetricByName(name types.NamespacedName, info provider.CustomMetricInfo, selector labels.Selector) (*custom_metrics.MetricValue, error) {
mc.rwLock.Lock()
defer mc.rwLock.Unlock()
var object *customMetricsAPI.MetricValue
var err error
metricName, ok := mc.customMetricNamer.Get(info.Metric)
if !ok {
return nil, fmt.Errorf("metric name alias for custom metric %s not found", info.Metric)
}
if info.Namespaced {
object, err = mc.customMetricsClient.NamespacedMetrics(name.Namespace).GetForObject(
schema.GroupKind{Group: info.GroupResource.Group, Kind: info.GroupResource.Resource},
name.Name, metricName, selector,
)
} else {
object, err = mc.customMetricsClient.RootScopedMetrics().GetForObject(
schema.GroupKind{Group: info.GroupResource.Group, Kind: info.GroupResource.Resource},
name.Name, metricName, selector,
)
}
if err != nil {
return nil, fmt.Errorf("failed to get metric from backend: %v", err)
}
return &custom_metrics.MetricValue{
DescribedObject: custom_metrics.ObjectReference{
Kind: object.DescribedObject.Kind,
Namespace: object.DescribedObject.Namespace,
Name: object.DescribedObject.Name,
APIVersion: object.DescribedObject.APIVersion,
ResourceVersion: object.DescribedObject.ResourceVersion,
},
Metric: custom_metrics.MetricIdentifier{
Name: object.Metric.Name,
Selector: object.Metric.Selector,
},
Timestamp: object.Timestamp,
WindowSeconds: object.WindowSeconds,
Value: object.Value,
}, nil
}