Skip to content

Commit 38e0102

Browse files
committed
Augment keys of all metric types in the same way
It is unexpected that the common key prefix for some metrics types is different. This makes it unnecessary difficult to find the metrics in the database. This commit unifies the prefix for all metrics. The prefix of each key is now `service name, type prefix, hostname`. All of them are optional. `service name` is added if it is available and not set as a label because the configuration flag `EnableServiceLabel` is set. `type prefix` is added if it is enabled with the configuration flag `EnableTypePrefix`. `hostname` is added if it is available and not set as a label because `EnableHostnameLabel` is set. The behaviour of `EmitKeys`, `IncrCounter`, `IncrCounterWithLabels`, `AddSample`, `AddSampleWithLabels`, `MeasureSince` and `MeasureSinceWithLabels` changes with this commit. For `EmitKey` the hostname will be added (details see above) but the service name will no longer be added when `EnableServiceLabel` is set to `true`. For the other types the hostname will be added if it is available and `EnableHostnameLabel` is set to `false`.
1 parent 97b2452 commit 38e0102

File tree

2 files changed

+63
-28
lines changed

2 files changed

+63
-28
lines changed

metrics.go

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,15 @@ func (m *Metrics) SetGauge(key []string, val float32) {
1818
}
1919

2020
func (m *Metrics) SetGaugeWithLabels(key []string, val float32, labels []Label) {
21+
key = m.augmentKey(key, "gauge")
2122
if m.HostName != "" {
2223
if m.EnableHostnameLabel {
2324
labels = append(labels, Label{"host", m.HostName})
24-
} else if m.EnableHostname {
25-
key = insert(0, m.HostName, key)
2625
}
2726
}
28-
if m.EnableTypePrefix {
29-
key = insert(0, "gauge", key)
30-
}
3127
if m.ServiceName != "" {
3228
if m.EnableServiceLabel {
3329
labels = append(labels, Label{"service", m.ServiceName})
34-
} else {
35-
key = insert(0, m.ServiceName, key)
3630
}
3731
}
3832
allowed, labelsFiltered := m.allowMetric(key, labels)
@@ -43,12 +37,7 @@ func (m *Metrics) SetGaugeWithLabels(key []string, val float32, labels []Label)
4337
}
4438

