diff --git a/internal/internal_test.go b/internal/internal_test.go index bb186f5fc..83a7e88d6 100644 --- a/internal/internal_test.go +++ b/internal/internal_test.go @@ -8,6 +8,7 @@ import ( "io/ioutil" "log" "os/exec" + "regexp" "testing" "time" @@ -480,3 +481,11 @@ func TestParseTimestamp(t *testing.T) { }) } } + +func TestProductToken(t *testing.T) { + token := ProductToken() + // Telegraf version depends on the call to SetVersion, it cannot be set + // multiple times and is not thread-safe. + re := regexp.MustCompile(`^Telegraf/[^\s]+ Go/\d+.\d+.\d+$`) + require.True(t, re.MatchString(token), token) +} diff --git a/plugins/inputs/solr/solr.go b/plugins/inputs/solr/solr.go index a9257c987..4629e0246 100644 --- a/plugins/inputs/solr/solr.go +++ b/plugins/inputs/solr/solr.go @@ -486,7 +486,7 @@ func (s *Solr) gatherData(url string, v interface{}) error { req.SetBasicAuth(s.Username, s.Password) } - req.Header.Set("User-Agent", "Telegraf/"+internal.Version()) + req.Header.Set("User-Agent", internal.ProductToken()) r, err := s.client.Do(req) if err != nil { diff --git a/plugins/outputs/http/http.go b/plugins/outputs/http/http.go index 746cba346..66fc0d5f0 100644 --- a/plugins/outputs/http/http.go +++ b/plugins/outputs/http/http.go @@ -193,7 +193,7 @@ func (h *HTTP) write(reqBody []byte) error { req.SetBasicAuth(h.Username, h.Password) } - req.Header.Set("User-Agent", "Telegraf/"+internal.Version()) + req.Header.Set("User-Agent", internal.ProductToken()) req.Header.Set("Content-Type", defaultContentType) if h.ContentEncoding == "gzip" { req.Header.Set("Content-Encoding", "gzip") diff --git a/plugins/outputs/http/http_test.go b/plugins/outputs/http/http_test.go index 0decdf024..abcf2db33 100644 --- a/plugins/outputs/http/http_test.go +++ b/plugins/outputs/http/http_test.go @@ -431,11 +431,9 @@ func TestDefaultUserAgent(t *testing.T) { u, err := url.Parse(fmt.Sprintf("http://%s", ts.Listener.Addr().String())) require.NoError(t, err) - internal.SetVersion("1.2.3") - t.Run("default-user-agent", func(t *testing.T) { ts.Config.Handler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - require.Equal(t, "Telegraf/1.2.3", r.Header.Get("User-Agent")) + require.Equal(t, internal.ProductToken(), r.Header.Get("User-Agent")) w.WriteHeader(http.StatusOK) }) diff --git a/plugins/outputs/influxdb/http.go b/plugins/outputs/influxdb/http.go index 5f25572d3..6656a8ee6 100644 --- a/plugins/outputs/influxdb/http.go +++ b/plugins/outputs/influxdb/http.go @@ -129,7 +129,7 @@ func NewHTTPClient(config HTTPConfig) (*httpClient, error) { userAgent := config.UserAgent if userAgent == "" { - userAgent = "Telegraf/" + internal.Version() + userAgent = internal.ProductToken() } if config.Headers == nil { diff --git a/plugins/outputs/influxdb/http_test.go b/plugins/outputs/influxdb/http_test.go index a59fadaf4..4b323c327 100644 --- a/plugins/outputs/influxdb/http_test.go +++ b/plugins/outputs/influxdb/http_test.go @@ -248,8 +248,6 @@ func TestHTTP_Write(t *testing.T) { u, err := url.Parse(fmt.Sprintf("http://%s", ts.Listener.Addr().String())) require.NoError(t, err) - internal.SetVersion("1.2.3") - tests := []struct { name string config influxdb.HTTPConfig @@ -310,7 +308,7 @@ func TestHTTP_Write(t *testing.T) { Log: testutil.Logger{}, }, queryHandlerFunc: func(t *testing.T, w http.ResponseWriter, r *http.Request) { - require.Equal(t, r.Header.Get("User-Agent"), "Telegraf/1.2.3") + require.Equal(t, internal.ProductToken(), r.Header.Get("User-Agent")) w.WriteHeader(http.StatusNoContent) }, }, diff --git a/plugins/outputs/influxdb_v2/http.go b/plugins/outputs/influxdb_v2/http.go index b94df889b..3034207dd 100644 --- a/plugins/outputs/influxdb_v2/http.go +++ b/plugins/outputs/influxdb_v2/http.go @@ -84,7 +84,7 @@ func NewHTTPClient(config *HTTPConfig) (*httpClient, error) { userAgent := config.UserAgent if userAgent == "" { - userAgent = "Telegraf/" + internal.Version() + userAgent = internal.ProductToken() } var headers = make(map[string]string, len(config.Headers)+2)