diff --git a/tracer/missing-nullability-files.csv b/tracer/missing-nullability-files.csv index 5aa540291a4f..0e16a61fbc1e 100644 --- a/tracer/missing-nullability-files.csv +++ b/tracer/missing-nullability-files.csv @@ -84,7 +84,6 @@ src/Datadog.Trace/Configuration/ConfigurationKeys.AzureAppService.cs src/Datadog.Trace/Configuration/ConfigurationKeys.Debugger.cs src/Datadog.Trace/Configuration/ConfigurationKeys.DirectLogSubmission.cs src/Datadog.Trace/Configuration/ConfigurationKeys.Exporter.cs -src/Datadog.Trace/Configuration/ConfigurationKeys.GCPFunction.cs src/Datadog.Trace/Configuration/ConfigurationKeys.Iast.cs src/Datadog.Trace/Configuration/ConfigurationKeys.Logging.cs src/Datadog.Trace/Configuration/ConfigurationKeys.Rcm.cs @@ -93,7 +92,6 @@ src/Datadog.Trace/Configuration/DeprecationMessages.cs src/Datadog.Trace/Configuration/IDynamicConfigurationManager.cs src/Datadog.Trace/Configuration/IntegrationRegistry.cs src/Datadog.Trace/Configuration/TracerSettingsConstants.cs -src/Datadog.Trace/ContinuousProfiler/ConfigurationKeys.cs src/Datadog.Trace/ContinuousProfiler/ContextTracker.cs src/Datadog.Trace/ContinuousProfiler/IContextTracker.cs src/Datadog.Trace/ContinuousProfiler/IProfilerStatus.cs diff --git a/tracer/src/Datadog.Trace.BenchmarkDotNet/DatadogExtensions.cs b/tracer/src/Datadog.Trace.BenchmarkDotNet/DatadogExtensions.cs index 0cba9b68d9d1..9aba34f7fb69 100644 --- a/tracer/src/Datadog.Trace.BenchmarkDotNet/DatadogExtensions.cs +++ b/tracer/src/Datadog.Trace.BenchmarkDotNet/DatadogExtensions.cs @@ -4,6 +4,7 @@ // using BenchmarkDotNet.Configs; +using Datadog.Trace.Configuration; using Datadog.Trace.ContinuousProfiler; using Datadog.Trace.ExtensionMethods; using Datadog.Trace.Util; @@ -33,14 +34,14 @@ internal static IConfig WithDatadog(this IConfig config, bool? enableProfiler) { var cfg = config.AddLogger(DatadogSessionLogger.Default); - enableProfiler ??= (EnvironmentHelpers.GetEnvironmentVariable(ConfigurationKeys.ProfilingEnabled) ?? string.Empty).ToBoolean() ?? false; + enableProfiler ??= (EnvironmentHelpers.GetEnvironmentVariable(ConfigurationKeys.Profiler.ProfilingEnabled) ?? string.Empty).ToBoolean() ?? false; switch (enableProfiler) { case true: cfg = cfg.WithOption(ConfigOptions.KeepBenchmarkFiles, true); break; case false: - EnvironmentHelpers.SetEnvironmentVariable(ConfigurationKeys.ProfilingEnabled, null); + EnvironmentHelpers.SetEnvironmentVariable(ConfigurationKeys.Profiler.ProfilingEnabled, null); break; } diff --git a/tracer/src/Datadog.Trace/ClrProfiler/Instrumentation.cs b/tracer/src/Datadog.Trace/ClrProfiler/Instrumentation.cs index 5ee691d1a0a3..a46ddcb7f4e4 100644 --- a/tracer/src/Datadog.Trace/ClrProfiler/Instrumentation.cs +++ b/tracer/src/Datadog.Trace/ClrProfiler/Instrumentation.cs @@ -471,8 +471,8 @@ private static void StartDiagnosticManager() var observers = new List(); // get environment variables directly so we don't access Trace.Instance yet - var functionsExtensionVersion = EnvironmentHelpers.GetEnvironmentVariable(Datadog.Trace.Configuration.ConfigurationKeys.AzureFunctions.FunctionsExtensionVersion); - var functionsWorkerRuntime = EnvironmentHelpers.GetEnvironmentVariable(Datadog.Trace.Configuration.ConfigurationKeys.AzureFunctions.FunctionsWorkerRuntime); + var functionsExtensionVersion = EnvironmentHelpers.GetEnvironmentVariable(PlatformKeys.AzureFunctions.FunctionsExtensionVersion); + var functionsWorkerRuntime = EnvironmentHelpers.GetEnvironmentVariable(PlatformKeys.AzureFunctions.FunctionsWorkerRuntime); if (!string.IsNullOrEmpty(functionsExtensionVersion) && !string.IsNullOrEmpty(functionsWorkerRuntime)) { diff --git a/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.AzureAppService.cs b/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.AzureAppService.cs index 8979539abd0f..b973d1b93974 100644 --- a/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.AzureAppService.cs +++ b/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.AzureAppService.cs @@ -21,38 +21,6 @@ internal class AzureAppService /// internal const string SiteExtensionVersionKey = "DD_AAS_DOTNET_EXTENSION_VERSION"; - /// - /// Example: 8c500027-5f00-400e-8f00-60000000000f+apm-dotnet-EastUSwebspace - /// Format: {subscriptionId}+{planResourceGroup}-{hostedInRegion} - /// - internal const string WebsiteOwnerNameKey = "WEBSITE_OWNER_NAME"; - - /// - /// This is the name of the resource group the site instance is assigned to. - /// - internal const string ResourceGroupKey = "WEBSITE_RESOURCE_GROUP"; - - /// - /// This is the unique name of the website instance within Azure App Services. - /// Its presence is used to determine if we are running in Azure App Services. - /// - internal const string SiteNameKey = "WEBSITE_SITE_NAME"; - - /// - /// The instance name in Azure where the traced application is running. - /// - internal const string InstanceNameKey = "COMPUTERNAME"; - - /// - /// The instance ID in Azure where the traced application is running. - /// - internal const string InstanceIdKey = "WEBSITE_INSTANCE_ID"; - - /// - /// The operating system in Azure where the traced application is running. - /// - internal const string OperatingSystemKey = "WEBSITE_OS"; - /// /// Used to force the loader to start the trace agent (in case automatic instrumentation is disabled) /// @@ -62,12 +30,6 @@ internal class AzureAppService /// Used to force the loader to start dogstatsd (in case automatic instrumentation is disabled) /// public const string AasEnableCustomMetrics = "DD_AAS_ENABLE_CUSTOM_METRICS"; - - /// - /// Used to identify consumption plan functions. Consumption plans will either not have this variable, - /// or will have a value of "dynamic". - /// - public const string WebsiteSKU = "WEBSITE_SKU"; } } } diff --git a/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.GCPFunction.cs b/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.GCPFunction.cs deleted file mode 100644 index 14ad15878f7a..000000000000 --- a/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.GCPFunction.cs +++ /dev/null @@ -1,36 +0,0 @@ -// -// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. -// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. -// - -namespace Datadog.Trace.Configuration -{ - internal partial class ConfigurationKeys - { - // GCP Function auto-set env var reference: https://cloud.google.com/functions/docs/configuring/env-var#runtime_environment_variables_set_automatically - internal class GCPFunction - { - /// - /// The name of functions running deprecated runtimes. - /// - internal const string DeprecatedFunctionNameKey = "FUNCTION_NAME"; - - /// - /// The name of the gcp project a deprecated function belongs to. Only set in functions running deprecated runtimes. - /// Used to tell whether or not we are in a deprecated function environment. - /// - internal const string DeprecatedProjectKey = "GCP_PROJECT"; - - /// - /// The name of functions running non-deprecated runtimes. - /// - internal const string FunctionNameKey = "K_SERVICE"; - - /// - /// The name of the function handler to be executed when the function is invoked. Only set in functions running non-deprecated runtimes. - /// Used to tell whether or not we are in a non-deprecated function environment. - /// - internal const string FunctionTargetKey = "FUNCTION_TARGET"; - } - } -} diff --git a/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.Profiler.cs b/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.Profiler.cs new file mode 100644 index 000000000000..68e9d0739f9b --- /dev/null +++ b/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.Profiler.cs @@ -0,0 +1,21 @@ +// +// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. +// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. +// + +#nullable enable + +namespace Datadog.Trace.Configuration +{ + internal static partial class ConfigurationKeys + { + internal static class Profiler + { + public const string ProfilingEnabled = "DD_PROFILING_ENABLED"; + public const string CodeHotspotsEnabled = "DD_PROFILING_CODEHOTSPOTS_ENABLED"; + public const string EndpointProfilingEnabled = "DD_PROFILING_ENDPOINT_COLLECTION_ENABLED"; + public const string SsiDeployed = "DD_INJECTION_ENABLED"; + public const string ProfilerManagedActivationEnabled = "DD_PROFILING_MANAGED_ACTIVATION_ENABLED"; + } + } +} diff --git a/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.cs b/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.cs index 647f4537c6cf..2a818ca9e111 100644 --- a/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.cs +++ b/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.cs @@ -762,29 +762,6 @@ public static class Proxy public const string ProxyNoProxy = "DD_PROXY_NO_PROXY"; } - /// - /// String format patterns used to match integration-specific configuration keys. - /// - public static class Integrations - { - /// - /// Configuration key pattern for enabling or disabling an integration. - /// - public const string Enabled = "DD_TRACE_{0}_ENABLED"; - - /// - /// Configuration key pattern for enabling or disabling Analytics in an integration. - /// - [Obsolete(DeprecationMessages.AppAnalytics)] - public const string AnalyticsEnabled = "DD_TRACE_{0}_ANALYTICS_ENABLED"; - - /// - /// Configuration key pattern for setting Analytics sampling rate in an integration. - /// - [Obsolete(DeprecationMessages.AppAnalytics)] - public const string AnalyticsSampleRate = "DD_TRACE_{0}_ANALYTICS_SAMPLE_RATE"; - } - /// /// String constants for debug configuration keys. /// diff --git a/tracer/src/Datadog.Trace/Configuration/ImmutableAzureAppServiceSettings.cs b/tracer/src/Datadog.Trace/Configuration/ImmutableAzureAppServiceSettings.cs index b736040c0b8e..053c71cd1c85 100644 --- a/tracer/src/Datadog.Trace/Configuration/ImmutableAzureAppServiceSettings.cs +++ b/tracer/src/Datadog.Trace/Configuration/ImmutableAzureAppServiceSettings.cs @@ -61,17 +61,17 @@ public ImmutableAzureAppServiceSettings(IConfigurationSource? source, IConfigura } SubscriptionId = GetSubscriptionId(source, telemetry); - ResourceGroup = config.WithKeys(ConfigurationKeys.AzureAppService.ResourceGroupKey).AsString(); - SiteName = config.WithKeys(ConfigurationKeys.AzureAppService.SiteNameKey).AsString(); + ResourceGroup = config.WithKeys(PlatformKeys.AzureAppService.ResourceGroupKey).AsString(); + SiteName = config.WithKeys(PlatformKeys.AzureAppService.SiteNameKey).AsString(); ResourceId = CompileResourceId(subscriptionId: SubscriptionId, siteName: SiteName, resourceGroup: ResourceGroup); - InstanceId = config.WithKeys(ConfigurationKeys.AzureAppService.InstanceIdKey).AsString("unknown"); - InstanceName = config.WithKeys(ConfigurationKeys.AzureAppService.InstanceNameKey).AsString("unknown"); - OperatingSystem = config.WithKeys(ConfigurationKeys.AzureAppService.OperatingSystemKey).AsString("unknown"); + InstanceId = config.WithKeys(PlatformKeys.AzureAppService.InstanceIdKey).AsString("unknown"); + InstanceName = config.WithKeys(PlatformKeys.AzureAppService.InstanceNameKey).AsString("unknown"); + OperatingSystem = config.WithKeys(PlatformKeys.AzureAppService.OperatingSystemKey).AsString("unknown"); SiteExtensionVersion = config.WithKeys(ConfigurationKeys.AzureAppService.SiteExtensionVersionKey).AsString("unknown"); - WebsiteSKU = config.WithKeys(ConfigurationKeys.AzureAppService.WebsiteSKU).AsString(); + WebsiteSku = config.WithKeys(PlatformKeys.AzureAppService.WebsiteSku).AsString(); - FunctionsWorkerRuntime = config.WithKeys(ConfigurationKeys.AzureFunctions.FunctionsWorkerRuntime).AsString(); - FunctionsExtensionVersion = config.WithKeys(ConfigurationKeys.AzureFunctions.FunctionsExtensionVersion).AsString(); + FunctionsWorkerRuntime = config.WithKeys(PlatformKeys.AzureFunctions.FunctionsWorkerRuntime).AsString(); + FunctionsExtensionVersion = config.WithKeys(PlatformKeys.AzureFunctions.FunctionsExtensionVersion).AsString(); if (FunctionsWorkerRuntime is not null && FunctionsExtensionVersion is not null) { @@ -118,7 +118,7 @@ public ImmutableAzureAppServiceSettings(IConfigurationSource? source, IConfigura public bool IsFunctionsApp { get; } - public string? WebsiteSKU { get; } + public string? WebsiteSku { get; } public string? FunctionsExtensionVersion { get; } @@ -142,19 +142,19 @@ private static bool ShouldSkipClientSpanWithinFunctions(Scope? scope) { if (subscriptionId == null) { - Log.Warning("Could not successfully retrieve the subscription ID from variable: {Variable}", ConfigurationKeys.AzureAppService.WebsiteOwnerNameKey); + Log.Warning("Could not successfully retrieve the subscription ID from variable: {Variable}", PlatformKeys.AzureAppService.WebsiteOwnerNameKey); return null; } if (siteName == null) { - Log.Warning("Could not successfully retrieve the deployment ID from variable: {Variable}", ConfigurationKeys.AzureAppService.SiteNameKey); + Log.Warning("Could not successfully retrieve the deployment ID from variable: {Variable}", PlatformKeys.AzureAppService.SiteNameKey); return null; } if (resourceGroup == null) { - Log.Warning("Could not successfully retrieve the resource group name from variable: {Variable}", ConfigurationKeys.AzureAppService.ResourceGroupKey); + Log.Warning("Could not successfully retrieve the resource group name from variable: {Variable}", PlatformKeys.AzureAppService.ResourceGroupKey); return null; } @@ -164,7 +164,7 @@ private static bool ShouldSkipClientSpanWithinFunctions(Scope? scope) private static string? GetSubscriptionId(IConfigurationSource source, IConfigurationTelemetry telemetry) { var websiteOwner = new ConfigurationBuilder(source, telemetry) - .WithKeys(ConfigurationKeys.AzureAppService.WebsiteOwnerNameKey) + .WithKeys(PlatformKeys.AzureAppService.WebsiteOwnerNameKey) .AsString(websiteOwner => !string.IsNullOrWhiteSpace(websiteOwner)); if (!string.IsNullOrWhiteSpace(websiteOwner)) @@ -186,7 +186,7 @@ private static bool ShouldSkipClientSpanWithinFunctions(Scope? scope) public static bool IsRunningInAzureAppServices(IConfigurationSource source, IConfigurationTelemetry telemetry) { var siteName = new ConfigurationBuilder(source, telemetry) - .WithKeys(ConfigurationKeys.AzureAppService.SiteNameKey) + .WithKeys(PlatformKeys.AzureAppService.SiteNameKey) .AsString(); return !string.IsNullOrEmpty(siteName); @@ -200,17 +200,17 @@ public static bool IsRunningInAzureAppServices(IConfigurationSource source, ICon public static bool IsRunningInAzureFunctions(IConfigurationSource source, IConfigurationTelemetry telemetry) { var siteName = new ConfigurationBuilder(source, telemetry) - .WithKeys(ConfigurationKeys.AzureAppService.SiteNameKey) + .WithKeys(PlatformKeys.AzureAppService.SiteNameKey) .AsString(); // "dotnet", "dotnet-isolated" var workerRuntime = new ConfigurationBuilder(source, telemetry) - .WithKeys(ConfigurationKeys.AzureFunctions.FunctionsWorkerRuntime) + .WithKeys(PlatformKeys.AzureFunctions.FunctionsWorkerRuntime) .AsString(); // "~4", "~1" var extensionVersion = new ConfigurationBuilder(source, telemetry) - .WithKeys(ConfigurationKeys.AzureFunctions.FunctionsExtensionVersion) + .WithKeys(PlatformKeys.AzureFunctions.FunctionsExtensionVersion) .AsString(); return !string.IsNullOrEmpty(siteName) && diff --git a/tracer/src/Datadog.Trace/Configuration/ImmutableGCPFunctionSettings.cs b/tracer/src/Datadog.Trace/Configuration/ImmutableGCPFunctionSettings.cs index 8c6ac3323a07..3c45b998d6b4 100644 --- a/tracer/src/Datadog.Trace/Configuration/ImmutableGCPFunctionSettings.cs +++ b/tracer/src/Datadog.Trace/Configuration/ImmutableGCPFunctionSettings.cs @@ -22,12 +22,12 @@ public ImmutableGCPFunctionSettings(IConfigurationSource? source, IConfiguration source ??= NullConfigurationSource.Instance; var config = new ConfigurationBuilder(source, telemetry); - var deprecatedFunctionKey = config.WithKeys(ConfigurationKeys.GCPFunction.DeprecatedFunctionNameKey).AsString(); - var deprecatedProjectKey = config.WithKeys(ConfigurationKeys.GCPFunction.DeprecatedProjectKey).AsString(); + var deprecatedFunctionKey = config.WithKeys(PlatformKeys.GcpFunction.DeprecatedFunctionNameKey).AsString(); + var deprecatedProjectKey = config.WithKeys(PlatformKeys.GcpFunction.DeprecatedProjectKey).AsString(); IsDeprecatedFunction = deprecatedFunctionKey != null && deprecatedProjectKey != null; - var functionNameKey = config.WithKeys(ConfigurationKeys.GCPFunction.FunctionNameKey).AsString(); - var functionTargetKey = config.WithKeys(ConfigurationKeys.GCPFunction.FunctionTargetKey).AsString(); + var functionNameKey = config.WithKeys(PlatformKeys.GcpFunction.FunctionNameKey).AsString(); + var functionTargetKey = config.WithKeys(PlatformKeys.GcpFunction.FunctionTargetKey).AsString(); IsNewerFunction = functionNameKey != null && functionTargetKey != null; IsGCPFunction = IsDeprecatedFunction || IsNewerFunction; diff --git a/tracer/src/Datadog.Trace/Configuration/IntegrationSettings.cs b/tracer/src/Datadog.Trace/Configuration/IntegrationSettings.cs index 31f18919ab40..5a7c3dfc17e1 100644 --- a/tracer/src/Datadog.Trace/Configuration/IntegrationSettings.cs +++ b/tracer/src/Datadog.Trace/Configuration/IntegrationSettings.cs @@ -6,7 +6,6 @@ #nullable enable using System; -using System.Collections.Generic; using Datadog.Trace.Configuration.Telemetry; namespace Datadog.Trace.Configuration @@ -16,10 +15,27 @@ namespace Datadog.Trace.Configuration /// public class IntegrationSettings : IEquatable { + /// + /// Configuration key pattern for enabling or disabling an integration. + /// + public const string IntegrationEnabled = "DD_TRACE_{0}_ENABLED"; + + /// + /// Configuration key pattern for enabling or disabling Analytics in an integration. + /// + [Obsolete(DeprecationMessages.AppAnalytics)] + public const string AnalyticsEnabledKey = "DD_TRACE_{0}_ANALYTICS_ENABLED"; + + /// + /// Configuration key pattern for setting Analytics sampling rate in an integration. + /// + [Obsolete(DeprecationMessages.AppAnalytics)] + public const string AnalyticsSampleRateKey = "DD_TRACE_{0}_ANALYTICS_SAMPLE_RATE"; + /// /// Initializes a new instance of the class. /// - /// The integration name. + /// The integration name. Callers shouldn't pass a null value, but as it's available in Datadog.Trace.Manual, we still need to check /// The to use when retrieving configuration values. /// Has the integration been explicitly disabled /// The fallback values to use. Only used in manual instrumentation scenarios @@ -35,27 +51,29 @@ internal IntegrationSettings(string integrationName, IConfigurationSource? sourc // We don't record these in telemetry, because they're blocked anyway var config = new ConfigurationBuilder(source ?? NullConfigurationSource.Instance, NullConfigurationTelemetry.Instance); var upperName = integrationName.ToUpperInvariant(); - Enabled = isExplicitlyDisabled ? false : (config - .WithKeys( - string.Format(ConfigurationKeys.Integrations.Enabled, upperName), - string.Format(ConfigurationKeys.Integrations.Enabled, integrationName), - $"DD_{integrationName}_ENABLED") - .AsBool() - ?? fallback?.Enabled); + Enabled = isExplicitlyDisabled + ? false + : config + .WithKeys( + string.Format(IntegrationEnabled, upperName), + string.Format(IntegrationEnabled, integrationName), + $"DD_{integrationName}_ENABLED") + .AsBool() + ?? fallback?.Enabled; #pragma warning disable 618 // App analytics is deprecated, but still used AnalyticsEnabled = config .WithKeys( - string.Format(ConfigurationKeys.Integrations.AnalyticsEnabled, upperName), - string.Format(ConfigurationKeys.Integrations.AnalyticsEnabled, integrationName), + string.Format(AnalyticsEnabledKey, upperName), + string.Format(AnalyticsEnabledKey, integrationName), $"DD_{integrationName}_ANALYTICS_ENABLED") .AsBool() ?? fallback?.AnalyticsEnabled; AnalyticsSampleRate = config .WithKeys( - string.Format(ConfigurationKeys.Integrations.AnalyticsSampleRate, upperName), - string.Format(ConfigurationKeys.Integrations.AnalyticsSampleRate, integrationName), + string.Format(AnalyticsSampleRateKey, upperName), + string.Format(AnalyticsSampleRateKey, integrationName), $"DD_{integrationName}_ANALYTICS_SAMPLE_RATE") .AsDouble(fallback?.AnalyticsSampleRate ?? 1.0); #pragma warning restore 618 diff --git a/tracer/src/Datadog.Trace/Configuration/PlatformKeys.Aws.cs b/tracer/src/Datadog.Trace/Configuration/PlatformKeys.Aws.cs new file mode 100644 index 000000000000..7358b0153b06 --- /dev/null +++ b/tracer/src/Datadog.Trace/Configuration/PlatformKeys.Aws.cs @@ -0,0 +1,14 @@ +// +// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. +// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. +// +#nullable enable +namespace Datadog.Trace.Configuration; + +internal static partial class PlatformKeys +{ + internal static class Aws + { + public const string FunctionName = "AWS_LAMBDA_FUNCTION_NAME"; + } +} diff --git a/tracer/src/Datadog.Trace/Configuration/PlatformKeys.AzureAppService.cs b/tracer/src/Datadog.Trace/Configuration/PlatformKeys.AzureAppService.cs new file mode 100644 index 000000000000..02f3bdf1ba44 --- /dev/null +++ b/tracer/src/Datadog.Trace/Configuration/PlatformKeys.AzureAppService.cs @@ -0,0 +1,55 @@ +// +// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. +// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. +// +#nullable enable +namespace Datadog.Trace.Configuration; + +internal static partial class PlatformKeys +{ + internal static class AzureAppService + { + /// + /// Example: 8c500027-5f00-400e-8f00-60000000000f+apm-dotnet-EastUSwebspace + /// Format: {subscriptionId}+{planResourceGroup}-{hostedInRegion} + /// + internal const string WebsiteOwnerNameKey = "WEBSITE_OWNER_NAME"; + + /// + /// This is the name of the resource group the site instance is assigned to. + /// + internal const string ResourceGroupKey = "WEBSITE_RESOURCE_GROUP"; + + /// + /// This is the unique name of the website instance within Azure App Services. + /// Its presence is used to determine if we are running in Azure App Services. + /// + internal const string SiteNameKey = "WEBSITE_SITE_NAME"; + + /// + /// This is the key for AzureAppServicePerformanceCounters + /// + internal const string CountersKey = "WEBSITE_COUNTERS_CLR"; + + /// + /// The instance name in Azure where the traced application is running. + /// + internal const string InstanceNameKey = "COMPUTERNAME"; + + /// + /// The instance ID in Azure where the traced application is running. + /// + internal const string InstanceIdKey = "WEBSITE_INSTANCE_ID"; + + /// + /// The operating system in Azure where the traced application is running. + /// + internal const string OperatingSystemKey = "WEBSITE_OS"; + + /// + /// Used to identify consumption plan functions. Consumption plans will either not have this variable, + /// or will have a value of "dynamic". + /// + public const string WebsiteSku = "WEBSITE_SKU"; + } +} diff --git a/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.AzureFunctions.cs b/tracer/src/Datadog.Trace/Configuration/PlatformKeys.AzureFunctions.cs similarity index 92% rename from tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.AzureFunctions.cs rename to tracer/src/Datadog.Trace/Configuration/PlatformKeys.AzureFunctions.cs index 4b5144cadedd..94c39883e405 100644 --- a/tracer/src/Datadog.Trace/Configuration/ConfigurationKeys.AzureFunctions.cs +++ b/tracer/src/Datadog.Trace/Configuration/PlatformKeys.AzureFunctions.cs @@ -1,4 +1,4 @@ -// +// // Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. // This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. // @@ -7,12 +7,12 @@ namespace Datadog.Trace.Configuration; -internal partial class ConfigurationKeys +internal static partial class PlatformKeys { /// /// Reference: https://learn.microsoft.com/en-us/azure/azure-functions/functions-app-settings /// - internal class AzureFunctions + internal static class AzureFunctions { /// /// The version of the Azure Functions runtime, e.g. "~1" or "~4". diff --git a/tracer/src/Datadog.Trace/Configuration/PlatformKeys.DotNet.cs b/tracer/src/Datadog.Trace/Configuration/PlatformKeys.DotNet.cs new file mode 100644 index 000000000000..f61f9ec546b1 --- /dev/null +++ b/tracer/src/Datadog.Trace/Configuration/PlatformKeys.DotNet.cs @@ -0,0 +1,21 @@ +// +// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. +// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. +// + +#nullable enable + +namespace Datadog.Trace.Configuration; + +internal static partial class PlatformKeys +{ + /// + /// Platform key indicating the path to the .NET Core CLR profiler path + /// + public const string DotNetCoreClrProfiler = "CORECLR_PROFILER_PATH"; + + /// + /// Platform key indicating the path to the .NET Framework CLR profiler path + /// + public const string DotNetClrProfiler = "COR_PROFILER_PATH"; +} diff --git a/tracer/src/Datadog.Trace/Configuration/PlatformKeys.GcpFunction.cs b/tracer/src/Datadog.Trace/Configuration/PlatformKeys.GcpFunction.cs new file mode 100644 index 000000000000..5870e1d23a29 --- /dev/null +++ b/tracer/src/Datadog.Trace/Configuration/PlatformKeys.GcpFunction.cs @@ -0,0 +1,34 @@ +// +// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. +// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. +// +#nullable enable +namespace Datadog.Trace.Configuration; + +internal static partial class PlatformKeys +{ + internal static class GcpFunction + { + /// + /// The name of functions running deprecated runtimes. + /// + internal const string DeprecatedFunctionNameKey = "FUNCTION_NAME"; + + /// + /// The name of the gcp project a deprecated function belongs to. Only set in functions running deprecated runtimes. + /// Used to tell whether or not we are in a deprecated function environment. + /// + internal const string DeprecatedProjectKey = "GCP_PROJECT"; + + /// + /// The name of functions running non-deprecated runtimes. + /// + internal const string FunctionNameKey = "K_SERVICE"; + + /// + /// The name of the function handler to be executed when the function is invoked. Only set in functions running non-deprecated runtimes. + /// Used to tell whether or not we are in a non-deprecated function environment. + /// + internal const string FunctionTargetKey = "FUNCTION_TARGET"; + } +} diff --git a/tracer/src/Datadog.Trace/ContinuousProfiler/ConfigurationKeys.cs b/tracer/src/Datadog.Trace/ContinuousProfiler/ConfigurationKeys.cs deleted file mode 100644 index 959e833487c6..000000000000 --- a/tracer/src/Datadog.Trace/ContinuousProfiler/ConfigurationKeys.cs +++ /dev/null @@ -1,16 +0,0 @@ -// -// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. -// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. -// - -namespace Datadog.Trace.ContinuousProfiler -{ - internal static class ConfigurationKeys - { - public const string ProfilingEnabled = "DD_PROFILING_ENABLED"; - public const string CodeHotspotsEnabled = "DD_PROFILING_CODEHOTSPOTS_ENABLED"; - public const string EndpointProfilingEnabled = "DD_PROFILING_ENDPOINT_COLLECTION_ENABLED"; - public const string SsiDeployed = "DD_INJECTION_ENABLED"; - public const string ProfilerManagedActivationEnabled = "DD_PROFILING_MANAGED_ACTIVATION_ENABLED"; - } -} diff --git a/tracer/src/Datadog.Trace/ContinuousProfiler/ContextTracker.cs b/tracer/src/Datadog.Trace/ContinuousProfiler/ContextTracker.cs index a5c1f33b9f77..9ec5afe2fc7b 100644 --- a/tracer/src/Datadog.Trace/ContinuousProfiler/ContextTracker.cs +++ b/tracer/src/Datadog.Trace/ContinuousProfiler/ContextTracker.cs @@ -7,6 +7,7 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Threading; +using Datadog.Trace.Configuration; using Datadog.Trace.ExtensionMethods; using Datadog.Trace.Logging; using Datadog.Trace.Util; @@ -43,8 +44,8 @@ internal class ContextTracker : IContextTracker public ContextTracker(IProfilerStatus status) { _status = status; - _isCodeHotspotsEnabled = EnvironmentHelpers.GetEnvironmentVariable(ConfigurationKeys.CodeHotspotsEnabled)?.ToBoolean() ?? true; - _isEndpointProfilingEnabled = EnvironmentHelpers.GetEnvironmentVariable(ConfigurationKeys.EndpointProfilingEnabled)?.ToBoolean() ?? true; + _isCodeHotspotsEnabled = EnvironmentHelpers.GetEnvironmentVariable(ConfigurationKeys.Profiler.CodeHotspotsEnabled)?.ToBoolean() ?? true; + _isEndpointProfilingEnabled = EnvironmentHelpers.GetEnvironmentVariable(ConfigurationKeys.Profiler.EndpointProfilingEnabled)?.ToBoolean() ?? true; _traceContextPtr = new ThreadLocal(); } diff --git a/tracer/src/Datadog.Trace/ContinuousProfiler/ProfilerSettings.cs b/tracer/src/Datadog.Trace/ContinuousProfiler/ProfilerSettings.cs index 1163eefb1cde..f421cb04ad22 100644 --- a/tracer/src/Datadog.Trace/ContinuousProfiler/ProfilerSettings.cs +++ b/tracer/src/Datadog.Trace/ContinuousProfiler/ProfilerSettings.cs @@ -26,7 +26,7 @@ internal ProfilerSettings(IConfigurationSource config, IConfigurationSource envC if (!IsProfilingSupported) { ProfilerState = ProfilerState.Disabled; - telemetry.Record(ConfigurationKeys.ProfilingEnabled, false, ConfigurationOrigins.Calculated); + telemetry.Record(ConfigurationKeys.Profiler.ProfilingEnabled, false, ConfigurationOrigins.Calculated); return; } @@ -34,7 +34,7 @@ internal ProfilerSettings(IConfigurationSource config, IConfigurationSource envC // as that's all that applies var envConfigBuilder = new ConfigurationBuilder(envConfig, telemetry); _isManagedActivationEnabled = envConfigBuilder - .WithKeys(ConfigurationKeys.ProfilerManagedActivationEnabled) + .WithKeys(ConfigurationKeys.Profiler.ProfilerManagedActivationEnabled) .AsBool(true); // If we're using managed activation, we use the "full" config source set. @@ -47,7 +47,7 @@ internal ProfilerSettings(IConfigurationSource config, IConfigurationSource envC // the profiler could be enabled via ContinuousProfiler.ConfigurationKeys.SsiDeployed. If it is non-empty, then the // profiler is "active", though won't begin profiling until 30 seconds have passed + at least 1 span has been generated. var profilingEnabled = profilingConfig - .WithKeys(ConfigurationKeys.ProfilingEnabled) + .WithKeys(ConfigurationKeys.Profiler.ProfilingEnabled) // We stick with strings here instead of using the `GetAs` method, // so that telemetry continues to store true/false/auto, instead of the enum values. .AsString( diff --git a/tracer/src/Datadog.Trace/Util/EnvironmentHelpers.cs b/tracer/src/Datadog.Trace/Util/EnvironmentHelpers.cs index ab48143ce2cf..f65f7400f435 100644 --- a/tracer/src/Datadog.Trace/Util/EnvironmentHelpers.cs +++ b/tracer/src/Datadog.Trace/Util/EnvironmentHelpers.cs @@ -104,7 +104,7 @@ public static IDictionary GetEnvironmentVariables() /// public static bool IsAzureAppServices() { - return EnvironmentVariableExists(ConfigurationKeys.AzureAppService.SiteNameKey); + return EnvironmentVariableExists(PlatformKeys.AzureAppService.SiteNameKey); } /// @@ -116,8 +116,8 @@ public static bool IsAzureAppServices() public static bool IsAzureFunctions() { return IsAzureAppServices() && - EnvironmentVariableExists(ConfigurationKeys.AzureFunctions.FunctionsWorkerRuntime) && - EnvironmentVariableExists(ConfigurationKeys.AzureFunctions.FunctionsExtensionVersion); + EnvironmentVariableExists(PlatformKeys.AzureFunctions.FunctionsWorkerRuntime) && + EnvironmentVariableExists(PlatformKeys.AzureFunctions.FunctionsExtensionVersion); } /// @@ -152,7 +152,7 @@ public static bool IsRunningInAzureFunctionsHost() cmd.IndexOf("--workerId", StringComparison.OrdinalIgnoreCase) >= 0; return IsAzureFunctions() - && string.Equals(GetEnvironmentVariable(ConfigurationKeys.AzureFunctions.FunctionsWorkerRuntime, defaultValue: string.Empty), "dotnet-isolated", StringComparison.Ordinal) + && string.Equals(GetEnvironmentVariable(PlatformKeys.AzureFunctions.FunctionsWorkerRuntime, defaultValue: string.Empty), "dotnet-isolated", StringComparison.Ordinal) && !hasWorkerId; } @@ -174,10 +174,10 @@ public static bool IsAwsLambda() /// public static bool IsGoogleCloudFunctions() { - return (EnvironmentVariableExists(ConfigurationKeys.GCPFunction.FunctionNameKey) && - EnvironmentVariableExists(ConfigurationKeys.GCPFunction.FunctionTargetKey)) || - (EnvironmentVariableExists(ConfigurationKeys.GCPFunction.DeprecatedFunctionNameKey) && - EnvironmentVariableExists(ConfigurationKeys.GCPFunction.DeprecatedProjectKey)); + return (EnvironmentVariableExists(PlatformKeys.GcpFunction.FunctionNameKey) && + EnvironmentVariableExists(PlatformKeys.GcpFunction.FunctionTargetKey)) || + (EnvironmentVariableExists(PlatformKeys.GcpFunction.DeprecatedFunctionNameKey) && + EnvironmentVariableExists(PlatformKeys.GcpFunction.DeprecatedProjectKey)); } /// diff --git a/tracer/src/Datadog.Trace/Util/EnvironmentHelpersNoLogging.cs b/tracer/src/Datadog.Trace/Util/EnvironmentHelpersNoLogging.cs index 9d43a55df961..310bc1d2ba5e 100644 --- a/tracer/src/Datadog.Trace/Util/EnvironmentHelpersNoLogging.cs +++ b/tracer/src/Datadog.Trace/Util/EnvironmentHelpersNoLogging.cs @@ -24,12 +24,12 @@ internal static bool IsServerlessEnvironment(out Exception? exceptionInReading) Exception? firstException = null; var isServerless = CheckEnvVar(LambdaMetadata.FunctionNameEnvVar, ref firstException) - || (CheckEnvVar(ConfigurationKeys.AzureAppService.SiteNameKey, ref firstException) + || (CheckEnvVar(PlatformKeys.AzureAppService.SiteNameKey, ref firstException) && !CheckEnvVar(ConfigurationKeys.AzureAppService.AzureAppServicesContextKey, ref firstException)) - || (CheckEnvVar(ConfigurationKeys.GCPFunction.FunctionNameKey, ref firstException) - && CheckEnvVar(ConfigurationKeys.GCPFunction.FunctionTargetKey, ref firstException)) - || (CheckEnvVar(ConfigurationKeys.GCPFunction.DeprecatedFunctionNameKey, ref firstException) - && CheckEnvVar(ConfigurationKeys.GCPFunction.DeprecatedProjectKey, ref firstException)); + || (CheckEnvVar(PlatformKeys.GcpFunction.FunctionNameKey, ref firstException) + && CheckEnvVar(PlatformKeys.GcpFunction.FunctionTargetKey, ref firstException)) + || (CheckEnvVar(PlatformKeys.GcpFunction.DeprecatedFunctionNameKey, ref firstException) + && CheckEnvVar(PlatformKeys.GcpFunction.DeprecatedProjectKey, ref firstException)); exceptionInReading = firstException; return isServerless; diff --git a/tracer/test/Datadog.Trace.ClrProfiler.Managed.Tests/DbScopeFactoryTests.cs b/tracer/test/Datadog.Trace.ClrProfiler.Managed.Tests/DbScopeFactoryTests.cs index 224d74354fbe..a5a3666c4fa7 100644 --- a/tracer/test/Datadog.Trace.ClrProfiler.Managed.Tests/DbScopeFactoryTests.cs +++ b/tracer/test/Datadog.Trace.ClrProfiler.Managed.Tests/DbScopeFactoryTests.cs @@ -102,8 +102,8 @@ public async Task CreateDbCommandScope_ReturnNullForAdoNetDisabledIntegration(Ty var tracerSettings = TracerSettings.Create(new() { - { string.Format(ConfigurationKeys.Integrations.Enabled, integrationName), "true" }, - { string.Format(ConfigurationKeys.Integrations.Enabled, nameof(IntegrationId.AdoNet)), "false" }, + { string.Format(IntegrationSettings.IntegrationEnabled, integrationName), "true" }, + { string.Format(IntegrationSettings.IntegrationEnabled, nameof(IntegrationId.AdoNet)), "false" }, }); await using var tracer = TracerHelper.CreateWithFakeAgent(tracerSettings); @@ -750,7 +750,7 @@ private static ScopedTracer CreateTracerWithIntegrationEnabled(string integratio // Set up tracer var tracerSettings = TracerSettings.Create(new() { - { string.Format(ConfigurationKeys.Integrations.Enabled, integrationName), enabled }, + { string.Format(IntegrationSettings.IntegrationEnabled, integrationName), enabled }, }); return TracerHelper.Create(tracerSettings); } diff --git a/tracer/test/Datadog.Trace.IntegrationTests/Tagging/AASTagsTests.cs b/tracer/test/Datadog.Trace.IntegrationTests/Tagging/AASTagsTests.cs index 98fb0d91012d..6b73272acbc0 100644 --- a/tracer/test/Datadog.Trace.IntegrationTests/Tagging/AASTagsTests.cs +++ b/tracer/test/Datadog.Trace.IntegrationTests/Tagging/AASTagsTests.cs @@ -202,12 +202,12 @@ private IConfigurationSource GetMockVariables() // This is a needed configuration for the AAS extension { ConfigurationKeys.ApiKey, "1" }, { ConfigurationKeys.AzureAppService.AzureAppServicesContextKey, "1" }, - { ConfigurationKeys.AzureAppService.WebsiteOwnerNameKey, $"SubscriptionId+ResourceGroup-EastUSwebspace" }, - { ConfigurationKeys.AzureAppService.ResourceGroupKey, "SiteResourceGroup" }, - { ConfigurationKeys.AzureAppService.SiteNameKey, "SiteName" }, - { ConfigurationKeys.AzureAppService.OperatingSystemKey, "windows" }, - { ConfigurationKeys.AzureAppService.InstanceIdKey, "InstanceId" }, - { ConfigurationKeys.AzureAppService.InstanceNameKey, "InstanceName" }, + { PlatformKeys.AzureAppService.WebsiteOwnerNameKey, $"SubscriptionId+ResourceGroup-EastUSwebspace" }, + { PlatformKeys.AzureAppService.ResourceGroupKey, "SiteResourceGroup" }, + { PlatformKeys.AzureAppService.SiteNameKey, "SiteName" }, + { PlatformKeys.AzureAppService.OperatingSystemKey, "windows" }, + { PlatformKeys.AzureAppService.InstanceIdKey, "InstanceId" }, + { PlatformKeys.AzureAppService.InstanceNameKey, "InstanceName" }, }; return new NameValueConfigurationSource(collection); diff --git a/tracer/test/Datadog.Trace.TestHelpers/PlatformHelpers/AzureAppServiceHelper.cs b/tracer/test/Datadog.Trace.TestHelpers/PlatformHelpers/AzureAppServiceHelper.cs index 3128d0930cf6..da2553483ac6 100644 --- a/tracer/test/Datadog.Trace.TestHelpers/PlatformHelpers/AzureAppServiceHelper.cs +++ b/tracer/test/Datadog.Trace.TestHelpers/PlatformHelpers/AzureAppServiceHelper.cs @@ -50,10 +50,10 @@ public static IConfigurationSource GetRequiredAasConfigurationValues( { var vars = Environment.GetEnvironmentVariables(); - if (vars.Contains(ConfigurationKeys.AzureAppService.InstanceNameKey)) + if (vars.Contains(PlatformKeys.AzureAppService.InstanceNameKey)) { // This is the COMPUTERNAME key which we'll remove for consistent testing - vars.Remove(ConfigurationKeys.AzureAppService.InstanceNameKey); + vars.Remove(PlatformKeys.AzureAppService.InstanceNameKey); } if (vars.Contains(ConfigurationKeys.DebugEnabled)) @@ -73,22 +73,22 @@ public static IConfigurationSource GetRequiredAasConfigurationValues( vars.Add(ConfigurationKeys.AzureAppService.SiteExtensionVersionKey, "3.0.0"); } - vars.Add(ConfigurationKeys.AzureAppService.WebsiteOwnerNameKey, $"{subscriptionId}+{planResourceGroup}-EastUSwebspace"); - vars.Add(ConfigurationKeys.AzureAppService.ResourceGroupKey, siteResourceGroup); - vars.Add(ConfigurationKeys.AzureAppService.SiteNameKey, deploymentId); - vars.Add(ConfigurationKeys.AzureAppService.OperatingSystemKey, RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "windows" : "linux"); - vars.Add(ConfigurationKeys.AzureAppService.InstanceIdKey, "instance_id"); - vars.Add(ConfigurationKeys.AzureAppService.InstanceNameKey, "instance_name"); + vars.Add(PlatformKeys.AzureAppService.WebsiteOwnerNameKey, $"{subscriptionId}+{planResourceGroup}-EastUSwebspace"); + vars.Add(PlatformKeys.AzureAppService.ResourceGroupKey, siteResourceGroup); + vars.Add(PlatformKeys.AzureAppService.SiteNameKey, deploymentId); + vars.Add(PlatformKeys.AzureAppService.OperatingSystemKey, RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "windows" : "linux"); + vars.Add(PlatformKeys.AzureAppService.InstanceIdKey, "instance_id"); + vars.Add(PlatformKeys.AzureAppService.InstanceNameKey, "instance_name"); vars.Add(ConfigurationKeys.DebugEnabled, ddTraceDebug); if (functionsVersion != null) { - vars.Add(ConfigurationKeys.AzureFunctions.FunctionsExtensionVersion, functionsVersion); + vars.Add(PlatformKeys.AzureFunctions.FunctionsExtensionVersion, functionsVersion); } if (functionsRuntime != null) { - vars.Add(ConfigurationKeys.AzureFunctions.FunctionsWorkerRuntime, functionsRuntime); + vars.Add(PlatformKeys.AzureFunctions.FunctionsWorkerRuntime, functionsRuntime); } vars.Add(ConfigurationKeys.AzureAppService.AasEnableCustomTracing, enableCustomTracing ?? "false"); diff --git a/tracer/test/Datadog.Trace.Tests/Configuration/ImmutableAzureAppServiceSettingsTests.cs b/tracer/test/Datadog.Trace.Tests/Configuration/ImmutableAzureAppServiceSettingsTests.cs index 9f8fd9d62d4d..e01bed00230e 100644 --- a/tracer/test/Datadog.Trace.Tests/Configuration/ImmutableAzureAppServiceSettingsTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Configuration/ImmutableAzureAppServiceSettingsTests.cs @@ -36,7 +36,7 @@ public void IsUnsafeToTrace(string value, bool expected) [InlineData("test1+test2", "test1")] public void SubscriptionId(string value, string expected) { - var source = CreateConfigurationSource((ConfigurationKeys.AzureAppService.WebsiteOwnerNameKey, value)); + var source = CreateConfigurationSource((PlatformKeys.AzureAppService.WebsiteOwnerNameKey, value)); var settings = new ImmutableAzureAppServiceSettings(source, NullConfigurationTelemetry.Instance); settings.SubscriptionId.Should().Be(expected); @@ -46,7 +46,7 @@ public void SubscriptionId(string value, string expected) [MemberData(nameof(StringTestCases))] public void ResourceGroup(string value, string expected) { - var source = CreateConfigurationSource((ConfigurationKeys.AzureAppService.ResourceGroupKey, value)); + var source = CreateConfigurationSource((PlatformKeys.AzureAppService.ResourceGroupKey, value)); var settings = new ImmutableAzureAppServiceSettings(source, NullConfigurationTelemetry.Instance); settings.ResourceGroup.Should().Be(expected); @@ -56,7 +56,7 @@ public void ResourceGroup(string value, string expected) [MemberData(nameof(StringTestCases))] public void SiteName(string value, string expected) { - var source = CreateConfigurationSource((ConfigurationKeys.AzureAppService.SiteNameKey, value)); + var source = CreateConfigurationSource((PlatformKeys.AzureAppService.SiteNameKey, value)); var settings = new ImmutableAzureAppServiceSettings(source, NullConfigurationTelemetry.Instance); settings.SiteName.Should().Be(expected); @@ -72,9 +72,9 @@ public void SiteName(string value, string expected) public void ResourceId(string subscriptionId, string siteName, string resourceGroup, string expected) { var source = CreateConfigurationSource( - (ConfigurationKeys.AzureAppService.SiteNameKey, siteName), - (ConfigurationKeys.AzureAppService.ResourceGroupKey, resourceGroup), - (ConfigurationKeys.AzureAppService.WebsiteOwnerNameKey, subscriptionId)); + (PlatformKeys.AzureAppService.SiteNameKey, siteName), + (PlatformKeys.AzureAppService.ResourceGroupKey, resourceGroup), + (PlatformKeys.AzureAppService.WebsiteOwnerNameKey, subscriptionId)); var settings = new ImmutableAzureAppServiceSettings(source, NullConfigurationTelemetry.Instance); @@ -85,7 +85,7 @@ public void ResourceId(string subscriptionId, string siteName, string resourceGr [MemberData(nameof(StringTestCases), "unknown", Strings.AllowEmpty)] public void InstanceId(string value, string expected) { - var source = CreateConfigurationSource((ConfigurationKeys.AzureAppService.InstanceIdKey, value)); + var source = CreateConfigurationSource((PlatformKeys.AzureAppService.InstanceIdKey, value)); var settings = new ImmutableAzureAppServiceSettings(source, NullConfigurationTelemetry.Instance); settings.InstanceId.Should().Be(expected); @@ -95,7 +95,7 @@ public void InstanceId(string value, string expected) [MemberData(nameof(StringTestCases), "unknown", Strings.AllowEmpty)] public void InstanceName(string value, string expected) { - var source = CreateConfigurationSource((ConfigurationKeys.AzureAppService.InstanceNameKey, value)); + var source = CreateConfigurationSource((PlatformKeys.AzureAppService.InstanceNameKey, value)); var settings = new ImmutableAzureAppServiceSettings(source, NullConfigurationTelemetry.Instance); settings.InstanceName.Should().Be(expected); @@ -105,7 +105,7 @@ public void InstanceName(string value, string expected) [MemberData(nameof(StringTestCases), "unknown", Strings.AllowEmpty)] public void OperatingSystem(string value, string expected) { - var source = CreateConfigurationSource((ConfigurationKeys.AzureAppService.OperatingSystemKey, value)); + var source = CreateConfigurationSource((PlatformKeys.AzureAppService.OperatingSystemKey, value)); var settings = new ImmutableAzureAppServiceSettings(source, NullConfigurationTelemetry.Instance); settings.OperatingSystem.Should().Be(expected); @@ -125,7 +125,7 @@ public void SiteExtensionVersion(string value, string expected) [MemberData(nameof(StringTestCases))] public void FunctionsWorkerRuntime(string value, string expected) { - var source = CreateConfigurationSource((ConfigurationKeys.AzureFunctions.FunctionsWorkerRuntime, value)); + var source = CreateConfigurationSource((PlatformKeys.AzureFunctions.FunctionsWorkerRuntime, value)); var settings = new ImmutableAzureAppServiceSettings(source, NullConfigurationTelemetry.Instance); settings.FunctionsWorkerRuntime.Should().Be(expected); @@ -135,7 +135,7 @@ public void FunctionsWorkerRuntime(string value, string expected) [MemberData(nameof(StringTestCases))] public void FunctionsExtensionVersion(string value, string expected) { - var source = CreateConfigurationSource((ConfigurationKeys.AzureFunctions.FunctionsExtensionVersion, value)); + var source = CreateConfigurationSource((PlatformKeys.AzureFunctions.FunctionsExtensionVersion, value)); var settings = new ImmutableAzureAppServiceSettings(source, NullConfigurationTelemetry.Instance); settings.FunctionsExtensionVersion.Should().Be(expected); @@ -150,8 +150,8 @@ public void FunctionsExtensionVersion(string value, string expected) public void IsFunctionsApp(string functionsWorkerRuntime, string functionsExtensionVersion, bool expected) { var source = CreateConfigurationSource( - (ConfigurationKeys.AzureFunctions.FunctionsWorkerRuntime, functionsWorkerRuntime), - (ConfigurationKeys.AzureFunctions.FunctionsExtensionVersion, functionsExtensionVersion)); + (PlatformKeys.AzureFunctions.FunctionsWorkerRuntime, functionsWorkerRuntime), + (PlatformKeys.AzureFunctions.FunctionsExtensionVersion, functionsExtensionVersion)); var settings = new ImmutableAzureAppServiceSettings(source, NullConfigurationTelemetry.Instance); settings.IsFunctionsApp.Should().Be(expected); diff --git a/tracer/test/Datadog.Trace.Tests/Configuration/ImmutableGCPFunctionSettingsTests.cs b/tracer/test/Datadog.Trace.Tests/Configuration/ImmutableGCPFunctionSettingsTests.cs index 7ae5fe57d955..ea9104e263c8 100644 --- a/tracer/test/Datadog.Trace.Tests/Configuration/ImmutableGCPFunctionSettingsTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Configuration/ImmutableGCPFunctionSettingsTests.cs @@ -19,8 +19,8 @@ public class ImmutableGCPFunctionSettingsTests : SettingsTestsBase public void GetIsGCPFunctionTrueWhenDeprecatedFunctionsEnvVarsExist() { var source = CreateConfigurationSource( - (ConfigurationKeys.GCPFunction.DeprecatedFunctionNameKey, "value"), - (ConfigurationKeys.GCPFunction.DeprecatedProjectKey, "value")); + (PlatformKeys.GcpFunction.DeprecatedFunctionNameKey, "value"), + (PlatformKeys.GcpFunction.DeprecatedProjectKey, "value")); var settings = new ImmutableGCPFunctionSettings(source, NullConfigurationTelemetry.Instance); settings.IsDeprecatedFunction.Should().BeTrue(); @@ -32,8 +32,8 @@ public void GetIsGCPFunctionTrueWhenDeprecatedFunctionsEnvVarsExist() public void GetIsGCPFunctionTrueWhenNonDeprecatedFunctionsEnvVarsExist() { var source = CreateConfigurationSource( - (ConfigurationKeys.GCPFunction.FunctionNameKey, "value"), - (ConfigurationKeys.GCPFunction.FunctionTargetKey, "value")); + (PlatformKeys.GcpFunction.FunctionNameKey, "value"), + (PlatformKeys.GcpFunction.FunctionTargetKey, "value")); var settings = new ImmutableGCPFunctionSettings(source, NullConfigurationTelemetry.Instance); settings.IsNewerFunction.Should().BeTrue(); diff --git a/tracer/test/Datadog.Trace.Tests/Configuration/IntegrationSettingsTests.cs b/tracer/test/Datadog.Trace.Tests/Configuration/IntegrationSettingsTests.cs index 8de1a822fde2..79074ab882d7 100644 --- a/tracer/test/Datadog.Trace.Tests/Configuration/IntegrationSettingsTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Configuration/IntegrationSettingsTests.cs @@ -90,7 +90,7 @@ public void SettingsRespectsOverride(bool initiallyEnabled) var name = nameof(IntegrationId.Kafka); var source = new NameValueConfigurationSource(new() { - { string.Format(ConfigurationKeys.Integrations.Enabled, name), initiallyEnabled.ToString() }, + { string.Format(IntegrationSettings.IntegrationEnabled, name), initiallyEnabled.ToString() }, }); var settings = new IntegrationSettings(name, source: source, isExplicitlyDisabled: true); @@ -105,7 +105,7 @@ public void SettingsRespectsOriginalIfNotOverridden(bool initiallyEnabled) var name = nameof(IntegrationId.Kafka); var source = new NameValueConfigurationSource(new() { - { string.Format(ConfigurationKeys.Integrations.Enabled, name), initiallyEnabled.ToString() }, + { string.Format(IntegrationSettings.IntegrationEnabled, name), initiallyEnabled.ToString() }, }); var settings = new IntegrationSettings(name, source: source, isExplicitlyDisabled: false); diff --git a/tracer/test/Datadog.Trace.Tests/Configuration/MutableSettingsTests.cs b/tracer/test/Datadog.Trace.Tests/Configuration/MutableSettingsTests.cs index 7c8d72719a13..2bc1cc89e444 100644 --- a/tracer/test/Datadog.Trace.Tests/Configuration/MutableSettingsTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Configuration/MutableSettingsTests.cs @@ -522,7 +522,7 @@ public void KafkaCreateConsumerScopeEnabled(string value, bool expected) [Fact] public void DisableTracerIfNoApiKeyInAas() { - var source = CreateConfigurationSource((ConfigurationKeys.AzureAppService.SiteNameKey, "site-name")); + var source = CreateConfigurationSource((PlatformKeys.AzureAppService.SiteNameKey, "site-name")); var settings = new TracerSettings(source); var mutable = GetMutableSettings(source, settings); diff --git a/tracer/test/Datadog.Trace.Tests/Configuration/TracerSettingsServerlessTests.cs b/tracer/test/Datadog.Trace.Tests/Configuration/TracerSettingsServerlessTests.cs index baea1348429b..3b37c7d814ec 100644 --- a/tracer/test/Datadog.Trace.Tests/Configuration/TracerSettingsServerlessTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Configuration/TracerSettingsServerlessTests.cs @@ -62,7 +62,7 @@ public void HttpClientExcludedUrlSubstrings_AzureAppServices(string value, bool if (isRunningInAppService) { - configPairs.Add((ConfigurationKeys.AzureAppService.SiteNameKey, "site-name")); + configPairs.Add((PlatformKeys.AzureAppService.SiteNameKey, "site-name")); } var settings = new TracerSettings(CreateConfigurationSource(configPairs.ToArray())); diff --git a/tracer/test/Datadog.Trace.Tests/Configuration/TracerSettingsTests.cs b/tracer/test/Datadog.Trace.Tests/Configuration/TracerSettingsTests.cs index 6923a11aa377..98426a038130 100644 --- a/tracer/test/Datadog.Trace.Tests/Configuration/TracerSettingsTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Configuration/TracerSettingsTests.cs @@ -582,7 +582,7 @@ public void IsRareSamplerEnabled(string value, bool expected) [InlineData(null, false)] public void IsRunningInAzureAppService(string value, bool expected) { - var source = CreateConfigurationSource((ConfigurationKeys.AzureAppService.SiteNameKey, value)); + var source = CreateConfigurationSource((PlatformKeys.AzureAppService.SiteNameKey, value)); var settings = new TracerSettings(source); settings.IsRunningInAzureAppService.Should().Be(expected); @@ -595,9 +595,9 @@ public void IsRunningInAzureAppService(string value, bool expected) public void IsRunningInAzureFunctions(string value, bool expected) { var source = CreateConfigurationSource( - (ConfigurationKeys.AzureAppService.SiteNameKey, value), - (ConfigurationKeys.AzureFunctions.FunctionsWorkerRuntime, value), - (ConfigurationKeys.AzureFunctions.FunctionsExtensionVersion, value)); + (PlatformKeys.AzureAppService.SiteNameKey, value), + (PlatformKeys.AzureFunctions.FunctionsWorkerRuntime, value), + (PlatformKeys.AzureFunctions.FunctionsExtensionVersion, value)); var settings = new TracerSettings(source); @@ -667,7 +667,7 @@ public void IsRemoteConfigurationAvailable_AzureAppService(bool? overrideValue, if (isRunningInAas) { - configPairs.Add((ConfigurationKeys.AzureAppService.SiteNameKey, "site-name")); + configPairs.Add((PlatformKeys.AzureAppService.SiteNameKey, "site-name")); } var settings = new TracerSettings(CreateConfigurationSource(configPairs.ToArray())); diff --git a/tracer/test/Datadog.Trace.Tests/ContinuousProfiler/ProfilerAvailabilityHelperTests.cs b/tracer/test/Datadog.Trace.Tests/ContinuousProfiler/ProfilerAvailabilityHelperTests.cs index 8eef3203fa29..3360a3e2c358 100644 --- a/tracer/test/Datadog.Trace.Tests/ContinuousProfiler/ProfilerAvailabilityHelperTests.cs +++ b/tracer/test/Datadog.Trace.Tests/ContinuousProfiler/ProfilerAvailabilityHelperTests.cs @@ -17,9 +17,9 @@ namespace Datadog.Trace.Tests.ContinuousProfiler; [EnvironmentRestorer( "DD_INTERNAL_PROFILING_NATIVE_ENGINE_PATH", LambdaMetadata.FunctionNameEnvVar, - ConfigurationKeys.AzureAppService.SiteNameKey, - ConfigurationKeys.AzureFunctions.FunctionsWorkerRuntime, - ConfigurationKeys.AzureFunctions.FunctionsExtensionVersion, + PlatformKeys.AzureAppService.SiteNameKey, + PlatformKeys.AzureFunctions.FunctionsWorkerRuntime, + PlatformKeys.AzureFunctions.FunctionsExtensionVersion, ConfigurationKeys.AzureAppService.AzureAppServicesContextKey)] public class ProfilerAvailabilityHelperTests { @@ -80,9 +80,9 @@ public void IsContinuousProfilerAvailable_InLambda_IgnoresAttachment_ReturnsFals public void IsContinuousProfilerAvailable_InAzureFunctions_IgnoresAttachment_ReturnsFalse() { SkipUnsupported(); - Environment.SetEnvironmentVariable(ConfigurationKeys.AzureAppService.SiteNameKey, "MyApp"); - Environment.SetEnvironmentVariable(ConfigurationKeys.AzureFunctions.FunctionsWorkerRuntime, "dotnet"); - Environment.SetEnvironmentVariable(ConfigurationKeys.AzureFunctions.FunctionsExtensionVersion, "v6.0"); + Environment.SetEnvironmentVariable(PlatformKeys.AzureAppService.SiteNameKey, "MyApp"); + Environment.SetEnvironmentVariable(PlatformKeys.AzureFunctions.FunctionsWorkerRuntime, "dotnet"); + Environment.SetEnvironmentVariable(PlatformKeys.AzureFunctions.FunctionsExtensionVersion, "v6.0"); ProfilerAvailabilityHelper.IsContinuousProfilerAvailable_TestingOnly(ClrProfilerIsAttached).Should().BeFalse(); } diff --git a/tracer/test/Datadog.Trace.Tests/ContinuousProfiler/ProfilerSettingsTests.cs b/tracer/test/Datadog.Trace.Tests/ContinuousProfiler/ProfilerSettingsTests.cs index 3918de37d709..008d866f9d82 100644 --- a/tracer/test/Datadog.Trace.Tests/ContinuousProfiler/ProfilerSettingsTests.cs +++ b/tracer/test/Datadog.Trace.Tests/ContinuousProfiler/ProfilerSettingsTests.cs @@ -50,12 +50,12 @@ public void ProfilerState_WhenPassedViaEnvironment(string profilingValue, string var values = new List<(string, string)>(); if (profilingValue is not null) { - values.Add((Datadog.Trace.ContinuousProfiler.ConfigurationKeys.ProfilingEnabled, profilingValue)); + values.Add((Datadog.Trace.Configuration.ConfigurationKeys.Profiler.ProfilingEnabled, profilingValue)); } if (ssiValue is not null) { - values.Add((Datadog.Trace.ContinuousProfiler.ConfigurationKeys.SsiDeployed, ssiValue)); + values.Add((Datadog.Trace.Configuration.ConfigurationKeys.Profiler.SsiDeployed, ssiValue)); } var source = CreateConfigurationSource(values.ToArray()); @@ -78,13 +78,13 @@ public void ProfilerState_WhenManagedActivationIsMissingOrOnByDefault_DontReadFr var envValues = new List<(string, string)>(); if (envProfilingEnabled is not null) { - envValues.Add((Datadog.Trace.ContinuousProfiler.ConfigurationKeys.ProfilingEnabled, envProfilingEnabled)); + envValues.Add((Datadog.Trace.Configuration.ConfigurationKeys.Profiler.ProfilingEnabled, envProfilingEnabled)); } var otherValues = new List<(string, string)>(); if (configProfilingEnabled is not null) { - otherValues.Add((Datadog.Trace.ContinuousProfiler.ConfigurationKeys.ProfilingEnabled, configProfilingEnabled)); + otherValues.Add((Datadog.Trace.Configuration.ConfigurationKeys.Profiler.ProfilingEnabled, configProfilingEnabled)); } var envConfig = CreateConfigurationSource(envValues.ToArray()); @@ -109,18 +109,18 @@ public void ProfilerState_WhenManagedActivationIsDisabled_OnlyReadsFromEnvVars(s { var envValues = new List<(string, string)> { - (Datadog.Trace.ContinuousProfiler.ConfigurationKeys.ProfilerManagedActivationEnabled, "0") + (Datadog.Trace.Configuration.ConfigurationKeys.Profiler.ProfilerManagedActivationEnabled, "0") }; if (envProfilingEnabled is not null) { - envValues.Add((Datadog.Trace.ContinuousProfiler.ConfigurationKeys.ProfilingEnabled, envProfilingEnabled)); + envValues.Add((Datadog.Trace.Configuration.ConfigurationKeys.Profiler.ProfilingEnabled, envProfilingEnabled)); } var otherValues = new List<(string, string)>(); if (configProfilingEnabled is not null) { - otherValues.Add((Datadog.Trace.ContinuousProfiler.ConfigurationKeys.ProfilingEnabled, configProfilingEnabled)); + otherValues.Add((Datadog.Trace.Configuration.ConfigurationKeys.Profiler.ProfilingEnabled, configProfilingEnabled)); } var envConfig = CreateConfigurationSource(envValues.ToArray()); diff --git a/tracer/test/Datadog.Trace.Tests/ManualInstrumentation/ManualInstrumentationLegacyConfigurationSourceTests.cs b/tracer/test/Datadog.Trace.Tests/ManualInstrumentation/ManualInstrumentationLegacyConfigurationSourceTests.cs index 0e714ca59648..1dec3714089e 100644 --- a/tracer/test/Datadog.Trace.Tests/ManualInstrumentation/ManualInstrumentationLegacyConfigurationSourceTests.cs +++ b/tracer/test/Datadog.Trace.Tests/ManualInstrumentation/ManualInstrumentationLegacyConfigurationSourceTests.cs @@ -31,7 +31,7 @@ public void GetIntegrationEnabled_SupportedValues_ReturnsExpectedValues(int id) { var integrationId = (IntegrationId)id; var name = IntegrationRegistry.GetName(integrationId).ToUpperInvariant(); - var enabledKey = string.Format(ConfigurationKeys.Integrations.Enabled, name); + var enabledKey = string.Format(IntegrationSettings.IntegrationEnabled, name); var actual = ManualInstrumentationLegacyConfigurationSource.GetIntegrationEnabled(enabledKey); @@ -44,7 +44,7 @@ public void GetIntegrationAnalyticsEnabled_SupportedValues_ReturnsExpectedValues { var integrationId = (IntegrationId)id; var name = IntegrationRegistry.GetName(integrationId).ToUpperInvariant(); - var enabledKey = string.Format(ConfigurationKeys.Integrations.AnalyticsEnabled, name); + var enabledKey = string.Format(IntegrationSettings.AnalyticsEnabledKey, name); var actual = ManualInstrumentationLegacyConfigurationSource.GetIntegrationAnalyticsEnabled(enabledKey); @@ -57,7 +57,7 @@ public void GetIntegrationEnabled_ForUnsupportedValues_ReturnsNull(int id) { var integrationId = (IntegrationId)id; var name = IntegrationRegistry.GetName(integrationId).ToUpperInvariant(); - var enabledKey = string.Format(ConfigurationKeys.Integrations.Enabled, name); + var enabledKey = string.Format(IntegrationSettings.IntegrationEnabled, name); var actual = ManualInstrumentationLegacyConfigurationSource.GetIntegrationEnabled(enabledKey); @@ -70,7 +70,7 @@ public void GetIntegrationAnalyticsEnabled_ForUnsupportedValues_ReturnsNull(int { var integrationId = (IntegrationId)id; var name = IntegrationRegistry.GetName(integrationId).ToUpperInvariant(); - var enabledKey = string.Format(ConfigurationKeys.Integrations.AnalyticsEnabled, name); + var enabledKey = string.Format(IntegrationSettings.AnalyticsEnabledKey, name); var actual = ManualInstrumentationLegacyConfigurationSource.GetIntegrationAnalyticsEnabled(enabledKey); @@ -83,7 +83,7 @@ public void GetIntegrationAnalyticsSampleRate_ForUnsupportedValues_ReturnsNull(i { var integrationId = (IntegrationId)id; var name = IntegrationRegistry.GetName(integrationId).ToUpperInvariant(); - var enabledKey = string.Format(ConfigurationKeys.Integrations.AnalyticsSampleRate, name); + var enabledKey = string.Format(IntegrationSettings.AnalyticsSampleRateKey, name); var actual = ManualInstrumentationLegacyConfigurationSource.GetIntegrationAnalyticsSampleRate(enabledKey); diff --git a/tracer/test/Datadog.Trace.Tests/ManualInstrumentation/SettingsInstrumentationTests.cs b/tracer/test/Datadog.Trace.Tests/ManualInstrumentation/SettingsInstrumentationTests.cs index c445c4793216..45afb8baad92 100644 --- a/tracer/test/Datadog.Trace.Tests/ManualInstrumentation/SettingsInstrumentationTests.cs +++ b/tracer/test/Datadog.Trace.Tests/ManualInstrumentation/SettingsInstrumentationTests.cs @@ -341,9 +341,9 @@ private static TracerSettings GetAndAssertAutomaticTracerSettings() { ConfigurationKeys.TraceEnabled, false }, { ConfigurationKeys.TracerMetricsEnabled, true }, { ConfigurationKeys.AgentUri, "http://localhost:1234" }, - { string.Format(ConfigurationKeys.Integrations.Enabled, nameof(IntegrationId.Aerospike)), "false" }, - { string.Format(ConfigurationKeys.Integrations.AnalyticsEnabled, nameof(IntegrationId.Grpc)), "true" }, - { string.Format(ConfigurationKeys.Integrations.AnalyticsSampleRate, nameof(IntegrationId.Couchbase)), 0.5 }, + { string.Format(IntegrationSettings.IntegrationEnabled, nameof(IntegrationId.Aerospike)), "false" }, + { string.Format(IntegrationSettings.AnalyticsEnabledKey, nameof(IntegrationId.Grpc)), "true" }, + { string.Format(IntegrationSettings.AnalyticsSampleRateKey, nameof(IntegrationId.Couchbase)), 0.5 }, }); // verify that all the settings are as expected diff --git a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs index a851c80fa1ac..c6b6efa361e3 100644 --- a/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs +++ b/tracer/test/Datadog.Trace.Tests/Telemetry/Collectors/ConfigurationTelemetryCollectorTests.cs @@ -133,9 +133,9 @@ public void ConfigurationDataShouldIncludeAzureValues(bool isSafeToTrace) var config = new NameValueCollection { { ConfigurationKeys.AzureAppService.SiteExtensionVersionKey, "1.5.0" }, - { ConfigurationKeys.AzureAppService.SiteNameKey, "site-name" }, - { ConfigurationKeys.AzureFunctions.FunctionsExtensionVersion, "~4" }, - { ConfigurationKeys.AzureFunctions.FunctionsWorkerRuntime, "dotnet-isolated" }, + { PlatformKeys.AzureAppService.SiteNameKey, "site-name" }, + { PlatformKeys.AzureFunctions.FunctionsExtensionVersion, "~4" }, + { PlatformKeys.AzureFunctions.FunctionsWorkerRuntime, "dotnet-isolated" }, { ConfigurationKeys.ServiceName, serviceName }, { ConfigurationKeys.Environment, env }, { ConfigurationKeys.ServiceVersion, serviceVersion }, @@ -152,9 +152,9 @@ public void ConfigurationDataShouldIncludeAzureValues(bool isSafeToTrace) using var scope = new AssertionScope(); GetLatestValueFromConfig(data, ConfigurationKeys.AzureAppService.SiteExtensionVersionKey).Should().Be("1.5.0"); - GetLatestValueFromConfig(data, ConfigurationKeys.AzureAppService.SiteNameKey).Should().Be("site-name"); - GetLatestValueFromConfig(data, ConfigurationKeys.AzureFunctions.FunctionsExtensionVersion).Should().Be("~4"); - GetLatestValueFromConfig(data, ConfigurationKeys.AzureFunctions.FunctionsWorkerRuntime).Should().Be("dotnet-isolated"); + GetLatestValueFromConfig(data, PlatformKeys.AzureAppService.SiteNameKey).Should().Be("site-name"); + GetLatestValueFromConfig(data, PlatformKeys.AzureFunctions.FunctionsExtensionVersion).Should().Be("~4"); + GetLatestValueFromConfig(data, PlatformKeys.AzureFunctions.FunctionsWorkerRuntime).Should().Be("dotnet-isolated"); GetLatestValueFromConfig(data, ConfigTelemetryData.AasConfigurationError).Should().BeOfType().Subject.Should().Be(!isSafeToTrace); GetLatestValueFromConfig(data, ConfigTelemetryData.CloudHosting).Should().Be("Azure"); GetLatestValueFromConfig(data, ConfigTelemetryData.AasAppType).Should().Be("function");