Skip to content

Commit 3940b73

Browse files
committed
answer to comments #2
1 parent b9dad0a commit 3940b73

File tree

11 files changed

+54
-51
lines changed

11 files changed

+54
-51
lines changed

tracer/src/Datadog.Trace/Ci/Configuration/TestOptimizationSettings.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using Datadog.Trace.Configuration;
1313
using Datadog.Trace.Configuration.ConfigurationSources.Telemetry;
1414
using Datadog.Trace.Configuration.Telemetry;
15+
using Datadog.Trace.LibDatadog;
1516
using Datadog.Trace.Telemetry;
1617
using Datadog.Trace.Util;
1718

@@ -345,10 +346,10 @@ internal void SetDefaultManualInstrumentationSettings()
345346
}
346347

347348
private TracerSettings InitializeTracerSettings()
348-
=> InitializeTracerSettings(GlobalConfigurationSource.CreateDefaultConfigurationSource().ConfigurationSource);
349+
=> InitializeTracerSettings(GlobalConfigurationSource.Instance);
349350

350351
// Internal for testing
351-
internal TracerSettings InitializeTracerSettings(CompositeConfigurationSource source)
352+
internal TracerSettings InitializeTracerSettings(IConfigurationSource source)
352353
{
353354
// This is a somewhat hacky way to "tell" TracerSettings that we're running in CI Visibility
354355
// There's no doubt various other ways we could flag it based on values we're _already_ extracting,
@@ -368,7 +369,7 @@ internal TracerSettings InitializeTracerSettings(CompositeConfigurationSource so
368369
}
369370

370371
var newSource = new CompositeConfigurationSource([new DictionaryObjectConfigurationSource(additionalSource), source]);
371-
return new TracerSettings(newSource, telemetry, new OverrideErrorLog());
372+
return new TracerSettings(newSource, telemetry, new OverrideErrorLog(), new LibDatadogAvailableResult(false));
372373
}
373374
}
374375
}

tracer/src/Datadog.Trace/Configuration/ConfigurationSources/GlobalConfigurationSource.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
using System.IO;
1111
using Datadog.Trace.Configuration.ConfigurationSources;
1212
using Datadog.Trace.Configuration.Telemetry;
13-
using Datadog.Trace.LibDatadog;
1413
using Datadog.Trace.LibDatadog.HandsOffConfiguration;
1514
using Datadog.Trace.Telemetry;
1615

@@ -35,13 +34,15 @@ internal static IConfigurationSource Instance
3534
return _instance;
3635
}
3736

38-
var result = CreateDefaultConfigurationSource();
39-
_instance = result.ConfigurationSource;
37+
CreationResult = CreateDefaultConfigurationSource();
38+
_instance = CreationResult.ConfigurationSource;
4039

4140
return _instance;
4241
}
4342
}
4443

44+
internal static GlobalConfigurationSourceResult CreationResult { get; private set; }
45+
4546
/// <summary>
4647
/// Creates a <see cref="IConfigurationSource"/> by combining environment variables,
4748
/// Precedence is as follows:

tracer/src/Datadog.Trace/LibDatadog/CString.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ internal CString(string? str)
4747
}
4848
}
4949

50-
public string ToUtf8String() => NativeStringHelper.GetString(Ptr, Length);
50+
public unsafe string ToUtf8String() => StringEncoding.UTF8.GetString((byte*)Ptr, (int)Length);
5151

5252
public void Dispose()
5353
{

tracer/src/Datadog.Trace/LibDatadog/LibDatadogAvailaibilityHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ internal static class LibDatadogAvailaibilityHelper
2525
private static readonly Lazy<LibDatadogAvailableResult> LibDatadogAvailable = new(() =>
2626
{
2727
var isServerless = EnvironmentHelpersNoLogging.IsServerlessEnvironment(out var possibleException);
28-
return new(!isServerless && NativeMethods.IsProfilerAttached(), possibleException);
28+
return new(!isServerless && EnvironmentHelpersNoLogging.IsClrProfilerAttachedSafe(), possibleException);
2929
});
3030

3131
public static LibDatadogAvailableResult IsLibDatadogAvailable => LibDatadogAvailable.Value;

tracer/src/Datadog.Trace/LibDatadog/ServiceDiscovery/ServiceDiscoveryHelper.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,6 @@ internal static StoreMetadataResult StoreTracerMetadata(TracerSettings tracerSet
6161
"Skipping storage of tracer metadata with LibDatadog: Platform supported: {PlatformIsSupported}, Deployment supported: {DeploymentIsSupported}",
6262
platformIsSupported,
6363
deploymentIsSupported);
64-
if (deploymentIsSupported.Exception is not null)
65-
{
66-
Log.Warning(deploymentIsSupported.Exception, "An exception happened when trying to see if libdatadog was available");
67-
}
6864

6965
return StoreMetadataResult.Skipped;
7066
}

