Correctly skip mismatching targets

Signed-off-by: Fabian Reinartz <freinartz@google.com>
This commit is contained in:
Fabian Reinartz 2018-11-08 09:11:38 -05:00 committed by Simon Pasquier
parent 5dcce32ef8
commit a9803e9ecb
1 changed files with 12 additions and 6 deletions

View File

@ -573,6 +573,15 @@ func (api *API) targets(r *http.Request) (interface{}, *apiError, func()) {
return res, nil, nil return res, nil, nil
} }
func matchLabels(lset labels.Labels, matchers []*labels.Matcher) bool {
for _, m := range matchers {
if !m.Matches(lset.Get(m.Name)) {
return false
}
}
return true
}
func (api *API) targetMetadata(r *http.Request) (interface{}, *apiError, func()) { func (api *API) targetMetadata(r *http.Request) (interface{}, *apiError, func()) {
limit := -1 limit := -1
if s := r.FormValue("limit"); s != "" { if s := r.FormValue("limit"); s != "" {
@ -590,17 +599,14 @@ func (api *API) targetMetadata(r *http.Request) (interface{}, *apiError, func())
metric := r.FormValue("metric") metric := r.FormValue("metric")
var res []metricMetadata var res []metricMetadata
Outer:
for _, tt := range api.targetRetriever.TargetsActive() { for _, tt := range api.targetRetriever.TargetsActive() {
for _, t := range tt { for _, t := range tt {
if limit >= 0 && len(res) >= limit { if limit >= 0 && len(res) >= limit {
break break
} }
for _, m := range matchers { // Filter targets that don't satisfy the label matchers.
// Filter targets that don't satisfy the label matchers. if !matchLabels(t.Labels(), matchers) {
if !m.Matches(t.Labels().Get(m.Name)) { continue
continue Outer
}
} }
// If no metric is specified, get the full list for the target. // If no metric is specified, get the full list for the target.
if metric == "" { if metric == "" {