diff --git a/dd-trace-core/src/main/java/datadog/trace/common/GitMetadataTraceInterceptor.java b/dd-trace-core/src/main/java/datadog/trace/common/GitMetadataTraceInterceptor.java index 584d79f8ffb..df43b61d6d6 100644 --- a/dd-trace-core/src/main/java/datadog/trace/common/GitMetadataTraceInterceptor.java +++ b/dd-trace-core/src/main/java/datadog/trace/common/GitMetadataTraceInterceptor.java @@ -1,6 +1,5 @@ package datadog.trace.common; -import datadog.trace.api.DDTags; import datadog.trace.api.git.GitInfo; import datadog.trace.api.git.GitInfoProvider; import datadog.trace.api.interceptor.AbstractTraceInterceptor; @@ -30,8 +29,7 @@ public Collection onTraceComplete( String ciWorkspacePath = (String) firstSpan.getTag(Tags.CI_WORKSPACE_PATH); GitInfo gitInfo = GitInfoProvider.INSTANCE.getGitInfo(ciWorkspacePath); - firstSpan.setTag(DDTags.INTERNAL_GIT_REPOSITORY_URL, gitInfo.getRepositoryURL()); - firstSpan.setTag(DDTags.INTERNAL_GIT_COMMIT_SHA, gitInfo.getCommit().getSha()); + gitInfo.addTags(firstSpan); return trace; } diff --git a/internal-api/src/main/java/datadog/trace/api/git/CommitInfo.java b/internal-api/src/main/java/datadog/trace/api/git/CommitInfo.java index ad5183c4f92..be0ddae0281 100644 --- a/internal-api/src/main/java/datadog/trace/api/git/CommitInfo.java +++ b/internal-api/src/main/java/datadog/trace/api/git/CommitInfo.java @@ -3,8 +3,7 @@ import datadog.trace.util.Strings; import java.util.Objects; -public class CommitInfo { - +public final class CommitInfo { public static final CommitInfo NOOP = new CommitInfo(null, PersonInfo.NOOP, PersonInfo.NOOP, null); diff --git a/internal-api/src/main/java/datadog/trace/api/git/GitInfo.java b/internal-api/src/main/java/datadog/trace/api/git/GitInfo.java index 923ee211fdc..32929b2b3c8 100644 --- a/internal-api/src/main/java/datadog/trace/api/git/GitInfo.java +++ b/internal-api/src/main/java/datadog/trace/api/git/GitInfo.java @@ -1,9 +1,11 @@ package datadog.trace.api.git; +import datadog.trace.api.DDTags; +import datadog.trace.api.TagMap; +import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import java.util.Objects; -public class GitInfo { - +public final class GitInfo { public static final GitInfo NOOP = new GitInfo(null, null, null, CommitInfo.NOOP); private final String repositoryURL; @@ -11,11 +13,22 @@ public class GitInfo { private final String tag; private final CommitInfo commit; + private final TagMap.Entry repositoryEntry; + private final TagMap.Entry commitEntry; + public GitInfo(String repositoryURL, String branch, String tag, CommitInfo commit) { this.repositoryURL = repositoryURL; this.branch = branch; this.tag = tag; this.commit = commit; + + // GitInfo is reused across many traces, so create entries once and reuse them (see addTags) + // null & empty values result in null entries which nop when added to a span + this.repositoryEntry = TagMap.Entry.create(DDTags.INTERNAL_GIT_REPOSITORY_URL, repositoryURL); + this.commitEntry = + commit == null + ? null + : TagMap.Entry.create(DDTags.INTERNAL_GIT_COMMIT_SHA, commit.getSha()); } public String getRepositoryURL() { @@ -34,6 +47,11 @@ public CommitInfo getCommit() { return commit; } + public void addTags(AgentSpan span) { + span.setTag(this.repositoryEntry); + span.setTag(this.commitEntry); + } + public boolean isEmpty() { return (repositoryURL == null || repositoryURL.isEmpty()) && (branch == null || branch.isEmpty()) diff --git a/internal-api/src/main/java/datadog/trace/api/git/PersonInfo.java b/internal-api/src/main/java/datadog/trace/api/git/PersonInfo.java index a7c1a083658..2eae5d9c6c9 100644 --- a/internal-api/src/main/java/datadog/trace/api/git/PersonInfo.java +++ b/internal-api/src/main/java/datadog/trace/api/git/PersonInfo.java @@ -6,8 +6,7 @@ import java.util.Objects; import java.util.TimeZone; -public class PersonInfo { - +public final class PersonInfo { public static final PersonInfo NOOP = new PersonInfo(); private static final String DATE_FORMAT_ISO8601 = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";