tracer/src/Datadog.Trace/Logging/Internal/DatadogLoggingFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ private static ConsoleLoggingConfiguration GetConsoleLoggingConfiguration(IConfi
166166

167167
// Internal for testing
168168
internal static string GetLogDirectory(IConfigurationTelemetry telemetry)
169-
=> GetLogDirectory(GlobalConfigurationSource.CreateDefaultConfigurationSource().ConfigurationSource, telemetry);
169+
=> GetLogDirectory(GlobalConfigurationSource.Instance, telemetry);
170170

171171
private static string GetLogDirectory(IConfigurationSource source, IConfigurationTelemetry telemetry)
172172
{

tracer/src/Datadog.Trace/TracerManagerFactory.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@
1111
using Datadog.Trace.AppSec;
1212
using Datadog.Trace.ClrProfiler;
1313
using Datadog.Trace.Configuration;
14+
using Datadog.Trace.Configuration.ConfigurationSources;
1415
using Datadog.Trace.ContinuousProfiler;
1516
using Datadog.Trace.DataStreamsMonitoring;
1617
using Datadog.Trace.DogStatsd;
1718
using Datadog.Trace.Iast;
1819
using Datadog.Trace.LibDatadog;
20+
using Datadog.Trace.LibDatadog.HandsOffConfiguration;
1921
using Datadog.Trace.Logging;
2022
using Datadog.Trace.Logging.DirectSubmission;
2123
using Datadog.Trace.Logging.TracerFlare;
@@ -107,6 +109,17 @@ internal TracerManager CreateTracerManager(
107109
ISpanEventsManager spanEventsManager)
108110
{
109111
settings ??= TracerSettings.FromDefaultSourcesInternal();
112+
var result = GlobalConfigurationSource.CreationResult;
113+
if (result.Result is not Result.Success)
114+
{
115+
Log.Warning(result.Exception, "Failed to create the global configuration source with status: {Status} and error message: {ErrorMessage}", result.Result.ToString(), result.ErrorMessage);
116+
}
117+
118+
var libdatadogAvailaibility = LibDatadogAvailaibilityHelper.IsLibDatadogAvailable;
119+
if (libdatadogAvailaibility.Exception is not null)
120+
{
121+
Log.Warning(libdatadogAvailaibility.Exception, "An exception happened when trying to see if libdatadog was available");
122+
}
110123

111124
var defaultServiceName = settings.ServiceName ??
112125
GetApplicationName(settings) ??

tracer/src/Datadog.Trace/Util/EnvironmentHelpersNoLogging.cs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ internal static bool IsServerlessEnvironment(out Exception? exceptionInReading)
2424
Exception? firstException = null;
2525

2626
var isServerless = CheckEnvVar(LambdaMetadata.FunctionNameEnvVar, ref firstException)
27-
|| (CheckEnvVar(ConfigurationKeys.AzureAppService.SiteNameKey, ref firstException)
28-
&& !CheckEnvVar(ConfigurationKeys.AzureAppService.AzureAppServicesContextKey, ref firstException))
29-
|| (CheckEnvVar(ConfigurationKeys.GCPFunction.FunctionNameKey, ref firstException)
30-
&& CheckEnvVar(ConfigurationKeys.GCPFunction.FunctionTargetKey, ref firstException))
31-
|| (CheckEnvVar(ConfigurationKeys.GCPFunction.DeprecatedFunctionNameKey, ref firstException)
32-
&& CheckEnvVar(ConfigurationKeys.GCPFunction.DeprecatedProjectKey, ref firstException));
27+
|| (CheckEnvVar(ConfigurationKeys.AzureAppService.SiteNameKey, ref firstException)
28+
&& !CheckEnvVar(ConfigurationKeys.AzureAppService.AzureAppServicesContextKey, ref firstException))
29+
|| (CheckEnvVar(ConfigurationKeys.GCPFunction.FunctionNameKey, ref firstException)
30+
&& CheckEnvVar(ConfigurationKeys.GCPFunction.FunctionTargetKey, ref firstException))
31+
|| (CheckEnvVar(ConfigurationKeys.GCPFunction.DeprecatedFunctionNameKey, ref firstException)
32+
&& CheckEnvVar(ConfigurationKeys.GCPFunction.DeprecatedProjectKey, ref firstException));
3333

3434
exceptionInReading = firstException;
3535
return isServerless;
@@ -49,4 +49,16 @@ static bool CheckEnvVar(string key, ref Exception? storedException)
4949
}
5050
}
5151
}
52+
53+
public static bool IsClrProfilerAttachedSafe()
54+
{
55+
try
56+
{
57+
return NativeMethods.IsProfilerAttached();
58+
}
59+
catch (DllNotFoundException)
60+
{
61+
return false;
62+
}
63+
}
5264
}

tracer/src/Datadog.Trace/Util/NativeStringHelper.cs

Lines changed: 0 additions & 24 deletions
This file was deleted.

tracer/test/Datadog.Trace.Tests/Configuration/GlobalConfigurationSourceTests.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,12 @@ public void TestGlobalConfig()
3333
isLibdatadogAvailable: true);
3434
result.Result.Should().Be(Result.Success);
3535
var sources = result.ConfigurationSource.ToList();
36+
#if NETFRAMEWORK
3637
sources.Count.Should().Be(4);
38+
sources[3].Should().BeOfType<NameValueConfigurationSource>();
39+
#else
40+
sources.Count.Should().Be(3);
41+
#endif
3742
var fleetConfigSource = sources[0].Should().BeOfType<HandsOffConfigurationSource>().Subject;
3843
fleetConfigSource.Origin.Should().Be(ConfigurationOrigins.FleetStableConfig);
3944
fleetConfigSource.GetString("KEY1", NullConfigurationTelemetry.Instance, null, false).Result.Should().Be("fleet_file_env");
@@ -46,6 +51,5 @@ public void TestGlobalConfig()
4651
localConfigSource.GetString("KEY5", NullConfigurationTelemetry.Instance, null, false).IsPresent.Should().BeFalse();
4752
localConfigSource.GetString("KEY4", NullConfigurationTelemetry.Instance, null, false).Result.Should().Be("true");
4853
localConfigSource.GetBool("KEY2", NullConfigurationTelemetry.Instance, null).Result.Should().Be(false);
49-
sources[3].Should().BeOfType<NameValueConfigurationSource>();
5054
}
5155
}

0 commit comments

Comments
 (0)