From dcbc5caa167871da7c212e1b939ef75bb40bca5a Mon Sep 17 00:00:00 2001 From: beorn7 Date: Fri, 11 Nov 2016 16:59:23 +0100 Subject: [PATCH] Remove local REs for label and metric names and use fast checks All was a mess, we had duplicates of the REs for label name and metric names here, and we sometimes used them, sometimes we used those from common/model. Now we are consistently using the fast checking functions from common/model. (Tests for leading colons are included there, see https://github.com/prometheus/common/pull/66 .) --- prometheus/desc.go | 11 +++-------- prometheus/push/push.go | 2 +- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/prometheus/desc.go b/prometheus/desc.go index 0593be5..1835b16 100644 --- a/prometheus/desc.go +++ b/prometheus/desc.go @@ -16,20 +16,15 @@ package prometheus import ( "errors" "fmt" - "regexp" "sort" "strings" "github.com/golang/protobuf/proto" + "github.com/prometheus/common/model" dto "github.com/prometheus/client_model/go" ) -var ( - metricNameRE = regexp.MustCompile(`^[a-zA-Z_][a-zA-Z0-9_:]*$`) - labelNameRE = regexp.MustCompile("^[a-zA-Z_][a-zA-Z0-9_]*$") -) - // reservedLabelPrefix is a prefix which is not legal in user-supplied // label names. const reservedLabelPrefix = "__" @@ -103,7 +98,7 @@ func NewDesc(fqName, help string, variableLabels []string, constLabels Labels) * d.err = errors.New("empty help string") return d } - if !metricNameRE.MatchString(fqName) { + if !model.IsValidMetricName(model.LabelValue(fqName)) { d.err = fmt.Errorf("%q is not a valid metric name", fqName) return d } @@ -200,6 +195,6 @@ func (d *Desc) String() string { } func checkLabelName(l string) bool { - return labelNameRE.MatchString(l) && + return model.LabelName(l).IsValid() && !strings.HasPrefix(l, reservedLabelPrefix) } diff --git a/prometheus/push/push.go b/prometheus/push/push.go index ae40402..8fb6f5f 100644 --- a/prometheus/push/push.go +++ b/prometheus/push/push.go @@ -84,7 +84,7 @@ func push(job string, grouping map[string]string, pushURL string, g prometheus.G } urlComponents := []string{url.QueryEscape(job)} for ln, lv := range grouping { - if !model.LabelNameRE.MatchString(ln) { + if !model.LabelName(ln).IsValid() { return fmt.Errorf("grouping label has invalid name: %s", ln) } if strings.Contains(lv, "/") {