4539
func (m *Metrics) EmitKey(key []string, val float32) {
46-
if m.EnableTypePrefix {
47-
key = insert(0, "kv", key)
48-
}
49-
if m.ServiceName != "" {
50-
key = insert(0, m.ServiceName, key)
51-
}
40+
key = m.augmentKey(key, "kv")
5241
allowed, _ := m.allowMetric(key, nil)
5342
if !allowed {
5443
return
@@ -61,17 +50,13 @@ func (m *Metrics) IncrCounter(key []string, val float32) {
6150
}
6251

6352
func (m *Metrics) IncrCounterWithLabels(key []string, val float32, labels []Label) {
53+
key = m.augmentKey(key, "counter")
6454
if m.HostName != "" && m.EnableHostnameLabel {
6555
labels = append(labels, Label{"host", m.HostName})
6656
}
67-
if m.EnableTypePrefix {
68-
key = insert(0, "counter", key)
69-
}
7057
if m.ServiceName != "" {
7158
if m.EnableServiceLabel {
7259
labels = append(labels, Label{"service", m.ServiceName})
73-
} else {
74-
key = insert(0, m.ServiceName, key)
7560
}
7661
}
7762
allowed, labelsFiltered := m.allowMetric(key, labels)
@@ -86,17 +71,13 @@ func (m *Metrics) AddSample(key []string, val float32) {
8671
}
8772

8873
func (m *Metrics) AddSampleWithLabels(key []string, val float32, labels []Label) {
74+
key = m.augmentKey(key, "sample")
8975
if m.HostName != "" && m.EnableHostnameLabel {
9076
labels = append(labels, Label{"host", m.HostName})
9177
}
92-
if m.EnableTypePrefix {
93-
key = insert(0, "sample", key)
94-
}
9578
if m.ServiceName != "" {
9679
if m.EnableServiceLabel {
9780
labels = append(labels, Label{"service", m.ServiceName})
98-
} else {
99-
key = insert(0, m.ServiceName, key)
10081
}
10182
}
10283
allowed, labelsFiltered := m.allowMetric(key, labels)
@@ -111,17 +92,13 @@ func (m *Metrics) MeasureSince(key []string, start time.Time) {
11192
}
11293

11394
func (m *Metrics) MeasureSinceWithLabels(key []string, start time.Time, labels []Label) {
95+
key = m.augmentKey(key, "timer")
11496
if m.HostName != "" && m.EnableHostnameLabel {
11597
labels = append(labels, Label{"host", m.HostName})
11698
}
117-
if m.EnableTypePrefix {
118-
key = insert(0, "timer", key)
119-
}
12099
if m.ServiceName != "" {
121100
if m.EnableServiceLabel {
122101
labels = append(labels, Label{"service", m.ServiceName})
123-
} else {
124-
key = insert(0, m.ServiceName, key)
125102
}
126103
}
127104
allowed, labelsFiltered := m.allowMetric(key, labels)
@@ -172,6 +149,19 @@ func (m *Metrics) UpdateFilterAndLabels(allow, block, allowedLabels, blockedLabe
172149
}
173150
}
174151

152+
func (m *Metrics) augmentKey(key []string, prefix string) []string {
153+
if m.HostName != "" && m.EnableHostname && !m.EnableHostnameLabel {
154+
key = insert(0, m.HostName, key)
155+
}
156+
if m.EnableTypePrefix {
157+
key = insert(0, prefix, key)
158+
}
159+
if m.ServiceName != "" && !m.EnableServiceLabel {
160+
key = insert(0, m.ServiceName, key)
161+
}
162+
return key
163+
}
164+
175165
// labelIsAllowed return true if a should be included in metric
176166
// the caller should lock m.filterLock while calling this method
177167
func (m *Metrics) labelIsAllowed(label *Label) bool {

metrics_test.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,17 @@ func TestMetrics_EmitKey(t *testing.T) {
7878
t.Fatalf("")
7979
}
8080

81+
m, met = mockMetric()
82+
met.HostName = "test"
83+
met.EnableHostname = true
84+
met.EmitKey([]string{"key"}, float32(1))
85+
if m.getKeys()[0][0] != "test" || m.getKeys()[0][1] != "key" {
86+
t.Fatalf("")
87+
}
88+
if m.vals[0] != 1 {
89+
t.Fatalf("")
90+
}
91+
8192
m, met = mockMetric()
8293
met.EnableTypePrefix = true
8394
met.EmitKey([]string{"key"}, float32(1))
@@ -122,6 +133,17 @@ func TestMetrics_IncrCounter(t *testing.T) {
122133
t.Fatalf("")
123134
}
124135

136+
m, met = mockMetric()
137+
met.HostName = "test"
138+
met.EnableHostname = true
139+
met.IncrCounter([]string{"key"}, float32(1))
140+
if m.getKeys()[0][0] != "test" || m.getKeys()[0][1] != "key" {
141+
t.Fatalf("")
142+
}
143+
if m.vals[0] != 1 {
144+
t.Fatalf("")
145+
}
146+
125147
m, met = mockMetric()
126148
met.EnableTypePrefix = true
127149
met.IncrCounter([]string{"key"}, float32(1))
@@ -166,6 +188,17 @@ func TestMetrics_AddSample(t *testing.T) {
166188
t.Fatalf("")
167189
}
168190

191+
m, met = mockMetric()
192+
met.HostName = "test"
193+
met.EnableHostname = true
194+
met.AddSample([]string{"key"}, float32(1))
195+
if m.getKeys()[0][0] != "test" || m.getKeys()[0][1] != "key" {
196+
t.Fatalf("")
197+
}
198+
if m.vals[0] != 1 {
199+
t.Fatalf("")
200+
}
201+
169202
m, met = mockMetric()
170203
met.EnableTypePrefix = true
171204
met.AddSample([]string{"key"}, float32(1))
@@ -213,6 +246,18 @@ func TestMetrics_MeasureSince(t *testing.T) {
213246
t.Fatalf("")
214247
}
215248

249+
m, met = mockMetric()
250+
met.TimerGranularity = time.Millisecond
251+
met.HostName = "test"
252+
met.EnableHostname = true
253+
met.MeasureSince([]string{"key"}, n)
254+
if m.getKeys()[0][0] != "test" || m.getKeys()[0][1] != "key" {
255+
t.Fatalf("")
256+
}
257+
if m.vals[0] > 0.1 {
258+
t.Fatalf("")
259+
}
260+
216261
m, met = mockMetric()
217262
met.TimerGranularity = time.Millisecond
218263
met.EnableTypePrefix = true

0 commit comments

Comments
 (0)