meter: fast path for only one label

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
Василий Толстов 2021-07-21 14:29:13 +03:00
parent 650d167313
commit a7e6d61b95
2 changed files with 17 additions and 11 deletions

View File

@ -105,18 +105,20 @@ func BuildName(name string, labels ...string) string {
labels = labels[:len(labels)-1] labels = labels[:len(labels)-1]
} }
sort.Sort(byKey(labels)) if len(labels) > 2 {
sort.Sort(byKey(labels))
idx := 0 idx := 0
for { for {
if labels[idx] == labels[idx+2] { if labels[idx] == labels[idx+2] {
copy(labels[idx:], labels[idx+2:]) copy(labels[idx:], labels[idx+2:])
labels = labels[:len(labels)-2] labels = labels[:len(labels)-2]
} else { } else {
idx += 2 idx += 2
} }
if idx+2 >= len(labels) { if idx+2 >= len(labels) {
break break
}
} }
} }

View File

@ -56,6 +56,10 @@ func TestBuildName(t *testing.T) {
"my_metric", "my_metric",
"broker", "broker1", "broker", "broker2", "server", "http", "server", "tcp", "register", "mdns", "broker", "broker1", "broker", "broker2", "server", "http", "server", "tcp", "register", "mdns",
}, },
`my_metric{aaa="aaa"}`: []string{
"my_metric",
"aaa", "aaa",
},
} }
for e, d := range data { for e, d := range data {