mirror of
https://github.com/kubernetes-sigs/prometheus-adapter.git
synced 2026-04-06 01:38:10 +00:00
Return proper errors from provider
All errors returned by the provider should be proper Kube API status errors. This commit cleans up a couple spots that either returned an invalid error, or were missing an error (such as the case in when no results matched the requested object).
This commit is contained in:
parent
696fe9015a
commit
c912e1e3be
1 changed files with 19 additions and 8 deletions
|
|
@ -123,13 +123,12 @@ func (p *prometheusProvider) metricFor(value pmodel.SampleValue, groupResource s
|
||||||
|
|
||||||
func (p *prometheusProvider) metricsFor(valueSet pmodel.Vector, info provider.MetricInfo, list runtime.Object) (*custom_metrics.MetricValueList, error) {
|
func (p *prometheusProvider) metricsFor(valueSet pmodel.Vector, info provider.MetricInfo, list runtime.Object) (*custom_metrics.MetricValueList, error) {
|
||||||
if !apimeta.IsListType(list) {
|
if !apimeta.IsListType(list) {
|
||||||
// TODO: fix the error type here
|
return nil, apierr.NewInternalError(fmt.Errorf("result of label selector list operation was not a list"))
|
||||||
return nil, fmt.Errorf("returned object was not a list")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
values, found := p.MatchValuesToNames(info, valueSet)
|
values, found := p.MatchValuesToNames(info, valueSet)
|
||||||
if !found {
|
if !found {
|
||||||
// TODO: throw error
|
return nil, newMetricNotFoundError(info.GroupResource, info.Metric)
|
||||||
}
|
}
|
||||||
res := []custom_metrics.MetricValue{}
|
res := []custom_metrics.MetricValue{}
|
||||||
|
|
||||||
|
|
@ -203,9 +202,22 @@ func (p *prometheusProvider) getSingle(info provider.MetricInfo, namespace, name
|
||||||
if len(queryResults) < 1 {
|
if len(queryResults) < 1 {
|
||||||
return nil, newMetricNotFoundForError(info.GroupResource, info.Metric, name)
|
return nil, newMetricNotFoundForError(info.GroupResource, info.Metric, name)
|
||||||
}
|
}
|
||||||
// TODO: check if lenght of results > 1?
|
|
||||||
// TODO: check if our output name is the same as our input name
|
namedValues, found := p.MatchValuesToNames(info, queryResults)
|
||||||
resultValue := queryResults[0].Value
|
if !found {
|
||||||
|
return nil, newMetricNotFoundError(info.GroupResource, info.Metric)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(namedValues) > 1 {
|
||||||
|
glog.V(2).Infof("Got more than one result (%v results) when fetching metric %s for %q, using the first one with a matching name...", len(queryResults), info.String(), name)
|
||||||
|
}
|
||||||
|
|
||||||
|
resultValue, nameFound := namedValues[name]
|
||||||
|
if !nameFound {
|
||||||
|
glog.Errorf("None of the results returned by when fetching metric %s for %q matched the resource name", info.String(), name)
|
||||||
|
return nil, newMetricNotFoundForError(info.GroupResource, info.Metric, name)
|
||||||
|
}
|
||||||
|
|
||||||
return p.metricFor(resultValue, info.GroupResource, "", name, info.Metric)
|
return p.metricFor(resultValue, info.GroupResource, "", name, info.Metric)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -235,8 +247,7 @@ func (p *prometheusProvider) getMultiple(info provider.MetricInfo, namespace str
|
||||||
|
|
||||||
// make sure we have a list
|
// make sure we have a list
|
||||||
if !apimeta.IsListType(matchingObjectsRaw) {
|
if !apimeta.IsListType(matchingObjectsRaw) {
|
||||||
// TODO: fix the error type here
|
return nil, apierr.NewInternalError(fmt.Errorf("result of label selector list operation was not a list"))
|
||||||
return nil, fmt.Errorf("returned object was not a list")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// convert a list of objects into the corresponding list of names
|
// convert a list of objects into the corresponding list of names
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue