Commit 747513d4 by Marcus Efraimsson Committed by GitHub

Plugins: Fix loading of backend plugins (#27951)

Ref #27921 
parent 298ac20d
package metrics package metrics
import ( import (
"errors"
"fmt"
"runtime" "runtime"
"strings"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
...@@ -592,27 +589,3 @@ func newCounterStartingAtZero(opts prometheus.CounterOpts, labelValues ...string ...@@ -592,27 +589,3 @@ func newCounterStartingAtZero(opts prometheus.CounterOpts, labelValues ...string
return counter 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
}
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
}
package metrics package metricutil
import ( import (
"testing" "testing"
......
...@@ -10,7 +10,7 @@ import ( ...@@ -10,7 +10,7 @@ import (
"sync" "sync"
"time" "time"
"github.com/grafana/grafana/pkg/infra/metrics" "github.com/grafana/grafana/pkg/infra/metrics/metricutil"
"github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/setting"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/client_golang/prometheus/promhttp"
...@@ -73,7 +73,7 @@ type dataSourceTransport struct { ...@@ -73,7 +73,7 @@ type dataSourceTransport struct {
func instrumentRoundtrip(datasourceName string, next http.RoundTripper) promhttp.RoundTripperFunc { func instrumentRoundtrip(datasourceName string, next http.RoundTripper) promhttp.RoundTripperFunc {
return promhttp.RoundTripperFunc(func(r *http.Request) (*http.Response, error) { 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 // if the datasource named cannot be turned into a prometheus
// label we will skip instrumenting these metrics. // label we will skip instrumenting these metrics.
if err != nil { if err != nil {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment