Skip to content

Commit

Permalink
[Dynamic Instrumentation] Adding ddtags to snapshot query parameter (#…
Browse files Browse the repository at this point in the history
…5210)

* Adding ddtags to snapshot query parameter
  • Loading branch information
dudikeleti authored Mar 8, 2024
1 parent de4d915 commit 5a75734
Show file tree
Hide file tree
Showing 100 changed files with 176 additions and 285 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -990,6 +990,9 @@
<type fullname="System.Threading.Timer" />
<type fullname="System.Threading.TimerCallback" />
</assembly>
<assembly fullname="System.Web.HttpUtility">
<type fullname="System.Web.HttpUtility" />
</assembly>
<assembly fullname="System.Xml.ReaderWriter">
<type fullname="System.Xml.NameTable" />
<type fullname="System.Xml.XmlAttribute" />
Expand Down
2 changes: 1 addition & 1 deletion tracer/src/Datadog.Trace/ClrProfiler/Instrumentation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -491,7 +491,7 @@ private static void InitLiveDebugger(Tracer tracer)

if (isDiscoverySuccessful)
{
var liveDebugger = LiveDebuggerFactory.Create(discoveryService, RcmSubscriptionManager.Instance, settings, serviceName, tracer.TracerManager.Telemetry, debuggerSettings);
var liveDebugger = LiveDebuggerFactory.Create(discoveryService, RcmSubscriptionManager.Instance, settings, serviceName, tracer.TracerManager.Telemetry, debuggerSettings, tracer.TracerManager.GitMetadataTagsProvider);

Log.Debug("Initializing live debugger.");

Expand Down
4 changes: 2 additions & 2 deletions tracer/src/Datadog.Trace/Debugger/LiveDebuggerFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ internal class LiveDebuggerFactory
{
private static readonly IDatadogLogger Log = DatadogLogging.GetLoggerFor(typeof(LiveDebuggerFactory));

public static LiveDebugger Create(IDiscoveryService discoveryService, IRcmSubscriptionManager remoteConfigurationManager, ImmutableTracerSettings tracerSettings, string serviceName, ITelemetryController telemetry, DebuggerSettings debuggerSettings)
public static LiveDebugger Create(IDiscoveryService discoveryService, IRcmSubscriptionManager remoteConfigurationManager, ImmutableTracerSettings tracerSettings, string serviceName, ITelemetryController telemetry, DebuggerSettings debuggerSettings, IGitMetadataTagsProvider gitMetadataTagsProvider)
{
if (!debuggerSettings.Enabled)
{
Expand All @@ -49,7 +49,7 @@ public static LiveDebugger Create(IDiscoveryService discoveryService, IRcmSubscr
() => new MinimalAgentHeaderHelper(),
uri => uri);

var batchApi = AgentBatchUploadApi.Create(apiFactory, discoveryService);
var batchApi = AgentBatchUploadApi.Create(apiFactory, discoveryService, gitMetadataTagsProvider);
var batchUploader = BatchUploader.Create(batchApi);
var debuggerSink = DebuggerSink.Create(snapshotStatusSink, probeStatusSink, batchUploader, debuggerSettings);

Expand Down
88 changes: 83 additions & 5 deletions tracer/src/Datadog.Trace/Debugger/Sink/AgentBatchUploadApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,15 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
using Datadog.Trace.Agent;
using Datadog.Trace.Agent.DiscoveryService;
using Datadog.Trace.Agent.Transports;
using Datadog.Trace.Ci.Tags;
using Datadog.Trace.Configuration;
using Datadog.Trace.Logging;
using Datadog.Trace.Processors;
using Datadog.Trace.Util;

namespace Datadog.Trace.Debugger.Sink
{
Expand All @@ -19,17 +24,23 @@ internal class AgentBatchUploadApi : IBatchUploadApi
private static readonly IDatadogLogger Log = DatadogLogging.GetLoggerFor<AgentBatchUploadApi>();

private readonly IApiRequestFactory _apiRequestFactory;
private readonly IGitMetadataTagsProvider? _gitMetadataTagsProvider;
private string? _endpoint = null;
private string? _tags = null;

private AgentBatchUploadApi(IApiRequestFactory apiRequestFactory, IDiscoveryService discoveryService)
private AgentBatchUploadApi(
IApiRequestFactory apiRequestFactory,
IDiscoveryService discoveryService,
IGitMetadataTagsProvider gitMetadataTagsProvider)
{
_apiRequestFactory = apiRequestFactory;
_gitMetadataTagsProvider = gitMetadataTagsProvider;
discoveryService.SubscribeToChanges(c => _endpoint = c.DebuggerEndpoint);
}

public static AgentBatchUploadApi Create(IApiRequestFactory apiRequestFactory, IDiscoveryService discoveryService)
public static AgentBatchUploadApi Create(IApiRequestFactory apiRequestFactory, IDiscoveryService discoveryService, IGitMetadataTagsProvider gitMetadataTagsProvider)
{
return new AgentBatchUploadApi(apiRequestFactory, discoveryService);
return new AgentBatchUploadApi(apiRequestFactory, discoveryService, gitMetadataTagsProvider);
}

public async Task<bool> SendBatchAsync(ArraySegment<byte> data)
Expand All @@ -40,8 +51,8 @@ public async Task<bool> SendBatchAsync(ArraySegment<byte> data)
return false;
}

var uri = _apiRequestFactory.GetEndpoint(endpoint);
var request = _apiRequestFactory.Create(uri);
var uri = BuildUri(endpoint);
var request = _apiRequestFactory.Create(new Uri(uri));

using var response = await request.PostAsync(data, MimeTypes.Json).ConfigureAwait(false);
if (response.StatusCode is not (>= 200 and <= 299))
Expand All @@ -53,5 +64,72 @@ public async Task<bool> SendBatchAsync(ArraySegment<byte> data)

return true;
}

private string BuildUri(string endpoint)
{
var uri = _apiRequestFactory.GetEndpoint(endpoint);
var builder = new UriBuilder(uri);
var query = HttpUtility.ParseQueryString(builder.Query);
_tags ??= GetDefaultTagsMergedWithGlobalTags();
query["ddtags"] = _tags;
builder.Query = query.ToString();
return builder.ToString();
}

private string GetDefaultTagsMergedWithGlobalTags()
{
var sb = StringBuilderCache.Acquire(StringBuilderCache.MaxBuilderSize);

try
{
var environment = TraceUtil.NormalizeTag(Tracer.Instance.Settings.EnvironmentInternal);
if (!string.IsNullOrEmpty(environment))
{
sb.Append($"env:{environment},");
}

var version = Tracer.Instance.Settings.ServiceVersionInternal;
if (!string.IsNullOrEmpty(version))
{
sb.Append($"version:{version},");
}

var hostName = PlatformHelpers.HostMetadata.Instance?.Hostname;
if (!string.IsNullOrEmpty(hostName))
{
sb.Append($"host:{hostName},");
}

var runtimeId = Tracer.RuntimeId;
if (!string.IsNullOrEmpty(runtimeId))
{
sb.Append($"{Tags.RuntimeId}:{runtimeId},");
}

if (_gitMetadataTagsProvider != null &&
_gitMetadataTagsProvider.TryExtractGitMetadata(out var gitMetadata) &&
gitMetadata != GitMetadata.Empty)
{
sb.Append($"{CommonTags.GitRepository}:{gitMetadata.RepositoryUrl},");
sb.Append($"{CommonTags.GitCommit}:{gitMetadata.CommitSha},");
}

foreach (var kvp in Tracer.Instance.Settings.GlobalTagsInternal)
{
sb.Append($"{kvp.Key}:{kvp.Value},");
}

if (sb[sb.Length - 1] == ',')
{
sb.Length--;
}

return sb.ToString();
}
finally
{
StringBuilderCache.Release(sb);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -850,9 +850,6 @@ internal DebuggerSnapshotCreator AddGeneralInfo(string service, string traceId,
_jsonWriter.WritePropertyName("ddsource");
_jsonWriter.WriteValue(DDSource);

_jsonWriter.WritePropertyName("ddtags");
_jsonWriter.WriteValue(UnknownValue);

_jsonWriter.WritePropertyName("dd.trace_id");
_jsonWriter.WriteValue(traceId);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
[
[
{
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down Expand Up @@ -83,7 +82,6 @@
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
[
[
{
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
[
[
{
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"duration": "ScrubbedValue",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
[
[
{
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
[
[
{
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"duration": "ScrubbedValue",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
[
[
{
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down Expand Up @@ -75,7 +74,6 @@
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down Expand Up @@ -113,7 +112,6 @@
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down Expand Up @@ -605,7 +604,6 @@
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down Expand Up @@ -701,7 +699,6 @@
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down Expand Up @@ -797,7 +794,6 @@
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down Expand Up @@ -893,7 +889,6 @@
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down Expand Up @@ -990,7 +985,6 @@
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down Expand Up @@ -1146,7 +1140,6 @@
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down Expand Up @@ -1407,7 +1400,6 @@
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down Expand Up @@ -1768,7 +1760,6 @@
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down Expand Up @@ -2129,7 +2120,6 @@
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
[
[
{
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down Expand Up @@ -67,7 +66,6 @@
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
[
[
{
"dd.span_id": "ScrubbedValue",
"dd.trace_id": "ScrubbedValue",
"ddsource": "dd_debugger",
"ddtags": "Unknown",
"debugger": {
"snapshot": {
"captures": {
Expand Down
Loading

0 comments on commit 5a75734

Please sign in to comment.