diff --git a/Makefile b/Makefile index be6bae6df..d90118503 100644 --- a/Makefile +++ b/Makefile @@ -45,12 +45,12 @@ MAKEFLAGS += --no-print-directory GOOS ?= $(shell go env GOOS) GOARCH ?= $(shell go env GOARCH) HOSTGO := env -u GOOS -u GOARCH -u GOARM -- go - -LDFLAGS := $(LDFLAGS) -X main.commit=$(commit) -X main.branch=$(branch) -X main.goos=$(GOOS) -X main.goarch=$(GOARCH) +INTERNAL_PKG=github.com/influxdata/telegraf/internal +LDFLAGS := $(LDFLAGS) -X $(INTERNAL_PKG).commit=$(commit) -X $(INTERNAL_PKG).branch=$(branch) ifneq ($(tag),) - LDFLAGS += -X main.version=$(version) + LDFLAGS += -X $(INTERNAL_PKG).version=$(version) else - LDFLAGS += -X main.version=$(version)-$(commit) + LDFLAGS += -X $(INTERNAL_PKG).version=$(version)-$(commit) endif # Go built-in race detector works only for 64 bits architectures. diff --git a/cmd/telegraf/telegraf.go b/cmd/telegraf/telegraf.go index b36d0d28c..907787fb3 100644 --- a/cmd/telegraf/telegraf.go +++ b/cmd/telegraf/telegraf.go @@ -126,12 +126,6 @@ var fPlugins = flag.String("plugin-directory", "", "path to directory containing external plugins") var fRunOnce = flag.Bool("once", false, "run one gather and exit") -var ( - version string - commit string - branch string -) - var stop chan struct{} func reloadLoop( @@ -277,7 +271,7 @@ func runAgent(ctx context.Context, logger.SetupLogging(logConfig) - log.Printf("I! Starting Telegraf %s", version) + log.Printf("I! Starting Telegraf %s", internal.Version()) log.Printf("I! Loaded inputs: %s", strings.Join(c.InputNames(), " ")) log.Printf("I! Loaded aggregators: %s", strings.Join(c.AggregatorNames(), " ")) log.Printf("I! Loaded processors: %s", strings.Join(c.ProcessorNames(), " ")) @@ -348,29 +342,6 @@ func usageExit(rc int) { os.Exit(rc) } -func formatFullVersion() string { - var parts = []string{"Telegraf"} - - if version != "" { - parts = append(parts, version) - } else { - parts = append(parts, "unknown") - } - - if branch != "" || commit != "" { - if branch == "" { - branch = "unknown" - } - if commit == "" { - commit = "unknown" - } - git := fmt.Sprintf("(git: %s %s)", branch, commit) - parts = append(parts, git) - } - - return strings.Join(parts, " ") -} - func deleteEmpty(s []string) []string { var r []string for _, str := range s { @@ -410,11 +381,6 @@ func main() { logger.SetupLogging(logger.LogConfig{}) - // Configure version - if err := internal.SetVersion(version); err != nil { - log.Println("Telegraf version already configured to: " + internal.Version()) - } - // Load external plugins, if requested. if *fPlugins != "" { log.Printf("I! Loading external plugins from: %s", *fPlugins) @@ -443,7 +409,7 @@ func main() { if len(args) > 0 { switch args[0] { case "version": - fmt.Println(formatFullVersion()) + fmt.Println(internal.FormatFullVersion()) return case "config": err := configCmd.Parse(args[1:]) @@ -534,7 +500,7 @@ func main() { } return case *fVersion: - fmt.Println(formatFullVersion()) + fmt.Println(internal.FormatFullVersion()) return case *fSampleConfig: printer.PrintSampleConfig( diff --git a/internal/internal.go b/internal/internal.go index 0c6cba5af..022c6634f 100644 --- a/internal/internal.go +++ b/internal/internal.go @@ -23,37 +23,50 @@ import ( const alphanum string = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" var ( - ErrTimeout = errors.New("command timed out") - ErrorNotImplemented = errors.New("not implemented yet") - ErrorVersionAlreadySet = errors.New("version has already been set") + ErrTimeout = errors.New("command timed out") + ErrorNotImplemented = errors.New("not implemented yet") ) -// Set via the main module -var version string +// Set via LDFLAGS -X +var ( + version = "unknown" + branch = "" + commit = "" +) type ReadWaitCloser struct { pipeReader *io.PipeReader wg sync.WaitGroup } -// SetVersion sets the telegraf agent version -func SetVersion(v string) error { - if version != "" { - return ErrorVersionAlreadySet - } - version = v - if version == "" { - version = "unknown" - } - - return nil -} - // Version returns the telegraf agent version func Version() string { return version } +func FormatFullVersion() string { + var parts = []string{"Telegraf"} + + if version != "" { + parts = append(parts, version) + } else { + parts = append(parts, "unknown") + } + + if branch != "" || commit != "" { + if branch == "" { + branch = "unknown" + } + if commit == "" { + commit = "unknown" + } + git := fmt.Sprintf("(git: %s@%s)", branch, commit) + parts = append(parts, git) + } + + return strings.Join(parts, " ") +} + // ProductToken returns a tag for Telegraf that can be used in user agents. func ProductToken() string { return fmt.Sprintf("Telegraf/%s Go/%s", diff --git a/internal/internal_test.go b/internal/internal_test.go index 24fdb91bb..5c02e4098 100644 --- a/internal/internal_test.go +++ b/internal/internal_test.go @@ -219,18 +219,6 @@ func TestCompressWithGzipEarlyClose(t *testing.T) { assert.Equal(t, r1, r2) } -func TestVersionAlreadySet(t *testing.T) { - err := SetVersion("foo") - assert.NoError(t, err) - - err = SetVersion("bar") - - assert.Error(t, err) - assert.IsType(t, ErrorVersionAlreadySet, err) - - assert.Equal(t, "foo", Version()) -} - func TestAlignDuration(t *testing.T) { tests := []struct { name string diff --git a/plugins/inputs/internal/internal_test.go b/plugins/inputs/internal/internal_test.go index 0b89a974a..a4dc2eda8 100644 --- a/plugins/inputs/internal/internal_test.go +++ b/plugins/inputs/internal/internal_test.go @@ -21,13 +21,14 @@ func TestSelfPlugin(t *testing.T) { stat.Incr(1) stat.Incr(2) require.NoError(t, s.Gather(acc)) + acc.AssertContainsTaggedFields(t, "internal_mytest", map[string]interface{}{ "test": int64(3), }, map[string]string{ "test": "foo", - "version": "", + "version": "unknown", }, ) acc.ClearMetrics() @@ -41,7 +42,7 @@ func TestSelfPlugin(t *testing.T) { }, map[string]string{ "test": "foo", - "version": "", + "version": "unknown", }, ) acc.ClearMetrics() @@ -59,7 +60,7 @@ func TestSelfPlugin(t *testing.T) { }, map[string]string{ "test": "foo", - "version": "", + "version": "unknown", }, ) } diff --git a/plugins/outputs/opentelemetry/opentelemetry.go b/plugins/outputs/opentelemetry/opentelemetry.go index daf123f34..9e8a25827 100644 --- a/plugins/outputs/opentelemetry/opentelemetry.go +++ b/plugins/outputs/opentelemetry/opentelemetry.go @@ -4,8 +4,6 @@ package opentelemetry import ( "context" _ "embed" - "fmt" - "runtime" "time" ntls "crypto/tls" @@ -23,11 +21,12 @@ import ( "github.com/influxdata/telegraf" "github.com/influxdata/telegraf/config" + "github.com/influxdata/telegraf/internal" "github.com/influxdata/telegraf/plugins/common/tls" "github.com/influxdata/telegraf/plugins/outputs" ) -var userAgent = fmt.Sprintf("telegraf (%s/%s)", runtime.GOOS, runtime.GOARCH) +var userAgent = internal.ProductToken() // DO NOT REMOVE THE NEXT TWO LINES! This is required to embed the sampleConfig data. //go:embed sample.conf