Skip to content

Commit ed2994b

Browse files
authored
Merge branch 'master' into vandonr/proto
2 parents 26ec585 + e0242cf commit ed2994b

File tree

229 files changed

+23404
-2483
lines changed

Some content is hidden

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

229 files changed

+23404
-2483
lines changed

.github/CODEOWNERS

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,10 @@ dd-java-agent/instrumentation/spring-security-5/ @DataDog/asm-java
5757
**/Iast*.java @DataDog/asm-java
5858
**/Iast*.groovy @DataDog/asm-java
5959
**/rasp/ @Datadog/asm-java
60-
**/*Rasp*.java @DataDog/asm-java
61-
**/*Rasp*.groovy @DataDog/asm-java
60+
**/*Rasp*.java @DataDog/asm-java
61+
**/*Rasp*.groovy @DataDog/asm-java
62+
**/*Waf*.java @DataDog/asm-java
63+
**/*Waf*.groovy @DataDog/asm-java
6264

6365
# @DataDog/data-jobs-monitoring
6466
dd-java-agent/instrumentation/spark/ @DataDog/data-jobs-monitoring

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,9 @@ public CiVisibilitySettings fromJson(Map<String, Object> json) {
142142
getBoolean(json, "flaky_test_retries_enabled", false),
143143
getBoolean(json, "impacted_tests_enabled", false),
144144
getBoolean(json, "known_tests_enabled", false),
145-
EarlyFlakeDetectionSettingsJsonAdapter.INSTANCE.fromJson(
145+
EarlyFlakeDetectionSettings.JsonAdapter.INSTANCE.fromJson(
146146
(Map<String, Object>) json.get("early_flake_detection")),
147-
TestManagementSettingsJsonAdapter.INSTANCE.fromJson(
147+
TestManagementSettings.JsonAdapter.INSTANCE.fromJson(
148148
(Map<String, Object>) json.get("test_management")));
149149
}
150150

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public ConfigurationApiImpl(BackendApi backendApi, CiVisibilityMetricCollector m
8484
new Moshi.Builder()
8585
.add(ConfigurationsJsonAdapter.INSTANCE)
8686
.add(CiVisibilitySettings.JsonAdapter.INSTANCE)
87-
.add(EarlyFlakeDetectionSettingsJsonAdapter.INSTANCE)
87+
.add(EarlyFlakeDetectionSettings.JsonAdapter.INSTANCE)
8888
.add(MetaDtoJsonAdapter.INSTANCE)
8989
.build();
9090

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

Lines changed: 75 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
package datadog.trace.civisibility.config;
22

3+
import com.squareup.moshi.FromJson;
4+
import java.nio.ByteBuffer;
5+
import java.util.ArrayList;
36
import java.util.Collections;
7+
import java.util.Comparator;
48
import java.util.List;
9+
import java.util.Map;
510
import java.util.Objects;
11+
import java.util.concurrent.TimeUnit;
612

713
public class EarlyFlakeDetectionSettings {
814

@@ -34,15 +40,6 @@ public List<ExecutionsByDuration> getExecutionsByDuration() {
3440
return executionsByDuration;
3541
}
3642

37-
public int getExecutions(long durationMillis) {
38-
for (ExecutionsByDuration e : executionsByDuration) {
39-
if (durationMillis <= e.durationMillis) {
40-
return e.executions;
41-
}
42-
}
43-
return 0;
44-
}
45-
4643
@Override
4744
public boolean equals(Object o) {
4845
if (this == o) {
@@ -62,38 +59,84 @@ public int hashCode() {
6259
return Objects.hash(enabled, executionsByDuration, faultySessionThreshold);
6360
}
6461

65-
public static final class ExecutionsByDuration {
66-
public final long durationMillis;
67-
public final int executions;
68-
69-
public ExecutionsByDuration(long durationMillis, int executions) {
70-
this.durationMillis = durationMillis;
71-
this.executions = executions;
62+
public static final class Serializer {
63+
public static void serialize(
64+
datadog.trace.civisibility.ipc.serialization.Serializer serializer,
65+
EarlyFlakeDetectionSettings settings) {
66+
if (!settings.enabled) {
67+
serializer.write((byte) 0);
68+
return;
69+
}
70+
serializer.write((byte) 1);
71+
serializer.write(settings.faultySessionThreshold);
72+
serializer.write(settings.executionsByDuration, ExecutionsByDuration.Serializer::serialize);
7273
}
7374

74-
public long getDurationMillis() {
75-
return durationMillis;
76-
}
75+
public static EarlyFlakeDetectionSettings deserialize(ByteBuffer buf) {
76+
boolean enabled = datadog.trace.civisibility.ipc.serialization.Serializer.readByte(buf) != 0;
77+
if (!enabled) {
78+
return EarlyFlakeDetectionSettings.DEFAULT;
79+
}
7780

78-
public int getExecutions() {
79-
return executions;
81+
int faultySessionThreshold =
82+
datadog.trace.civisibility.ipc.serialization.Serializer.readInt(buf);
83+
List<ExecutionsByDuration> executionsByDuration =
84+
datadog.trace.civisibility.ipc.serialization.Serializer.readList(
85+
buf, ExecutionsByDuration.Serializer::deserialize);
86+
return new EarlyFlakeDetectionSettings(enabled, executionsByDuration, faultySessionThreshold);
8087
}
88+
}
89+
90+
public static final class JsonAdapter {
91+
public static final JsonAdapter INSTANCE = new JsonAdapter();
8192

82-
@Override
83-
public boolean equals(Object o) {
84-
if (this == o) {
85-
return true;
93+
@FromJson
94+
public EarlyFlakeDetectionSettings fromJson(Map<String, Object> json) {
95+
if (json == null) {
96+
return EarlyFlakeDetectionSettings.DEFAULT;
8697
}
87-
if (o == null || getClass() != o.getClass()) {
88-
return false;
98+
99+
Boolean enabled = (Boolean) json.get("enabled");
100+
Double faultySessionThreshold = (Double) json.get("faulty_session_threshold");
101+
102+
List<ExecutionsByDuration> executionsByDuration;
103+
Map<String, Double> slowTestRetries = (Map<String, Double>) json.get("slow_test_retries");
104+
if (slowTestRetries != null) {
105+
executionsByDuration = new ArrayList<>(slowTestRetries.size());
106+
for (Map.Entry<String, Double> e : slowTestRetries.entrySet()) {
107+
long durationMillis = parseDuration(e.getKey());
108+
int retries = e.getValue().intValue();
109+
executionsByDuration.add(new ExecutionsByDuration(durationMillis, retries));
110+
}
111+
executionsByDuration.sort(Comparator.comparingLong(r -> r.durationMillis));
112+
} else {
113+
executionsByDuration = Collections.emptyList();
89114
}
90-
ExecutionsByDuration that = (ExecutionsByDuration) o;
91-
return durationMillis == that.durationMillis && executions == that.executions;
115+
116+
return new EarlyFlakeDetectionSettings(
117+
enabled != null ? enabled : false,
118+
executionsByDuration,
119+
faultySessionThreshold != null ? faultySessionThreshold.intValue() : -1);
92120
}
93121

94-
@Override
95-
public int hashCode() {
96-
return Objects.hash(durationMillis, executions);
122+
private static long parseDuration(String duration) {
123+
char lastCharacter = duration.charAt(duration.length() - 1);
124+
int numericValue = Integer.parseInt(duration.substring(0, duration.length() - 1));
125+
TimeUnit timeUnit;
126+
switch (lastCharacter) {
127+
case 's':
128+
timeUnit = TimeUnit.SECONDS;
129+
break;
130+
case 'm':
131+
timeUnit = TimeUnit.MINUTES;
132+
break;
133+
case 'h':
134+
timeUnit = TimeUnit.HOURS;
135+
break;
136+
default:
137+
throw new IllegalArgumentException("Unexpected duration unit: " + lastCharacter);
138+
}
139+
return timeUnit.toMillis(numericValue);
97140
}
98141
}
99142
}

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

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

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

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

0 commit comments

Comments
 (0)