From 8c2fb6fcd6f164b241aca367e01e29de02712caa Mon Sep 17 00:00:00 2001 From: Peter Nguyen Date: Fri, 14 Nov 2025 00:06:00 -0800 Subject: [PATCH] chore: exporters/prometheus/internal/x - Generate x package from x component template (#7491) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Generates `x` using the template using `go generate` closes #7383 --------- Co-authored-by: Flcă‚› Co-authored-by: Damien Mathieu <42@dmathieu.com> --- exporters/prometheus/internal/gen.go | 3 ++ exporters/prometheus/internal/x/features.go | 22 +++++++++++++ .../prometheus/internal/x/features_test.go | 21 ++++++++++++ exporters/prometheus/internal/x/x.go | 20 ++---------- exporters/prometheus/internal/x/x_test.go | 32 ++++++++++++++----- 5 files changed, 73 insertions(+), 25 deletions(-) create mode 100644 exporters/prometheus/internal/x/features.go create mode 100644 exporters/prometheus/internal/x/features_test.go diff --git a/exporters/prometheus/internal/gen.go b/exporters/prometheus/internal/gen.go index 8cde0168a..add058a2e 100644 --- a/exporters/prometheus/internal/gen.go +++ b/exporters/prometheus/internal/gen.go @@ -7,3 +7,6 @@ package internal // import "go.opentelemetry.io/otel/exporters/prometheus/intern //go:generate gotmpl --body=../../../internal/shared/counter/counter.go.tmpl "--data={ \"pkg\": \"go.opentelemetry.io/otel/exporters/prometheus/internal/counter\" }" --out=counter/counter.go //go:generate gotmpl --body=../../../internal/shared/counter/counter_test.go.tmpl "--data={}" --out=counter/counter_test.go + +//go:generate gotmpl --body=../../../internal/shared/x/x.go.tmpl "--data={ \"pkg\": \"go.opentelemetry.io/otel/exporters/prometheus\" }" --out=x/x.go +//go:generate gotmpl --body=../../../internal/shared/x/x_test.go.tmpl "--data={}" --out=x/x_test.go diff --git a/exporters/prometheus/internal/x/features.go b/exporters/prometheus/internal/x/features.go new file mode 100644 index 000000000..fc9aeb08d --- /dev/null +++ b/exporters/prometheus/internal/x/features.go @@ -0,0 +1,22 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package x // import "go.opentelemetry.io/otel/exporters/prometheus/internal/x" + +import "strings" + +// Observability is an experimental feature flag that determines if exporter +// observability metrics are enabled. +// +// To enable this feature set the OTEL_GO_X_OBSERVABILITY environment variable +// to the case-insensitive string value of "true" (i.e. "True" and "TRUE" +// will also enable this). +var Observability = newFeature( + []string{"OBSERVABILITY"}, + func(v string) (string, bool) { + if strings.EqualFold(v, "true") { + return v, true + } + return "", false + }, +) diff --git a/exporters/prometheus/internal/x/features_test.go b/exporters/prometheus/internal/x/features_test.go new file mode 100644 index 000000000..a8d3fb06e --- /dev/null +++ b/exporters/prometheus/internal/x/features_test.go @@ -0,0 +1,21 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package x + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestObservability(t *testing.T) { + const key = "OTEL_GO_X_OBSERVABILITY" + require.Contains(t, Observability.Keys(), key) + + t.Run("100", run(setenv(key, "100"), assertDisabled(Observability))) + t.Run("true", run(setenv(key, "true"), assertEnabled(Observability, "true"))) + t.Run("True", run(setenv(key, "True"), assertEnabled(Observability, "True"))) + t.Run("false", run(setenv(key, "false"), assertDisabled(Observability))) + t.Run("empty", run(assertDisabled(Observability))) +} diff --git a/exporters/prometheus/internal/x/x.go b/exporters/prometheus/internal/x/x.go index de4fd5b09..60d0baa72 100644 --- a/exporters/prometheus/internal/x/x.go +++ b/exporters/prometheus/internal/x/x.go @@ -1,3 +1,6 @@ +// Code generated by gotmpl. DO NOT MODIFY. +// source: internal/shared/x/x.go.tmpl + // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 @@ -6,23 +9,6 @@ package x // import "go.opentelemetry.io/otel/exporters/prometheus/internal/x" import ( "os" - "strings" -) - -// Observability is an experimental feature flag that determines if exporter -// observability metrics are enabled. -// -// To enable this feature set the OTEL_GO_X_OBSERVABILITY environment variable -// to the case-insensitive string value of "true" (i.e. "True" and "TRUE" -// will also enable this). -var Observability = newFeature( - []string{"OBSERVABILITY"}, - func(v string) (string, bool) { - if strings.EqualFold(v, "true") { - return v, true - } - return "", false - }, ) // Feature is an experimental feature control flag. It provides a uniform way diff --git a/exporters/prometheus/internal/x/x_test.go b/exporters/prometheus/internal/x/x_test.go index c02cf3499..a715d7608 100644 --- a/exporters/prometheus/internal/x/x_test.go +++ b/exporters/prometheus/internal/x/x_test.go @@ -1,24 +1,40 @@ +// Code generated by gotmpl. DO NOT MODIFY. +// source: internal/shared/x/x_text.go.tmpl + // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 package x import ( + "strings" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) -func TestObservability(t *testing.T) { - const key = "OTEL_GO_X_OBSERVABILITY" - require.Contains(t, Observability.Keys(), key) +const ( + mockKey = "OTEL_GO_X_MOCK_FEATURE" + mockKey2 = "OTEL_GO_X_MOCK_FEATURE2" +) - t.Run("100", run(setenv(key, "100"), assertDisabled(Observability))) - t.Run("true", run(setenv(key, "true"), assertEnabled(Observability, "true"))) - t.Run("True", run(setenv(key, "True"), assertEnabled(Observability, "True"))) - t.Run("false", run(setenv(key, "false"), assertDisabled(Observability))) - t.Run("empty", run(assertDisabled(Observability))) +var mockFeature = newFeature([]string{"MOCK_FEATURE", "MOCK_FEATURE2"}, func(v string) (string, bool) { + if strings.EqualFold(v, "true") { + return v, true + } + return "", false +}) + +func TestFeature(t *testing.T) { + require.Contains(t, mockFeature.Keys(), mockKey) + require.Contains(t, mockFeature.Keys(), mockKey2) + + t.Run("100", run(setenv(mockKey, "100"), assertDisabled(mockFeature))) + t.Run("true", run(setenv(mockKey, "true"), assertEnabled(mockFeature, "true"))) + t.Run("True", run(setenv(mockKey, "True"), assertEnabled(mockFeature, "True"))) + t.Run("false", run(setenv(mockKey, "false"), assertDisabled(mockFeature))) + t.Run("empty", run(assertDisabled(mockFeature))) } func run(steps ...func(*testing.T)) func(*testing.T) {