From 7ad66f6d83b9e78bdd6811d02245ab2f1f3cf9ee Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Wed, 7 May 2025 17:32:40 -0400 Subject: [PATCH 01/16] chore(telemetry): track whether tracing was enabled via ssi --- .../Datadog.Trace/Configuration/TracerSettings.cs | 15 +++++++++++++++ .../Telemetry/DTOs/ConfigTelemetryData.cs | 1 + 2 files changed, 16 insertions(+) diff --git a/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs b/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs index 02ccf8a4baed..60214c5d4148 100644 --- a/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs +++ b/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs @@ -486,6 +486,21 @@ _ when x.ToBoolean() is { } boolean => boolean, telemetry.Record(ConfigTelemetryData.SsiInjectionEnabled, value: EnvironmentHelpers.GetEnvironmentVariable("DD_INJECTION_ENABLED"), recordValue: true, ConfigurationOrigins.EnvVars); telemetry.Record(ConfigTelemetryData.SsiAllowUnsupportedRuntimesEnabled, value: EnvironmentHelpers.GetEnvironmentVariable("DD_INJECT_FORCE"), recordValue: true, ConfigurationOrigins.EnvVars); + if (EnvironmentHelpers.GetEnvironmentVariable("DD_INJECTION_ENABLED")?.Contains("tracer") == true) + { + telemetry.Record(ConfigTelemetryData.InstrumentationSource, "ssi", recordValue: true, ConfigurationOrigins.EnvVars); + } + else + { + string? value = EnvironmentHelpers.GetEnvironmentVariable("DD_INSTRUMENTATION_INSTALL_TYPE"); + if (value != null) + { + telemetry.Record(ConfigTelemetryData.InstrumentationSource, value, recordValue: true, ConfigurationOrigins.EnvVars); + } else { + telemetry.Record(ConfigTelemetryData.InstrumentationSource, "unknown", recordValue: true, ConfigurationOrigins.EnvVars); + } + } + if (AzureAppServiceMetadata is not null) { telemetry.Record(ConfigTelemetryData.AasConfigurationError, AzureAppServiceMetadata.IsUnsafeToTrace, ConfigurationOrigins.Default); diff --git a/tracer/src/Datadog.Trace/Telemetry/DTOs/ConfigTelemetryData.cs b/tracer/src/Datadog.Trace/Telemetry/DTOs/ConfigTelemetryData.cs index b83ce8c20ee6..4d74f5114dcb 100644 --- a/tracer/src/Datadog.Trace/Telemetry/DTOs/ConfigTelemetryData.cs +++ b/tracer/src/Datadog.Trace/Telemetry/DTOs/ConfigTelemetryData.cs @@ -22,6 +22,7 @@ internal static class ConfigTelemetryData public const string CodeHotspotsEnabled = "code_hotspots_enabled"; public const string SsiInjectionEnabled = "ssi_injection_enabled"; + public const string InstrumentationSource = "instrumentation_source"; public const string SsiAllowUnsupportedRuntimesEnabled = "ssi_forced_injection_enabled"; // We intentionally are using specific values here, not OR_GREATER_THAN From 3ba8c4bbceabf308772d27ea3cf9922076f46850 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Mon, 12 May 2025 14:48:24 -0400 Subject: [PATCH 02/16] use unknown is as the other scenario --- tracer/src/Datadog.Trace/Configuration/TracerSettings.cs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs b/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs index 60214c5d4148..4c6e13708073 100644 --- a/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs +++ b/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs @@ -492,13 +492,8 @@ _ when x.ToBoolean() is { } boolean => boolean, } else { - string? value = EnvironmentHelpers.GetEnvironmentVariable("DD_INSTRUMENTATION_INSTALL_TYPE"); - if (value != null) - { - telemetry.Record(ConfigTelemetryData.InstrumentationSource, value, recordValue: true, ConfigurationOrigins.EnvVars); - } else { - telemetry.Record(ConfigTelemetryData.InstrumentationSource, "unknown", recordValue: true, ConfigurationOrigins.EnvVars); - } + // TODO: capture `cmd_line` and `manual` values + telemetry.Record(ConfigTelemetryData.InstrumentationSource, "unknown", recordValue: true, ConfigurationOrigins.EnvVars); } if (AzureAppServiceMetadata is not null) From c5d055954c762dd2354f0bc49f3a8b740c98d169 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Mon, 12 May 2025 18:33:03 -0400 Subject: [PATCH 03/16] add simple test and clean up unknown TODO --- tracer/src/Datadog.Trace/Configuration/TracerSettings.cs | 6 +++--- .../Collectors/ConfigurationTelemetryCollectorTests.cs | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs b/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs index 4c6e13708073..1ca779a8c463 100644 --- a/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs +++ b/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs @@ -488,12 +488,12 @@ _ when x.ToBoolean() is { } boolean => boolean, if (EnvironmentHelpers.GetEnvironmentVariable("DD_INJECTION_ENABLED")?.Contains("tracer") == true) { - telemetry.Record(ConfigTelemetryData.InstrumentationSource, "ssi", recordValue: true, ConfigurationOrigins.EnvVars); + telemetry.Record(ConfigTelemetryData.InstrumentationSource, "ssi", recordValue: true, ConfigurationOrigins.Default); } else { - // TODO: capture `cmd_line` and `manual` values - telemetry.Record(ConfigTelemetryData.InstrumentationSource, "unknown", recordValue: true, ConfigurationOrigins.EnvVars); + // TODO: capture `cmd_line/dd-trace tool` and `env_var` values + telemetry.Record(ConfigTelemetryData.InstrumentationSource, "unknown", recordValue: true, ConfigurationOrigins.Default); } if (AzureAppServiceMetadata is not null) diff --git a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs index 35c60a493764..c183d59ce35c 100644 --- a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs @@ -233,6 +233,7 @@ public void ConfigurationDataShouldReportDefaultValues() GetLatestValueFromConfig(data, "DD_TRACE_HEADER_TAGS", ConfigurationOrigins.Default).Should().Be(string.Empty); GetLatestValueFromConfig(data, "DD_LOGS_INJECTION", ConfigurationOrigins.Default).Should().Be(false); GetLatestValueFromConfig(data, "DD_TRACE_SAMPLE_RATE", ConfigurationOrigins.Default).Should().Be(1.0); + GetLatestValueFromConfig(data, "instrumentation_source", ConfigurationOrigins.Default).Should().Be("unknown"); } #if NETFRAMEWORK From a0b793a2104ffebe2eb2845579ae063e1f85e1bc Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Tue, 13 May 2025 15:14:37 -0400 Subject: [PATCH 04/16] add one more test case --- .../ConfigurationTelemetryCollectorTests.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs index c183d59ce35c..72300494cd0a 100644 --- a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs @@ -236,6 +236,25 @@ public void ConfigurationDataShouldReportDefaultValues() GetLatestValueFromConfig(data, "instrumentation_source", ConfigurationOrigins.Default).Should().Be("unknown"); } + [Fact] + public void ConfigurationDataShouldReportSSIValues() + { + var collector = new ConfigurationTelemetry(); + var source = new NameValueConfigurationSource(new NameValueCollection + { + { "DD_INJECTION_ENABLED", "tracer" }, + { "DD_INJECT_FORCE", "true" } + }); + + _ = new ImmutableTracerSettings(new TracerSettings(source, collector)); + _ = new SecuritySettings(source, collector); + + var data = collector.GetData(); + GetLatestValueFromConfig(data, "ssi_injection_enabled", ConfigurationOrigins.Default).Should().Be("tracer"); + GetLatestValueFromConfig(data, "instrumentation_source", ConfigurationOrigins.Default).Should().Be("ssi"); + GetLatestValueFromConfig(data, "ssi_forced_injection_enabled", ConfigurationOrigins.Default).Should().Be("true"); + } + #if NETFRAMEWORK [Fact] public void ConfigurationDataShouldIncludeExpectedFullTrustValues() From 0fbe7edbbbd5294bc611a754610e4bf3114958e7 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Fri, 23 May 2025 10:22:47 +0200 Subject: [PATCH 05/16] fix broken test --- .../ConfigurationTelemetryCollectorTests.cs | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs index 72300494cd0a..82a71d6d083d 100644 --- a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs @@ -20,6 +20,7 @@ namespace Datadog.Trace.Tests.Telemetry; +[Collection(nameof(EnvironmentVariablesTestCollection))] public class ConfigurationTelemetryCollectorTests { public static IEnumerable GetPropagatorConfigurations() @@ -239,20 +240,30 @@ public void ConfigurationDataShouldReportDefaultValues() [Fact] public void ConfigurationDataShouldReportSSIValues() { - var collector = new ConfigurationTelemetry(); - var source = new NameValueConfigurationSource(new NameValueCollection + // Store original variable + var originalInjectionEnabled = Environment.GetEnvironmentVariable("DD_INJECTION_ENABLED"); + var originalInjectionForce = Environment.GetEnvironmentVariable("DD_INJECT_FORCE"); + // Set environment variable to override + try { - { "DD_INJECTION_ENABLED", "tracer" }, - { "DD_INJECT_FORCE", "true" } - }); + Environment.SetEnvironmentVariable("DD_INJECTION_ENABLED", "tracer"); + Environment.SetEnvironmentVariable("DD_INJECT_FORCE", "true"); - _ = new ImmutableTracerSettings(new TracerSettings(source, collector)); - _ = new SecuritySettings(source, collector); - - var data = collector.GetData(); - GetLatestValueFromConfig(data, "ssi_injection_enabled", ConfigurationOrigins.Default).Should().Be("tracer"); - GetLatestValueFromConfig(data, "instrumentation_source", ConfigurationOrigins.Default).Should().Be("ssi"); - GetLatestValueFromConfig(data, "ssi_forced_injection_enabled", ConfigurationOrigins.Default).Should().Be("true"); + var collector = new ConfigurationTelemetry(); + var source = new NameValueConfigurationSource(new NameValueCollection{}); + _ = new ImmutableTracerSettings(new TracerSettings(source, collector)); + _ = new SecuritySettings(source, collector); + var data = collector.GetData(); + GetLatestValueFromConfig(data, "ssi_injection_enabled", ConfigurationOrigins.Default).Should().Be("tracer"); + GetLatestValueFromConfig(data, "instrumentation_source", ConfigurationOrigins.Default).Should().Be("ssi"); + GetLatestValueFromConfig(data, "ssi_forced_injection_enabled", ConfigurationOrigins.Default).Should().Be("true"); + } + finally + { + // Restore original variable + Environment.SetEnvironmentVariable("DD_INJECTION_ENABLED", originalInjectionEnabled); + Environment.SetEnvironmentVariable("DD_INJECT_FORCE", originalInjectionForce); + } } #if NETFRAMEWORK From a83204163d6d90f5daa663c7d27198221e162089 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Wed, 4 Jun 2025 13:10:10 -0400 Subject: [PATCH 06/16] fix syntax error --- .../Collectors/ConfigurationTelemetryCollectorTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs index e2e437d690fc..9230637be9a1 100644 --- a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs @@ -255,7 +255,7 @@ public void ConfigurationDataShouldReportSSIValues() Environment.SetEnvironmentVariable("DD_INJECT_FORCE", "true"); var collector = new ConfigurationTelemetry(); - var source = new NameValueConfigurationSource(new NameValueCollection{}); + var source = new NameValueConfigurationSource(new NameValueCollection()); _ = new ImmutableTracerSettings(new TracerSettings(source, collector)); _ = new SecuritySettings(source, collector); var data = collector.GetData(); From 78bee0bf566eb486f5cf39c52f3cdac82cea307d Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Wed, 4 Jun 2025 14:06:42 -0400 Subject: [PATCH 07/16] remove old syntax --- .../Collectors/ConfigurationTelemetryCollectorTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs index 9230637be9a1..4b61e0d5b3af 100644 --- a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs @@ -256,7 +256,7 @@ public void ConfigurationDataShouldReportSSIValues() var collector = new ConfigurationTelemetry(); var source = new NameValueConfigurationSource(new NameValueCollection()); - _ = new ImmutableTracerSettings(new TracerSettings(source, collector)); + _ = new TracerSettings(source, collector, new OverrideErrorLog()); _ = new SecuritySettings(source, collector); var data = collector.GetData(); GetLatestValueFromConfig(data, "ssi_injection_enabled", ConfigurationOrigins.Default).Should().Be("tracer"); From a800435393c8fb0495c69f8bfd9d8f9125cef467 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Wed, 4 Jun 2025 14:50:20 -0400 Subject: [PATCH 08/16] add instrumentation source to norm rules --- .../Collectors/ConfigurationTelemetryCollectorTests.cs | 2 +- .../test/Datadog.Trace.Tests/Telemetry/config_norm_rules.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs index 4b61e0d5b3af..2d149cda8bfd 100644 --- a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs @@ -260,8 +260,8 @@ public void ConfigurationDataShouldReportSSIValues() _ = new SecuritySettings(source, collector); var data = collector.GetData(); GetLatestValueFromConfig(data, "ssi_injection_enabled", ConfigurationOrigins.Default).Should().Be("tracer"); - GetLatestValueFromConfig(data, "instrumentation_source", ConfigurationOrigins.Default).Should().Be("ssi"); GetLatestValueFromConfig(data, "ssi_forced_injection_enabled", ConfigurationOrigins.Default).Should().Be("true"); + GetLatestValueFromConfig(data, "instrumentation_source", ConfigurationOrigins.Default).Should().Be("ssi"); } finally { diff --git a/tracer/test/Datadog.Trace.Tests/Telemetry/config_norm_rules.json b/tracer/test/Datadog.Trace.Tests/Telemetry/config_norm_rules.json index 560c4c54d45f..4e98d8ac1411 100644 --- a/tracer/test/Datadog.Trace.Tests/Telemetry/config_norm_rules.json +++ b/tracer/test/Datadog.Trace.Tests/Telemetry/config_norm_rules.json @@ -644,6 +644,7 @@ "dd_trace_writer_max_payload_size_bytes": "trace_agent_max_payload_size", "dd_trace_writer_reuse_connections": "trace_agent_reuse_connections", "tracing_enabled": "trace_enabled", + "instrumentation_source": "instrumentation_source", "ssi_injection_enabled": "ssi_injection_enabled", "DD_INJECTION_ENABLED": "ssi_injection_enabled", "ssi_forced_injection_enabled": "ssi_forced_injection_enabled", From efc26dbe4dccbd1b94fec432d9f262af781b62fe Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Wed, 4 Jun 2025 14:55:26 -0400 Subject: [PATCH 09/16] fix test --- .../Collectors/ConfigurationTelemetryCollectorTests.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs index 2d149cda8bfd..b567f7c28407 100644 --- a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs @@ -259,9 +259,9 @@ public void ConfigurationDataShouldReportSSIValues() _ = new TracerSettings(source, collector, new OverrideErrorLog()); _ = new SecuritySettings(source, collector); var data = collector.GetData(); - GetLatestValueFromConfig(data, "ssi_injection_enabled", ConfigurationOrigins.Default).Should().Be("tracer"); - GetLatestValueFromConfig(data, "ssi_forced_injection_enabled", ConfigurationOrigins.Default).Should().Be("true"); - GetLatestValueFromConfig(data, "instrumentation_source", ConfigurationOrigins.Default).Should().Be("ssi"); + GetLatestValueFromConfig(data, "ssi_injection_enabled", ConfigurationOrigins.EnvVars).Should().Be("tracer"); + GetLatestValueFromConfig(data, "ssi_forced_injection_enabled", ConfigurationOrigins.EnvVars).Should().Be("true"); + GetLatestValueFromConfig(data, "instrumentation_source", ConfigurationOrigins.EnvVars).Should().Be("ssi"); } finally { From 6219b371ad2880962b54ebc12b803f96d099d171 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Wed, 4 Jun 2025 15:33:41 -0400 Subject: [PATCH 10/16] attempt 200 --- .../Collectors/ConfigurationTelemetryCollectorTests.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs index b567f7c28407..2e939fb9e73c 100644 --- a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs @@ -259,9 +259,9 @@ public void ConfigurationDataShouldReportSSIValues() _ = new TracerSettings(source, collector, new OverrideErrorLog()); _ = new SecuritySettings(source, collector); var data = collector.GetData(); - GetLatestValueFromConfig(data, "ssi_injection_enabled", ConfigurationOrigins.EnvVars).Should().Be("tracer"); - GetLatestValueFromConfig(data, "ssi_forced_injection_enabled", ConfigurationOrigins.EnvVars).Should().Be("true"); - GetLatestValueFromConfig(data, "instrumentation_source", ConfigurationOrigins.EnvVars).Should().Be("ssi"); + GetLatestValueFromConfig(data, ConfigTelemetryData.SsiInjectionEnabled).Should().Be("tracer"); + GetLatestValueFromConfig(data, ConfigTelemetryData.SsiAllowUnsupportedRuntimesEnabled).Should().Be("true"); + GetLatestValueFromConfig(data, ConfigTelemetryData.InstrumentationSource).Should().Be("ssi"); } finally { From 1ae0c71c75b4a93bc117bdf0e15eeb32a8a62100 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Thu, 5 Jun 2025 11:27:38 -0400 Subject: [PATCH 11/16] Update tracer/src/Datadog.Trace/Configuration/TracerSettings.cs Co-authored-by: Andrew Lock --- .../Configuration/TracerSettings.cs | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs b/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs index e558de1e9ed8..93c9a26459b9 100644 --- a/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs +++ b/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs @@ -751,15 +751,22 @@ _ when x.ToBoolean() is { } boolean => boolean, telemetry.Record(ConfigTelemetryData.SsiInjectionEnabled, value: EnvironmentHelpers.GetEnvironmentVariable("DD_INJECTION_ENABLED"), recordValue: true, ConfigurationOrigins.EnvVars); telemetry.Record(ConfigTelemetryData.SsiAllowUnsupportedRuntimesEnabled, value: EnvironmentHelpers.GetEnvironmentVariable("DD_INJECT_FORCE"), recordValue: true, ConfigurationOrigins.EnvVars); - if (EnvironmentHelpers.GetEnvironmentVariable("DD_INJECTION_ENABLED")?.Contains("tracer") == true) - { - telemetry.Record(ConfigTelemetryData.InstrumentationSource, "ssi", recordValue: true, ConfigurationOrigins.Default); - } - else - { - // TODO: capture `cmd_line/dd-trace tool` and `env_var` values - telemetry.Record(ConfigTelemetryData.InstrumentationSource, "unknown", recordValue: true, ConfigurationOrigins.Default); - } + var installType = EnvironmentHelpers.GetEnvironmentVariable("DD_INSTRUMENTATION_INSTALL_TYPE"); + + var instrumentationSource = installType switch + { + // not sure what values you actually want for these, + // e.g. do you want to be able to distinguish between them? + "dd_dotnet_launcher" => "cmd_line", + "dd_trace_tool" => "cmd_line", + "dotnet_msi" => "env_var", + "windows_fleet_installer" => "ssi", // windows SSI on IIS + _ when !string.IsNullOrEmpty(EnvironmentHelpers.GetEnvironmentVariable("DD_INJECTION_ENABLED")) => "ssi", // "normal" ssi + _ => "unknown" // everything else + }; + + telemetry.Record(ConfigTelemetryData.InstrumentationSource, instrumentationSource, recordValue: true, ConfigurationOrigins.Calculated); + if (AzureAppServiceMetadata is not null) { From a39297ffca5d17752c919ad185cce21fb05dff63 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Thu, 5 Jun 2025 11:29:17 -0400 Subject: [PATCH 12/16] use EnvironmentRestorer --- .../ConfigurationTelemetryCollectorTests.cs | 34 ++++++------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs index 2e939fb9e73c..2412d104398b 100644 --- a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs @@ -243,32 +243,20 @@ public void ConfigurationDataShouldReportDefaultValues() } [Fact] + [EnvironmentRestorer("DD_INJECTION_ENABLED", "DD_INJECT_FORCE")] public void ConfigurationDataShouldReportSSIValues() { - // Store original variable - var originalInjectionEnabled = Environment.GetEnvironmentVariable("DD_INJECTION_ENABLED"); - var originalInjectionForce = Environment.GetEnvironmentVariable("DD_INJECT_FORCE"); - // Set environment variable to override - try - { - Environment.SetEnvironmentVariable("DD_INJECTION_ENABLED", "tracer"); - Environment.SetEnvironmentVariable("DD_INJECT_FORCE", "true"); + Environment.SetEnvironmentVariable("DD_INJECTION_ENABLED", "tracer"); + Environment.SetEnvironmentVariable("DD_INJECT_FORCE", "true"); - var collector = new ConfigurationTelemetry(); - var source = new NameValueConfigurationSource(new NameValueCollection()); - _ = new TracerSettings(source, collector, new OverrideErrorLog()); - _ = new SecuritySettings(source, collector); - var data = collector.GetData(); - GetLatestValueFromConfig(data, ConfigTelemetryData.SsiInjectionEnabled).Should().Be("tracer"); - GetLatestValueFromConfig(data, ConfigTelemetryData.SsiAllowUnsupportedRuntimesEnabled).Should().Be("true"); - GetLatestValueFromConfig(data, ConfigTelemetryData.InstrumentationSource).Should().Be("ssi"); - } - finally - { - // Restore original variable - Environment.SetEnvironmentVariable("DD_INJECTION_ENABLED", originalInjectionEnabled); - Environment.SetEnvironmentVariable("DD_INJECT_FORCE", originalInjectionForce); - } + var collector = new ConfigurationTelemetry(); + var source = new NameValueConfigurationSource(new NameValueCollection()); + _ = new TracerSettings(source, collector, new OverrideErrorLog()); + _ = new SecuritySettings(source, collector); + var data = collector.GetData(); + GetLatestValueFromConfig(data, ConfigTelemetryData.SsiInjectionEnabled).Should().Be("tracer"); + GetLatestValueFromConfig(data, ConfigTelemetryData.SsiAllowUnsupportedRuntimesEnabled).Should().Be("true"); + GetLatestValueFromConfig(data, ConfigTelemetryData.InstrumentationSource).Should().Be("ssi"); } #if NETFRAMEWORK From 203070ce2c50f8adbe19ff1bb9ff791502d08e0e Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Thu, 5 Jun 2025 13:53:47 -0400 Subject: [PATCH 13/16] lint --- .../Configuration/TracerSettings.cs | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs b/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs index 93c9a26459b9..850127f73caa 100644 --- a/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs +++ b/tracer/src/Datadog.Trace/Configuration/TracerSettings.cs @@ -751,22 +751,19 @@ _ when x.ToBoolean() is { } boolean => boolean, telemetry.Record(ConfigTelemetryData.SsiInjectionEnabled, value: EnvironmentHelpers.GetEnvironmentVariable("DD_INJECTION_ENABLED"), recordValue: true, ConfigurationOrigins.EnvVars); telemetry.Record(ConfigTelemetryData.SsiAllowUnsupportedRuntimesEnabled, value: EnvironmentHelpers.GetEnvironmentVariable("DD_INJECT_FORCE"), recordValue: true, ConfigurationOrigins.EnvVars); - var installType = EnvironmentHelpers.GetEnvironmentVariable("DD_INSTRUMENTATION_INSTALL_TYPE"); - - var instrumentationSource = installType switch - { - // not sure what values you actually want for these, - // e.g. do you want to be able to distinguish between them? - "dd_dotnet_launcher" => "cmd_line", - "dd_trace_tool" => "cmd_line", - "dotnet_msi" => "env_var", - "windows_fleet_installer" => "ssi", // windows SSI on IIS - _ when !string.IsNullOrEmpty(EnvironmentHelpers.GetEnvironmentVariable("DD_INJECTION_ENABLED")) => "ssi", // "normal" ssi - _ => "unknown" // everything else - }; + var installType = EnvironmentHelpers.GetEnvironmentVariable("DD_INSTRUMENTATION_INSTALL_TYPE"); - telemetry.Record(ConfigTelemetryData.InstrumentationSource, instrumentationSource, recordValue: true, ConfigurationOrigins.Calculated); + var instrumentationSource = installType switch + { + "dd_dotnet_launcher" => "cmd_line", + "dd_trace_tool" => "cmd_line", + "dotnet_msi" => "env_var", + "windows_fleet_installer" => "ssi", // windows SSI on IIS + _ when !string.IsNullOrEmpty(EnvironmentHelpers.GetEnvironmentVariable("DD_INJECTION_ENABLED")) => "ssi", // "normal" ssi + _ => "unknown" // everything else + }; + telemetry.Record(ConfigTelemetryData.InstrumentationSource, instrumentationSource, recordValue: true, ConfigurationOrigins.Calculated); if (AzureAppServiceMetadata is not null) { From 20076cec651a30ab5641cffedfaf5e2a593a4d9a Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Thu, 5 Jun 2025 14:36:15 -0400 Subject: [PATCH 14/16] fix EnvironmentRestorer syntax error --- .../Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs index 2412d104398b..884854b5f66e 100644 --- a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs @@ -13,6 +13,7 @@ using Datadog.Trace.Configuration.Telemetry; using Datadog.Trace.Iast.Settings; using Datadog.Trace.Telemetry; +using Datadog.Trace.TestHelpers; using FluentAssertions; using FluentAssertions.Execution; using Moq; From bc69a4f05e709db4118793bfdea08380082c9019 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Thu, 5 Jun 2025 15:47:34 -0400 Subject: [PATCH 15/16] set annotation on class, not func --- .../Collectors/ConfigurationTelemetryCollectorTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs index 884854b5f66e..5dea7e4261ae 100644 --- a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs @@ -23,6 +23,7 @@ namespace Datadog.Trace.Tests.Telemetry; [Collection(nameof(EnvironmentVariablesTestCollection))] +[EnvironmentRestorer("DD_INJECTION_ENABLED", "DD_INJECT_FORCE")] public class ConfigurationTelemetryCollectorTests { public static IEnumerable GetPropagatorConfigurations() @@ -244,7 +245,6 @@ public void ConfigurationDataShouldReportDefaultValues() } [Fact] - [EnvironmentRestorer("DD_INJECTION_ENABLED", "DD_INJECT_FORCE")] public void ConfigurationDataShouldReportSSIValues() { Environment.SetEnvironmentVariable("DD_INJECTION_ENABLED", "tracer"); From ad90746e9d96a91966deb6c21f747a2e075c1119 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Thu, 5 Jun 2025 16:30:18 -0400 Subject: [PATCH 16/16] not default but calculated --- .../Collectors/ConfigurationTelemetryCollectorTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs index 5dea7e4261ae..738e63e97904 100644 --- a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs @@ -241,7 +241,7 @@ public void ConfigurationDataShouldReportDefaultValues() GetLatestValueFromConfig(data, "DD_TRACE_HEADER_TAGS", ConfigurationOrigins.Default).Should().Be(string.Empty); GetLatestValueFromConfig(data, "DD_LOGS_INJECTION", ConfigurationOrigins.Default).Should().Be(false); GetLatestValueFromConfig(data, "DD_TRACE_SAMPLE_RATE", ConfigurationOrigins.Default).Should().Be(1.0); - GetLatestValueFromConfig(data, "instrumentation_source", ConfigurationOrigins.Default).Should().Be("unknown"); + GetLatestValueFromConfig(data, "instrumentation_source").Should().Be("unknown"); } [Fact]