Update metrics apiserver to support filtering by labels

This commit is contained in:
Sergii Koshel 2020-02-12 17:54:40 +02:00
parent 03bc47e9fb
commit d091fff18b
11 changed files with 331 additions and 187 deletions

View file

@ -118,8 +118,8 @@ func (p *prometheusProvider) metricsFor(valueSet pmodel.Vector, info provider.Cu
}, nil
}
func (p *prometheusProvider) buildQuery(info provider.CustomMetricInfo, namespace string, names ...string) (pmodel.Vector, error) {
query, found := p.QueryForMetric(info, namespace, names...)
func (p *prometheusProvider) buildQuery(info provider.CustomMetricInfo, namespace string, metricSelector labels.Selector, names ...string) (pmodel.Vector, error) {
query, found := p.QueryForMetric(info, namespace, metricSelector, names...)
if !found {
return nil, provider.NewMetricNotFoundError(info.GroupResource, info.Metric)
}
@ -140,9 +140,9 @@ func (p *prometheusProvider) buildQuery(info provider.CustomMetricInfo, namespac
return *queryResults.Vector, nil
}
func (p *prometheusProvider) GetMetricByName(name types.NamespacedName, info provider.CustomMetricInfo) (*custom_metrics.MetricValue, error) {
func (p *prometheusProvider) GetMetricByName(name types.NamespacedName, info provider.CustomMetricInfo, metricSelector labels.Selector) (*custom_metrics.MetricValue, error) {
// construct a query
queryResults, err := p.buildQuery(info, name.Namespace, name.Name)
queryResults, err := p.buildQuery(info, name.Namespace, metricSelector, name.Name)
if err != nil {
return nil, err
}
@ -171,7 +171,7 @@ func (p *prometheusProvider) GetMetricByName(name types.NamespacedName, info pro
return p.metricFor(resultValue, name, info)
}
func (p *prometheusProvider) GetMetricBySelector(namespace string, selector labels.Selector, info provider.CustomMetricInfo) (*custom_metrics.MetricValueList, error) {
func (p *prometheusProvider) GetMetricBySelector(namespace string, selector labels.Selector, info provider.CustomMetricInfo, metricSelector labels.Selector) (*custom_metrics.MetricValueList, error) {
// fetch a list of relevant resource names
resourceNames, err := helpers.ListObjectNames(p.mapper, p.kubeClient, namespace, selector, info)
if err != nil {
@ -181,7 +181,7 @@ func (p *prometheusProvider) GetMetricBySelector(namespace string, selector labe
}
// construct the actual query
queryResults, err := p.buildQuery(info, namespace, resourceNames...)
queryResults, err := p.buildQuery(info, namespace, metricSelector, resourceNames...)
if err != nil {
return nil, err
}