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