Skip to content

Commit 5285a25

Browse files
Merge branch 'master' into landerson/fastzip
2 parents 4df304c + 53f5d20 commit 5285a25

File tree

185 files changed

+594
-446
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

185 files changed

+594
-446
lines changed

communication/src/main/java/datadog/communication/ddagent/DDAgentFeaturesDiscovery.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package datadog.communication.ddagent;
22

33
import static datadog.communication.serialization.msgpack.MsgPackWriter.FIXARRAY;
4-
import static java.util.Collections.emptyList;
4+
import static java.util.Collections.emptySet;
55
import static java.util.Collections.singletonList;
6-
import static java.util.Collections.unmodifiableList;
6+
import static java.util.Collections.unmodifiableSet;
77

88
import com.squareup.moshi.JsonAdapter;
99
import com.squareup.moshi.Moshi;
@@ -88,8 +88,8 @@ public class DDAgentFeaturesDiscovery implements DroppingPolicy {
8888
private volatile String evpProxyEndpoint;
8989
private volatile String version;
9090
private volatile String telemetryProxyEndpoint;
91-
private volatile List<String> peerTags = emptyList();
92-
private volatile List<String> spanKindsToComputedStats = emptyList();
91+
private volatile Set<String> peerTags = emptySet();
92+
private volatile Set<String> spanKindsToComputedStats = emptySet();
9393

9494
private long lastTimeDiscovered;
9595

@@ -123,8 +123,8 @@ private void reset() {
123123
version = null;
124124
lastTimeDiscovered = 0;
125125
telemetryProxyEndpoint = null;
126-
peerTags = emptyList();
127-
spanKindsToComputedStats = emptyList();
126+
peerTags = emptySet();
127+
spanKindsToComputedStats = emptySet();
128128
}
129129

130130
/** Run feature discovery, unconditionally. */
@@ -295,11 +295,16 @@ private boolean processInfoResponse(String response) {
295295
|| Boolean.TRUE.equals(canDrop));
296296

297297
Object peer_tags = map.get("peer_tags");
298-
peerTags = peer_tags == null ? emptyList() : unmodifiableList((List<String>) peer_tags);
298+
peerTags =
299+
peer_tags instanceof List
300+
? unmodifiableSet(new HashSet<>((List<String>) peer_tags))
301+
: emptySet();
299302

300303
Object span_kinds = map.get("span_kinds_stats_computed");
301304
spanKindsToComputedStats =
302-
span_kinds == null ? emptyList() : unmodifiableList((List<String>) span_kinds);
305+
span_kinds instanceof List
306+
? unmodifiableSet(new HashSet<>((List<String>) span_kinds))
307+
: emptySet();
303308
}
304309
try {
305310
state = Strings.sha256(response);
@@ -357,11 +362,11 @@ public boolean supportsLongRunning() {
357362
return supportsLongRunning;
358363
}
359364

360-
public List<String> peerTags() {
365+
public Set<String> peerTags() {
361366
return peerTags;
362367
}
363368

364-
public List<String> spanKindsToComputedStats() {
369+
public Set<String> spanKindsToComputedStats() {
365370
return spanKindsToComputedStats;
366371
}
367372

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityRepoServices.java

Lines changed: 55 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import datadog.trace.api.Config;
55
import datadog.trace.api.civisibility.telemetry.CiVisibilityMetricCollector;
66
import datadog.trace.api.civisibility.telemetry.tag.Provider;
7+
import datadog.trace.api.git.CommitInfo;
78
import datadog.trace.api.git.GitInfoProvider;
9+
import datadog.trace.api.git.PersonInfo;
810
import datadog.trace.civisibility.ci.CIInfo;
911
import datadog.trace.civisibility.ci.CIProviderInfo;
1012
import datadog.trace.civisibility.ci.CITagsProvider;
@@ -63,21 +65,22 @@ public class CiVisibilityRepoServices {
6365
CiVisibilityRepoServices(CiVisibilityServices services, Path path) {
6466
CIProviderInfo ciProviderInfo = services.ciProviderInfoFactory.createCIProviderInfo(path);
6567
ciProvider = ciProviderInfo.getProvider();
66-
6768
CIInfo ciInfo = ciProviderInfo.buildCIInfo();
68-
PullRequestInfo pullRequestInfo =
69-
buildPullRequestInfo(services.config, services.environment, ciProviderInfo);
70-
71-
if (pullRequestInfo.isNotEmpty()) {
72-
LOGGER.info("PR detected: {}", pullRequestInfo);
73-
}
7469

7570
repoRoot = getRepoRoot(ciInfo, services.gitClientFactory);
7671
moduleName = getModuleName(services.config, repoRoot, path);
77-
ciTags = new CITagsProvider().getCiTags(ciInfo, pullRequestInfo);
7872

7973
GitClient gitClient = services.gitClientFactory.create(repoRoot);
8074
GitRepoUnshallow gitRepoUnshallow = new GitRepoUnshallow(services.config, gitClient);
75+
PullRequestInfo pullRequestInfo =
76+
buildPullRequestInfo(
77+
services.config, services.environment, ciProviderInfo, gitClient, gitRepoUnshallow);
78+
79+
if (!pullRequestInfo.isEmpty()) {
80+
LOGGER.info("PR detected: {}", pullRequestInfo);
81+
}
82+
83+
ciTags = new CITagsProvider().getCiTags(ciInfo, pullRequestInfo);
8184

8285
gitDataUploader =
8386
buildGitDataUploader(
@@ -110,38 +113,71 @@ public class CiVisibilityRepoServices {
110113
}
111114

112115
@Nonnull
113-
private static PullRequestInfo buildPullRequestInfo(
114-
Config config, CiEnvironment environment, CIProviderInfo ciProviderInfo) {
115-
PullRequestInfo info = buildUserPullRequestInfo(config, environment);
116+
static PullRequestInfo buildPullRequestInfo(
117+
Config config,
118+
CiEnvironment environment,
119+
CIProviderInfo ciProviderInfo,
120+
GitClient gitClient,
121+
GitRepoUnshallow gitRepoUnshallow) {
122+
PullRequestInfo userInfo = buildUserPullRequestInfo(config, environment, gitClient);
116123

117-
if (info.isComplete()) {
118-
return info;
124+
if (userInfo.isComplete()) {
125+
return userInfo;
119126
}
120127

121128
// complete with CI vars if user didn't provide all information
122-
return PullRequestInfo.merge(info, ciProviderInfo.buildPullRequestInfo());
129+
PullRequestInfo ciInfo = PullRequestInfo.merge(userInfo, ciProviderInfo.buildPullRequestInfo());
130+
if (Strings.isNotBlank(ciInfo.getGitCommitHead().getSha())) {
131+
// if head sha present try to populate author, committer and message info through git client
132+
try {
133+
gitRepoUnshallow.unshallow(true);
134+
String headSha = ciInfo.getGitCommitHead().getSha();
135+
PersonInfo authorInfo =
136+
new PersonInfo(
137+
gitClient.getAuthorName(headSha),
138+
gitClient.getAuthorEmail(headSha),
139+
gitClient.getAuthorDate(headSha));
140+
PersonInfo committerInfo =
141+
new PersonInfo(
142+
gitClient.getCommitterName(headSha),
143+
gitClient.getCommitterEmail(headSha),
144+
gitClient.getCommitterDate(headSha));
145+
CommitInfo commitInfo =
146+
new CommitInfo(headSha, authorInfo, committerInfo, gitClient.getFullMessage(headSha));
147+
return PullRequestInfo.merge(ciInfo, new PullRequestInfo(null, null, commitInfo, null));
148+
} catch (Exception ignored) {
149+
}
150+
}
151+
return ciInfo;
123152
}
124153

125154
@Nonnull
126155
private static PullRequestInfo buildUserPullRequestInfo(
127-
Config config, CiEnvironment environment) {
156+
Config config, CiEnvironment environment, GitClient gitClient) {
128157
PullRequestInfo userInfo =
129158
new PullRequestInfo(
130159
config.getGitPullRequestBaseBranch(),
131160
config.getGitPullRequestBaseBranchSha(),
132-
config.getGitCommitHeadSha(),
161+
new CommitInfo(config.getGitCommitHeadSha()),
133162
null);
134163

135164
if (userInfo.isComplete()) {
136165
return userInfo;
137166
}
138167

139-
// logs-backend specific vars
168+
// ddci specific vars
169+
String targetSha = environment.get(Constants.DDCI_PULL_REQUEST_TARGET_SHA);
170+
String sourceSha = environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA);
171+
String mergeBase = null;
172+
try {
173+
mergeBase = gitClient.getMergeBase(targetSha, sourceSha);
174+
} catch (Exception ignored) {
175+
}
140176
PullRequestInfo ddCiInfo =
141177
new PullRequestInfo(
142178
null,
143-
environment.get(Constants.DDCI_PULL_REQUEST_TARGET_SHA),
144-
environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA),
179+
mergeBase,
180+
new CommitInfo(environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA)),
145181
null);
146182

147183
return PullRequestInfo.merge(userInfo, ddCiInfo);

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/AppVeyorInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public PullRequestInfo buildPullRequestInfo() {
9191
return new PullRequestInfo(
9292
normalizeBranch(environment.get(APPVEYOR_REPO_BRANCH)),
9393
null,
94-
environment.get(APPVEYOR_PR_HEAD_COMMIT),
94+
new CommitInfo(environment.get(APPVEYOR_PR_HEAD_COMMIT)),
9595
environment.get(APPVEYOR_PR_NUMBER));
9696
} else {
9797
return PullRequestInfo.EMPTY;

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/AzurePipelinesInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public PullRequestInfo buildPullRequestInfo() {
9090
return new PullRequestInfo(
9191
normalizeBranch(environment.get(AZURE_PR_TARGET_BRANCH)),
9292
null,
93-
null,
93+
CommitInfo.NOOP,
9494
environment.get(AZURE_PR_NUMBER));
9595
}
9696

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BitBucketInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public PullRequestInfo buildPullRequestInfo() {
7979
return new PullRequestInfo(
8080
normalizeBranch(environment.get(BITBUCKET_PR_DESTINATION_BRANCH)),
8181
null,
82-
null,
82+
CommitInfo.NOOP,
8383
environment.get(BITBUCKET_PR_NUMBER));
8484
}
8585

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BitriseInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public PullRequestInfo buildPullRequestInfo() {
7676
return new PullRequestInfo(
7777
normalizeBranch(environment.get(BITRISE_GIT_BRANCH_DEST)),
7878
null,
79-
null,
79+
CommitInfo.NOOP,
8080
environment.get(BITRISE_PR_NUMBER));
8181
}
8282

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BuddyInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public PullRequestInfo buildPullRequestInfo() {
6767
return new PullRequestInfo(
6868
normalizeBranch(environment.get(BUDDY_RUN_PR_BASE_BRANCH)),
6969
null,
70-
null,
70+
CommitInfo.NOOP,
7171
environment.get(BUDDY_RUN_PR_NUMBER));
7272
}
7373

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/BuildkiteInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public PullRequestInfo buildPullRequestInfo() {
8585
return new PullRequestInfo(
8686
normalizeBranch(environment.get(BUILDKITE_PULL_REQUEST_BASE_BRANCH)),
8787
null,
88-
null,
88+
CommitInfo.NOOP,
8989
environment.get(BUILDKITE_PULL_REQUEST_NUMBER));
9090
}
9191
return PullRequestInfo.EMPTY;

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CITagsProvider.java

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,13 @@ public Map<String, String> getCiTags(CIInfo ciInfo, PullRequestInfo pullRequestI
4242
.withPullRequestBaseBranch(pullRequestInfo)
4343
.withPullRequestBaseBranchSha(pullRequestInfo)
4444
.withGitCommitHeadSha(pullRequestInfo)
45+
.withGitCommitHeadAuthorName(pullRequestInfo)
46+
.withGitCommitHeadAuthorEmail(pullRequestInfo)
47+
.withGitCommitHeadAuthorDate(pullRequestInfo)
48+
.withGitCommitHeadCommitterName(pullRequestInfo)
49+
.withGitCommitHeadCommitterEmail(pullRequestInfo)
50+
.withGitCommitHeadCommitterDate(pullRequestInfo)
51+
.withGitCommitHeadMessage(pullRequestInfo)
4552
.withPullRequestNumber(pullRequestInfo)
4653
.withGitRepositoryUrl(gitInfo)
4754
.withGitCommit(gitInfo)
@@ -133,7 +140,48 @@ public CITagsBuilder withPullRequestBaseBranchSha(final PullRequestInfo pullRequ
133140
}
134141

135142
public CITagsBuilder withGitCommitHeadSha(final PullRequestInfo pullRequestInfo) {
136-
return putTagValue(Tags.GIT_COMMIT_HEAD_SHA, pullRequestInfo.getGitCommitHeadSha());
143+
return putTagValue(Tags.GIT_COMMIT_HEAD_SHA, pullRequestInfo.getGitCommitHead().getSha());
144+
}
145+
146+
public CITagsBuilder withGitCommitHeadAuthorName(final PullRequestInfo pullRequestInfo) {
147+
return putTagValue(
148+
Tags.GIT_COMMIT_HEAD_AUTHOR_NAME,
149+
pullRequestInfo.getGitCommitHead().getAuthor().getName());
150+
}
151+
152+
public CITagsBuilder withGitCommitHeadAuthorEmail(final PullRequestInfo pullRequestInfo) {
153+
return putTagValue(
154+
Tags.GIT_COMMIT_HEAD_AUTHOR_EMAIL,
155+
pullRequestInfo.getGitCommitHead().getAuthor().getEmail());
156+
}
157+
158+
public CITagsBuilder withGitCommitHeadAuthorDate(final PullRequestInfo pullRequestInfo) {
159+
return putTagValue(
160+
Tags.GIT_COMMIT_HEAD_AUTHOR_DATE,
161+
pullRequestInfo.getGitCommitHead().getAuthor().getIso8601Date());
162+
}
163+
164+
public CITagsBuilder withGitCommitHeadCommitterName(final PullRequestInfo pullRequestInfo) {
165+
return putTagValue(
166+
Tags.GIT_COMMIT_HEAD_COMMITTER_NAME,
167+
pullRequestInfo.getGitCommitHead().getCommitter().getName());
168+
}
169+
170+
public CITagsBuilder withGitCommitHeadCommitterEmail(final PullRequestInfo pullRequestInfo) {
171+
return putTagValue(
172+
Tags.GIT_COMMIT_HEAD_COMMITTER_EMAIL,
173+
pullRequestInfo.getGitCommitHead().getCommitter().getEmail());
174+
}
175+
176+
public CITagsBuilder withGitCommitHeadCommitterDate(final PullRequestInfo pullRequestInfo) {
177+
return putTagValue(
178+
Tags.GIT_COMMIT_HEAD_COMMITTER_DATE,
179+
pullRequestInfo.getGitCommitHead().getCommitter().getIso8601Date());
180+
}
181+
182+
public CITagsBuilder withGitCommitHeadMessage(final PullRequestInfo pullRequestInfo) {
183+
return putTagValue(
184+
Tags.GIT_COMMIT_HEAD_MESSAGE, pullRequestInfo.getGitCommitHead().getFullMessage());
137185
}
138186

139187
public CITagsBuilder withPullRequestNumber(final PullRequestInfo pullRequestInfo) {

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CircleCIInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public CIInfo buildCIInfo() {
6161
@Nonnull
6262
@Override
6363
public PullRequestInfo buildPullRequestInfo() {
64-
return new PullRequestInfo(null, null, null, environment.get(CIRCLECI_PR_NUMBER));
64+
return new PullRequestInfo(null, null, CommitInfo.NOOP, environment.get(CIRCLECI_PR_NUMBER));
6565
}
6666

6767
private String buildPipelineUrl(final String pipelineId) {

0 commit comments

Comments
 (0)