@cryptotaxi247 / netdata-1 / commits / 8e2f1a4b3

fix(go.d/sd): correctly adding tags in classify (#19312)

Ilya Mashchenko committed Jan 2, 2025 at 15:17 UTC 8e2f1a4b386f25a430f2700aa4714493b541cf60
3 files changed +16 -6
src/go/plugin/go.d/agent/discovery/sd/model/tags.go
+10
@@ -35,6 +35,16 @@ func (t Tags) Merge(tags Tags) {
35 }
36 }
37
38 +func (t Tags) Add(tags Tags) {
39 + for tag := range tags {
40 + v := strings.TrimPrefix(tag, "-")
41 + if _, ok := t[v]; ok {
42 + delete(t, v)
43 + }
44 + t[tag] = struct{}{}
45 + }
46 +}
47 +
48 func (t Tags) Clone() Tags {
49 ts := NewTags()
50 ts.Merge(t)
src/go/plugin/go.d/agent/discovery/sd/pipeline/classify.go
+2 -2
@@ -69,8 +69,8 @@ func (c *targetClassificator) classify(tgt model.Target) model.Tags {
69 tags = model.NewTags()
70 }
71
72 - tags.Merge(rule.tags)
73 - tags.Merge(match.tags)
72 + tags.Add(rule.tags)
73 + tags.Add(match.tags)
74 tgtTags.Merge(tags)
75 }
76 }
src/go/plugin/go.d/agent/discovery/sd/pipeline/classify_test.go
+4 -4
@@ -34,7 +34,7 @@ func TestTargetClassificator_classify(t *testing.T) {
34 - tags: "bar4"
35 expr: '{{ glob .Name "mock*4*" }}'
36 - selector: "rule3"
37 - tags: "foo3"
37 + tags: "-skip foo3"
38 match:
39 - tags: "bar5"
40 expr: '{{ glob .Name "mock*5*" }}'
@@ -55,15 +55,15 @@ func TestTargetClassificator_classify(t *testing.T) {
55 },
56 "one rule two match": {
57 target: newMockTarget("mock56", "rule3"),
58 - wantTags: mustParseTags("foo3 bar5 bar6"),
58 + wantTags: mustParseTags("-skip foo3 bar5 bar6"),
59 },
60 "all rules all matches": {
61 target: newMockTarget("mock123456", "rule1 rule2 rule3"),
62 - wantTags: mustParseTags("foo1 foo2 foo3 bar1 bar2 bar3 bar4 bar5 bar6"),
62 + wantTags: mustParseTags("-skip foo1 foo2 foo3 bar1 bar2 bar3 bar4 bar5 bar6"),
63 },
64 "applying labels after every rule": {
65 target: newMockTarget("mock123456", "rule0 rule1 rule2 rule3"),
66 - wantTags: mustParseTags("skip foo3 bar5 bar6"),
66 + wantTags: mustParseTags("-skip foo3 bar5 bar6"),
67 },
68 }
69