From 747513d444d4b22548e7e0db6b1f15c1a5632484 Mon Sep 17 00:00:00 2001 From: Marcus Efraimsson Date: Thu, 1 Oct 2020 10:39:42 +0200 Subject: [PATCH] Plugins: Fix loading of backend plugins (#27951) Ref #27921 --- pkg/infra/metrics/metrics.go | 27 ---------------- pkg/infra/metrics/metricutil/utils.go | 31 +++++++++++++++++++ .../utils_test.go} | 2 +- pkg/models/datasource_cache.go | 4 +-- 4 files changed, 34 insertions(+), 30 deletions(-) create mode 100644 pkg/infra/metrics/metricutil/utils.go rename pkg/infra/metrics/{metrics_test.go => metricutil/utils_test.go} (97%) diff --git a/pkg/infra/metrics/metrics.go b/pkg/infra/metrics/metrics.go index f4cbc6bcac3..31d2fcb4182 100644 --- a/pkg/infra/metrics/metrics.go +++ b/pkg/infra/metrics/metrics.go @@ -1,10 +1,7 @@ package metrics import ( - "errors" - "fmt" "runtime" - "strings" "github.com/prometheus/client_golang/prometheus" @@ -592,27 +589,3 @@ func newCounterStartingAtZero(opts prometheus.CounterOpts, labelValues ...string return counter } - -// SanitizeLabelName removes all invalid chars from the label name. -// If the label name is empty or contains only invalid chars, it -// will return an error. -func SanitizeLabelName(name string) (string, error) { - if len(name) == 0 { - return "", errors.New("label name cannot be empty") - } - - out := strings.Builder{} - for i, b := range name { - if (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == '_' || (b >= '0' && b <= '9' && i > 0) { - out.WriteRune(b) - } else if b == ' ' { - out.WriteRune('_') - } - } - - if out.Len() == 0 { - return "", fmt.Errorf("label name only contains invalid chars: %q", name) - } - - return out.String(), nil -} diff --git a/pkg/infra/metrics/metricutil/utils.go b/pkg/infra/metrics/metricutil/utils.go new file mode 100644 index 00000000000..7bb3b471333 --- /dev/null +++ b/pkg/infra/metrics/metricutil/utils.go @@ -0,0 +1,31 @@ +package metricutil + +import ( + "errors" + "fmt" + "strings" +) + +// SanitizeLabelName removes all invalid chars from the label name. +// If the label name is empty or contains only invalid chars, it +// will return an error. +func SanitizeLabelName(name string) (string, error) { + if len(name) == 0 { + return "", errors.New("label name cannot be empty") + } + + out := strings.Builder{} + for i, b := range name { + if (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == '_' || (b >= '0' && b <= '9' && i > 0) { + out.WriteRune(b) + } else if b == ' ' { + out.WriteRune('_') + } + } + + if out.Len() == 0 { + return "", fmt.Errorf("label name only contains invalid chars: %q", name) + } + + return out.String(), nil +} diff --git a/pkg/infra/metrics/metrics_test.go b/pkg/infra/metrics/metricutil/utils_test.go similarity index 97% rename from pkg/infra/metrics/metrics_test.go rename to pkg/infra/metrics/metricutil/utils_test.go index a523960f103..d4862529085 100644 --- a/pkg/infra/metrics/metrics_test.go +++ b/pkg/infra/metrics/metricutil/utils_test.go @@ -1,4 +1,4 @@ -package metrics +package metricutil import ( "testing" diff --git a/pkg/models/datasource_cache.go b/pkg/models/datasource_cache.go index 128bde860b5..de547b7251a 100644 --- a/pkg/models/datasource_cache.go +++ b/pkg/models/datasource_cache.go @@ -10,7 +10,7 @@ import ( "sync" "time" - "github.com/grafana/grafana/pkg/infra/metrics" + "github.com/grafana/grafana/pkg/infra/metrics/metricutil" "github.com/grafana/grafana/pkg/setting" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" @@ -73,7 +73,7 @@ type dataSourceTransport struct { func instrumentRoundtrip(datasourceName string, next http.RoundTripper) promhttp.RoundTripperFunc { return promhttp.RoundTripperFunc(func(r *http.Request) (*http.Response, error) { - datasourceLabelName, err := metrics.SanitizeLabelName(datasourceName) + datasourceLabelName, err := metricutil.SanitizeLabelName(datasourceName) // if the datasource named cannot be turned into a prometheus // label we will skip instrumenting these metrics. if err != nil {