From 7a59027530618e5884b87fd012d2cad01045d2d7 Mon Sep 17 00:00:00 2001 From: Mikayla Toffler Date: Mon, 8 Dec 2025 12:57:32 -0500 Subject: [PATCH] start --- ddtrace/tracer/civisibility_transport.go | 4 +--- ddtrace/tracer/option.go | 6 +----- ddtrace/tracer/telemetry.go | 2 +- ddtrace/tracer/tracer.go | 2 +- internal/config/config.go | 18 ++++++++++++++++-- 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/ddtrace/tracer/civisibility_transport.go b/ddtrace/tracer/civisibility_transport.go index ff438b7118..e14d461af8 100644 --- a/ddtrace/tracer/civisibility_transport.go +++ b/ddtrace/tracer/civisibility_transport.go @@ -72,9 +72,7 @@ func newCiVisibilityTransport(config *config) *ciVisibilityTransport { defaultHeaders["Datadog-Entity-ID"] = eid } - // Determine if agentless mode is enabled through an environment variable. - agentlessEnabled := internal.BoolEnv(constants.CIVisibilityAgentlessEnabledEnvironmentVariable, false) - + agentlessEnabled := config.internalConfig.CiVisibilityAgentless() testCycleURL := "" if agentlessEnabled { // Agentless mode is enabled. diff --git a/ddtrace/tracer/option.go b/ddtrace/tracer/option.go index e4f5f6ed36..39c48a11f4 100644 --- a/ddtrace/tracer/option.go +++ b/ddtrace/tracer/option.go @@ -316,9 +316,6 @@ type config struct { // globalSampleRate holds sample rate read from environment variables. globalSampleRate float64 - // 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 @@ -618,12 +615,11 @@ func newConfig(opts ...StartOption) (*config, error) { c.logStartup = false // If we are in CI Visibility mode we don't want to log the startup to stdout to avoid polluting the output 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 - agentDisabled := c.logToStdout || !c.enabled.current || c.ciVisibilityAgentless + agentDisabled := c.logToStdout || !c.enabled.current || c.internalConfig.CiVisibilityAgentless() c.agent = loadAgentFeatures(agentDisabled, c.agentURL, c.httpClient) if c.agent.v1ProtocolAvailable { c.traceProtocol = traceProtocolV1 diff --git a/ddtrace/tracer/telemetry.go b/ddtrace/tracer/telemetry.go index 4704efd773..cf27318536 100644 --- a/ddtrace/tracer/telemetry.go +++ b/ddtrace/tracer/telemetry.go @@ -110,7 +110,7 @@ func startTelemetry(c *config) telemetry.Client { HTTPClient: c.httpClient, AgentURL: c.agentURL.String(), } - if c.logToStdout || c.ciVisibilityAgentless { + if c.logToStdout || c.internalConfig.CiVisibilityAgentless() { cfg.APIKey = env.Get("DD_API_KEY") } client, err := telemetry.NewClient(c.serviceName, c.env, c.version, cfg) diff --git a/ddtrace/tracer/tracer.go b/ddtrace/tracer/tracer.go index 605d1db82d..c407e29a10 100644 --- a/ddtrace/tracer/tracer.go +++ b/ddtrace/tracer/tracer.go @@ -227,7 +227,7 @@ func Start(opts ...StartOption) error { if t.dataStreams != nil { t.dataStreams.Start() } - if t.config.ciVisibilityAgentless { + if t.config.internalConfig.CiVisibilityAgentless() { // CI Visibility agentless mode doesn't require remote configuration. // start instrumentation telemetry unless it is disabled through the diff --git a/internal/config/config.go b/internal/config/config.go index 7cde338974..18b876d4c4 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -60,8 +60,9 @@ type Config struct { dataStreamsMonitoringEnabled bool dynamicInstrumentationEnabled bool globalSampleRate float64 - // ciVisibilityEnabled controls if the tracer is loaded with CI Visibility mode. default false - ciVisibilityEnabled bool + // ciVisibilityEnabled controls if the tracer is loaded with CI Visibility mode + ciVisibilityEnabled bool + // ciVisibilityAgentless controls if the tracer is loaded with CI Visibility agentless mode ciVisibilityAgentless bool logDirectory string traceRateLimitPerSecond float64 @@ -149,3 +150,16 @@ func (c *Config) SetCiVisibilityEnabled(enabled bool, origin telemetry.Origin) { c.ciVisibilityEnabled = enabled telemetry.RegisterAppConfig(constants.CIVisibilityEnabledEnvironmentVariable, enabled, origin) } + +func (c *Config) CiVisibilityAgentless() bool { + c.mu.RLock() + defer c.mu.RUnlock() + return c.ciVisibilityAgentless +} + +func (c *Config) SetCiVisibilityAgentless(enabled bool, origin telemetry.Origin) { + c.mu.Lock() + defer c.mu.Unlock() + c.ciVisibilityAgentless = enabled + telemetry.RegisterAppConfig(constants.CIVisibilityAgentlessEnabledEnvironmentVariable, enabled, origin) +}