From f28653de7441f94e787ad7caa673e43c148c78ab Mon Sep 17 00:00:00 2001 From: Lucas Thiesen Date: Thu, 4 May 2023 16:59:00 +0200 Subject: [PATCH] Use regexp.Compile to avoid performance problems Signed-off-by: Lucas Thiesen --- pkg/collector/hostname_collector.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/pkg/collector/hostname_collector.go b/pkg/collector/hostname_collector.go index b2d5937..86a62ec 100644 --- a/pkg/collector/hostname_collector.go +++ b/pkg/collector/hostname_collector.go @@ -30,7 +30,7 @@ func NewHostnameCollectorPlugin( metricName string, ) (*HostnameCollectorPlugin, error) { if metricName == "" { - return nil, fmt.Errorf("failed to initialize hostname collector plugin, metric name was not defined") + return nil, fmt.Errorf("Failed to initialize hostname collector plugin, metric name was not defined") } return &HostnameCollectorPlugin{ @@ -52,15 +52,17 @@ func (p *HostnameCollectorPlugin) NewCollector( // RPS data from a specific hostname from prometheus. The idea // of the copy is to not modify the original config struct. confCopy := *config - //hostnames := config.Config["hostnames"] - //weights := config.Config["weights"] if _, ok := config.Config["hostnames"]; !ok { - return nil, fmt.Errorf("hostname is not specified, unable to create collector") + return nil, fmt.Errorf("Hostname is not specified, unable to create collector") + } + regex, err := regexp.Compile("^[a-zA-Z0-9.-]+$") + if err != nil { + return nil, fmt.Errorf("Failed to create regular expression to match hostname format") } hostnames := strings.Split(config.Config["hostnames"], ",") for _, h := range hostnames { - if ok, err := regexp.MatchString("^[a-zA-Z0-9.-]+$", h); !ok || err != nil { + if ok := regex.MatchString(h); !ok { return nil, fmt.Errorf( "Invalid hostname format, unable to create collector: %s", h, @@ -105,7 +107,7 @@ func (c *HostnameCollector) GetMetrics() ([]CollectedMetric, error) { } if len(v) != 1 { - return nil, fmt.Errorf("expected to only get one metric value, got %d", len(v)) + return nil, fmt.Errorf("Expected to only get one metric value, got %d", len(v)) } return v, nil }