File tree Expand file tree Collapse file tree 3 files changed +62
-0
lines changed
prometheus/testutil/promlint Expand file tree Collapse file tree 3 files changed +62
-0
lines changed Original file line number Diff line number Diff line change @@ -839,3 +839,27 @@ mc_something_total 10
839
839
lintAndVerify (l2 , cv )
840
840
})
841
841
}
842
+
843
+ func TestLintDuplicateMetric (t * testing.T ) {
844
+ const msg = "metric not unique"
845
+
846
+ tests := []test {
847
+ {
848
+ name : "metric not unique" ,
849
+ in : `
850
+ # HELP not_unique_total the helptext
851
+ # TYPE not_unique_total counter
852
+ not_unique_total{bar="abc", spam="xyz"} 1
853
+ not_unique_total{bar="abc", spam="xyz"} 2
854
+ ` ,
855
+ problems : []promlint.Problem {
856
+ {
857
+ Metric : "not_unique_total" ,
858
+ Text : msg ,
859
+ },
860
+ },
861
+ },
862
+ }
863
+
864
+ runTests (t , tests )
865
+ }
Original file line number Diff line number Diff line change @@ -30,4 +30,5 @@ var defaultValidations = []Validation{
30
30
validations .LintReservedChars ,
31
31
validations .LintCamelCase ,
32
32
validations .LintUnitAbbreviations ,
33
+ validations .LintDuplicateMetric ,
33
34
}
Original file line number Diff line number Diff line change
1
+ // Copyright 2024 The Prometheus Authors
2
+ // Licensed under the Apache License, Version 2.0 (the "License");
3
+ // you may not use this file except in compliance with the License.
4
+ // You may obtain a copy of the License at
5
+ //
6
+ // http://www.apache.org/licenses/LICENSE-2.0
7
+ //
8
+ // Unless required by applicable law or agreed to in writing, software
9
+ // distributed under the License is distributed on an "AS IS" BASIS,
10
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ // See the License for the specific language governing permissions and
12
+ // limitations under the License.
13
+
14
+ package validations
15
+
16
+ import (
17
+ "fmt"
18
+ "reflect"
19
+
20
+ dto "github.com/prometheus/client_model/go"
21
+ )
22
+
23
+ // LintDuplicateMetric detects duplicate metric.
24
+ func LintDuplicateMetric (mf * dto.MetricFamily ) []error {
25
+ var problems []error
26
+
27
+ for i , m := range mf .Metric {
28
+ for _ , k := range mf .Metric [i + 1 :] {
29
+ if reflect .DeepEqual (m .Label , k .Label ) {
30
+ problems = append (problems , fmt .Errorf ("metric not unique" ))
31
+ break
32
+ }
33
+ }
34
+ }
35
+
36
+ return problems
37
+ }
You can’t perform that action at this time.
0 commit comments