From 56498ab8158744ef4af5c959ec5109b1d7b133f4 Mon Sep 17 00:00:00 2001 From: nikhilmantri0902 Date: Mon, 22 Sep 2025 12:58:10 +0530 Subject: [PATCH] chore: sdk/log/internal/x - generate x package from x component template (#7389) Closes #7382 Idea from https://github.com/open-telemetry/opentelemetry-go/pull/7361 Ref: https://github.com/open-telemetry/opentelemetry-go/pull/7361 Components that need to be processed: [sdk/log/internal/x](https://github.com/open-telemetry/opentelemetry-go/blob/7fdebbe3edc0e37118378bd1c1a3dfa50b70dc0d/sdk/log/internal/x) --------- Co-authored-by: Damien Mathieu <42@dmathieu.com> --- sdk/log/internal/gen.go | 8 +++++++ sdk/log/internal/x/features.go | 23 ++++++++++++++++++++ sdk/log/internal/x/features_test.go | 24 +++++++++++++++++++++ sdk/log/internal/x/x.go | 20 +++-------------- sdk/log/internal/x/x_test.go | 33 ++++++++++++++++++++--------- 5 files changed, 81 insertions(+), 27 deletions(-) create mode 100644 sdk/log/internal/gen.go create mode 100644 sdk/log/internal/x/features.go create mode 100644 sdk/log/internal/x/features_test.go diff --git a/sdk/log/internal/gen.go b/sdk/log/internal/gen.go new file mode 100644 index 000000000..dee3f808f --- /dev/null +++ b/sdk/log/internal/gen.go @@ -0,0 +1,8 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Package internal provides internal functionality for the sdk/log package. +package internal // import "go.opentelemetry.io/otel/sdk/log/internal" + +//go:generate gotmpl --body=../../../internal/shared/x/x.go.tmpl "--data={ \"pkg\": \"go.opentelemetry.io/otel/sdk/log\" }" --out=x/x.go +//go:generate gotmpl --body=../../../internal/shared/x/x_test.go.tmpl "--data={}" --out=x/x_test.go diff --git a/sdk/log/internal/x/features.go b/sdk/log/internal/x/features.go new file mode 100644 index 000000000..e0ac88a42 --- /dev/null +++ b/sdk/log/internal/x/features.go @@ -0,0 +1,23 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +// Package x documents experimental features for [go.opentelemetry.io/otel/sdk/log]. +package x // import "go.opentelemetry.io/otel/sdk/log/internal/x" + +import "strings" + +// Observability is an experimental feature flag that determines if SDK +// 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", "SELF_OBSERVABILITY"}, + func(v string) (string, bool) { + if strings.EqualFold(v, "true") { + return v, true + } + return "", false + }, +) diff --git a/sdk/log/internal/x/features_test.go b/sdk/log/internal/x/features_test.go new file mode 100644 index 000000000..de3072579 --- /dev/null +++ b/sdk/log/internal/x/features_test.go @@ -0,0 +1,24 @@ +// 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) + + const altKey = "OTEL_GO_X_SELF_OBSERVABILITY" + require.Contains(t, Observability.Keys(), altKey) + + 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/sdk/log/internal/x/x.go b/sdk/log/internal/x/x.go index 79eb83792..e597efb10 100644 --- a/sdk/log/internal/x/x.go +++ b/sdk/log/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/sdk/log/internal/x" import ( "os" - "strings" -) - -// Observability is an experimental feature flag that determines if SDK -// 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", "SELF_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/sdk/log/internal/x/x_test.go b/sdk/log/internal/x/x_test.go index 27e45afe5..a715d7608 100644 --- a/sdk/log/internal/x/x_test.go +++ b/sdk/log/internal/x/x_test.go @@ -1,27 +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" +) - const altKey = "OTEL_GO_X_SELF_OBSERVABILITY" - require.Contains(t, Observability.Keys(), altKey) +var mockFeature = newFeature([]string{"MOCK_FEATURE", "MOCK_FEATURE2"}, func(v string) (string, bool) { + if strings.EqualFold(v, "true") { + return v, true + } + return "", false +}) - 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))) +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) {