Skip to content

Commit 80d1297

Browse files
committed
add method to get name sanitized for tag value
this is going to be useful to implement the change documented here in Metrictank: https://github.com/graphite-project/graphite-web/pull/2458/files
1 parent 5611429 commit 80d1297

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

metric.go

+16
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,22 @@ func (m *MetricDefinition) NameWithTags() string {
166166
return m.nameWithTags
167167
}
168168

169+
func (m *MetricDefinition) NameSanitizedAsTagValue() string {
170+
if !strings.Contains(m.Name, "~") {
171+
return m.Name
172+
}
173+
174+
sanitized := []byte(m.Name)
175+
for i := 0; i < len(sanitized); i++ {
176+
if sanitized[i] == '~' {
177+
sanitized = append(sanitized[:i], sanitized[i+1:]...)
178+
i--
179+
}
180+
}
181+
182+
return string(sanitized)
183+
}
184+
169185
func (m *MetricDefinition) SetId() {
170186
sort.Strings(m.Tags)
171187

metric_test.go

+35
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,38 @@ func TestNameWithTags(t *testing.T) {
132132
}
133133
}
134134
}
135+
136+
func TestNameSanitizedAsTagValue(t *testing.T) {
137+
type testCase struct {
138+
originalName string
139+
expectedName string
140+
}
141+
cases := []testCase{
142+
{
143+
originalName: "my~.test.abc",
144+
expectedName: "my.test.abc",
145+
}, {
146+
originalName: "a.b.c",
147+
expectedName: "a.b.c",
148+
}, {
149+
originalName: "~~a~~.~~~b~~~.~~~c~~~",
150+
expectedName: "a.b.c",
151+
}, {
152+
originalName: "a.b.c~",
153+
expectedName: "a.b.c",
154+
}, {
155+
originalName: "~a.b.c",
156+
expectedName: "a.b.c",
157+
}, {
158+
originalName: "~a~",
159+
expectedName: "a",
160+
},
161+
}
162+
for i := range cases {
163+
md := MetricDefinition{Name: cases[i].originalName}
164+
sanitized := md.NameSanitizedAsTagValue()
165+
if sanitized != cases[i].expectedName {
166+
t.Fatalf("TC %d: Expected sanitized version of %s to be %s, but it was %s", i, md.Name, cases[i].expectedName, sanitized)
167+
}
168+
}
169+
}

0 commit comments

Comments
 (0)