diff --git a/ddtrace/tracer/option.go b/ddtrace/tracer/option.go index e4f5f6ed36..ceb172413c 100644 --- a/ddtrace/tracer/option.go +++ b/ddtrace/tracer/option.go @@ -33,7 +33,6 @@ import ( "github.com/DataDog/dd-trace-go/v2/ddtrace/ext" "github.com/DataDog/dd-trace-go/v2/internal" appsecconfig "github.com/DataDog/dd-trace-go/v2/internal/appsec/config" - "github.com/DataDog/dd-trace-go/v2/internal/civisibility/constants" internalconfig "github.com/DataDog/dd-trace-go/v2/internal/config" "github.com/DataDog/dd-trace-go/v2/internal/env" "github.com/DataDog/dd-trace-go/v2/internal/globalconfig" @@ -319,9 +318,6 @@ type config struct { // ciVisibilityAgentless controls if the tracer is loaded with CI Visibility agentless mode. default false ciVisibilityAgentless bool - // ciVisibilityNoopTracer controls if CI Visibility must set a wrapper to behave like a noop tracer. default false - ciVisibilityNoopTracer bool - // logDirectory is directory for tracer logs specified by user-setting DD_TRACE_LOG_DIRECTORY. default empty/unused logDirectory string @@ -619,7 +615,6 @@ func newConfig(opts ...StartOption) (*config, error) { ciTransport := newCiVisibilityTransport(c) // Create a default CI Visibility Transport c.transport = ciTransport // Replace the default transport with the CI Visibility transport c.ciVisibilityAgentless = ciTransport.agentless - c.ciVisibilityNoopTracer = internal.BoolEnv(constants.CIVisibilityUseNoopTracer, false) } // if using stdout or traces are disabled or we are in ci visibility agentless mode, agent is disabled diff --git a/ddtrace/tracer/tracer.go b/ddtrace/tracer/tracer.go index 605d1db82d..df48299809 100644 --- a/ddtrace/tracer/tracer.go +++ b/ddtrace/tracer/tracer.go @@ -219,7 +219,7 @@ func Start(opts ...StartOption) error { t.Stop() return nil } - if t.config.internalConfig.CiVisibilityEnabled() && t.config.ciVisibilityNoopTracer { + if t.config.internalConfig.CiVisibilityEnabled() && t.config.internalConfig.CiVisibilityNoopTracer() { setGlobalTracer(wrapWithCiVisibilityNoopTracer(t)) } else { setGlobalTracer(t) diff --git a/internal/config/config.go b/internal/config/config.go index 7cde338974..4735b0f1f6 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -61,8 +61,10 @@ type Config struct { dynamicInstrumentationEnabled bool globalSampleRate float64 // ciVisibilityEnabled controls if the tracer is loaded with CI Visibility mode. default false - ciVisibilityEnabled bool - ciVisibilityAgentless bool + ciVisibilityEnabled bool + ciVisibilityAgentless bool + // ciVisibilityNoopTracer controls if CI Visibility must set a wrapper to behave like a noop tracer + ciVisibilityNoopTracer bool logDirectory string traceRateLimitPerSecond float64 } @@ -98,6 +100,7 @@ func loadConfig() *Config { cfg.globalSampleRate = provider.getFloat("DD_TRACE_SAMPLE_RATE", 0.0) cfg.ciVisibilityEnabled = provider.getBool(constants.CIVisibilityEnabledEnvironmentVariable, false) cfg.ciVisibilityAgentless = provider.getBool(constants.CIVisibilityAgentlessEnabledEnvironmentVariable, false) + cfg.ciVisibilityNoopTracer = provider.getBool(constants.CIVisibilityUseNoopTracer, false) cfg.logDirectory = provider.getString("DD_TRACE_LOG_DIRECTORY", "") cfg.traceRateLimitPerSecond = provider.getFloat("DD_TRACE_RATE_LIMIT", 0.0) @@ -149,3 +152,16 @@ func (c *Config) SetCiVisibilityEnabled(enabled bool, origin telemetry.Origin) { c.ciVisibilityEnabled = enabled telemetry.RegisterAppConfig(constants.CIVisibilityEnabledEnvironmentVariable, enabled, origin) } + +func (c *Config) CiVisibilityNoopTracer() bool { + c.mu.RLock() + defer c.mu.RUnlock() + return c.ciVisibilityNoopTracer +} + +func (c *Config) SetCiVisibilityNoopTracer(enabled bool, origin telemetry.Origin) { + c.mu.Lock() + defer c.mu.Unlock() + c.ciVisibilityNoopTracer = enabled + telemetry.RegisterAppConfig(constants.CIVisibilityUseNoopTracer, enabled, origin) +}