mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-25 13:44:05 -08:00
add checks for metrics and display duplicate fields (#6026)
Signed-off-by: Harkishen-Singh <harkishensingh@hotmail.com>
This commit is contained in:
parent
5f6a56a0bb
commit
e097c70e6d
|
@ -23,6 +23,7 @@ import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
@ -303,9 +304,49 @@ func checkRules(filename string) (int, []error) {
|
||||||
numRules += len(rg.Rules)
|
numRules += len(rg.Rules)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dRules := checkDuplicates(rgs.Groups)
|
||||||
|
if len(dRules) != 0 {
|
||||||
|
fmt.Printf("%d duplicate rules(s) found.\n", len(dRules))
|
||||||
|
for _, n := range dRules {
|
||||||
|
fmt.Printf("Metric: %s\nLabel(s):\n", n.metric)
|
||||||
|
for i, l := range n.label {
|
||||||
|
fmt.Printf("\t%s: %s\n", i, l)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println("Might cause inconsistency while recording expressions.")
|
||||||
|
}
|
||||||
|
|
||||||
return numRules, nil
|
return numRules, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type compareRuleType struct {
|
||||||
|
metric string
|
||||||
|
label map[string]string
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkDuplicates(r []rulefmt.RuleGroup) []compareRuleType {
|
||||||
|
var duplicates []compareRuleType
|
||||||
|
|
||||||
|
for rindex := range r {
|
||||||
|
for index, props := range r[rindex].Rules {
|
||||||
|
inst := compareRuleType{
|
||||||
|
metric: props.Record,
|
||||||
|
label: props.Labels,
|
||||||
|
}
|
||||||
|
for i := 0; i < index; i++ {
|
||||||
|
t := compareRuleType{
|
||||||
|
metric: r[rindex].Rules[i].Record,
|
||||||
|
label: r[rindex].Rules[i].Labels,
|
||||||
|
}
|
||||||
|
if reflect.DeepEqual(t, inst) {
|
||||||
|
duplicates = append(duplicates, t)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return duplicates
|
||||||
|
}
|
||||||
|
|
||||||
var checkMetricsUsage = strings.TrimSpace(`
|
var checkMetricsUsage = strings.TrimSpace(`
|
||||||
Pass Prometheus metrics over stdin to lint them for consistency and correctness.
|
Pass Prometheus metrics over stdin to lint them for consistency and correctness.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue