Skip to content

Commit 3c28831

Browse files
authored
Merge branch 'master' into bdu/custom-auto-version
2 parents f937869 + 5895e91 commit 3c28831

File tree

28 files changed

+367
-255
lines changed

28 files changed

+367
-255
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ plugins {
1212
id("io.github.gradle-nexus.publish-plugin") version "2.0.0"
1313

1414
id("com.gradleup.shadow") version "8.3.6" apply false
15-
id("me.champeau.jmh") version "0.7.0" apply false
15+
id("me.champeau.jmh") version "0.7.3" apply false
1616
id("org.gradle.playframework") version "0.13" apply false
1717
id("info.solidsoft.pitest") version "1.9.11" apply false
1818
}

dd-java-agent/agent-bootstrap/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ idea {
6363
}
6464

6565
jmh {
66-
jmhVersion = '1.32'
66+
jmhVersion = libs.versions.jmh.get()
6767
duplicateClassesStrategy = DuplicatesStrategy.EXCLUDE
6868
}
6969

dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/util/WellKnownClasses.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ public class WellKnownClasses {
107107
"java.time.LocalDate",
108108
"java.time.LocalDateTime",
109109
"java.util.UUID",
110+
"java.net.URI",
110111
"java.io.File",
111112
"sun.nio.fs.UnixPath",
112113
"sun.nio.fs.WindowsPath"));

dd-java-agent/agent-debugger/debugger-el/src/main/java/com/datadog/debugger/el/expressions/SubStringExpression.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,29 @@ public SubStringExpression(ValueExpression<?> source, int startIndex, int endInd
2020
@Override
2121
public Value<String> evaluate(ValueReferenceResolver valueRefResolver) {
2222
Value<?> sourceValue = source != null ? source.evaluate(valueRefResolver) : Value.nullValue();
23+
if (sourceValue.isUndefined()) {
24+
throw new EvaluationException(
25+
"Cannot evaluate the expression for undefined value", PrettyPrintVisitor.print(this));
26+
}
27+
if (sourceValue.isNull()) {
28+
throw new EvaluationException(
29+
"Cannot evaluate the expression for null value", PrettyPrintVisitor.print(this));
30+
}
2331
if (sourceValue.getValue() instanceof String) {
2432
String sourceStr = (String) sourceValue.getValue();
25-
try {
26-
return (Value<String>) Value.of(sourceStr.substring(startIndex, endIndex));
27-
} catch (StringIndexOutOfBoundsException ex) {
28-
throw new EvaluationException(ex.getMessage(), PrettyPrintVisitor.print(this), ex);
29-
}
33+
return internalEvaluate(sourceStr);
3034
}
3135
return Value.undefined();
3236
}
3337

38+
private Value<String> internalEvaluate(String sourceStr) {
39+
try {
40+
return (Value<String>) Value.of(sourceStr.substring(startIndex, endIndex));
41+
} catch (StringIndexOutOfBoundsException ex) {
42+
throw new EvaluationException(ex.getMessage(), PrettyPrintVisitor.print(this), ex);
43+
}
44+
}
45+
3446
@Override
3547
public <R> R accept(Visitor<R> visitor) {
3648
return visitor.visit(this);

dd-java-agent/agent-debugger/debugger-el/src/test/java/com/datadog/debugger/el/expressions/EndsWithExpressionTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,13 @@
1212
import com.datadog.debugger.el.values.StringValue;
1313
import datadog.trace.bootstrap.debugger.el.ValueReferenceResolver;
1414
import datadog.trace.bootstrap.debugger.el.Values;
15+
import java.net.URI;
1516
import org.junit.jupiter.api.Test;
1617

1718
class EndsWithExpressionTest {
1819
private final ValueReferenceResolver resolver = RefResolverHelper.createResolver(this);
20+
// used to ref lookup
21+
URI uri = URI.create("https://www.datadoghq.com");
1922

2023
@Test
2124
void nullExpression() {
@@ -46,4 +49,11 @@ void stringExpression() {
4649
assertFalse(expression.evaluate(resolver));
4750
assertEquals("endsWith(\"abc\", \"ab\")", print(expression));
4851
}
52+
53+
@Test
54+
void stringPrimitives() {
55+
EndsWithExpression expression = new EndsWithExpression(DSL.ref("uri"), new StringValue(".com"));
56+
assertTrue(expression.evaluate(resolver));
57+
assertEquals("endsWith(uri, \".com\")", print(expression));
58+
}
4959
}

dd-java-agent/agent-debugger/debugger-el/src/test/java/com/datadog/debugger/el/expressions/MatchesExpressionTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@
99
import com.datadog.debugger.el.values.StringValue;
1010
import datadog.trace.bootstrap.debugger.el.ValueReferenceResolver;
1111
import datadog.trace.bootstrap.debugger.el.Values;
12+
import java.net.URI;
1213
import org.junit.jupiter.api.Test;
1314

1415
class MatchesExpressionTest {
1516
private final ValueReferenceResolver resolver = RefResolverHelper.createResolver(this);
17+
// used to ref lookup
18+
URI uri = URI.create("https://www.datadoghq.com");
1619

1720
@Test
1821
void nullExpression() {
@@ -49,4 +52,12 @@ void stringExpression() {
4952
assertFalse(expression.evaluate(resolver));
5053
assertEquals("matches(\"abc\", \"[def]+\")", print(expression));
5154
}
55+
56+
@Test
57+
void stringPrimitives() {
58+
MatchesExpression expression =
59+
new MatchesExpression(DSL.ref("uri"), new StringValue("^https?://w{3}\\.datadoghq\\.com$"));
60+
assertTrue(expression.evaluate(resolver));
61+
assertEquals("matches(uri, \"^https?://w{3}\\.datadoghq\\.com$\")", print(expression));
62+
}
5263
}

dd-java-agent/agent-debugger/debugger-el/src/test/java/com/datadog/debugger/el/expressions/StartsWithExpressionTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@
99
import com.datadog.debugger.el.values.StringValue;
1010
import datadog.trace.bootstrap.debugger.el.ValueReferenceResolver;
1111
import datadog.trace.bootstrap.debugger.el.Values;
12+
import java.net.URI;
1213
import org.junit.jupiter.api.Test;
1314

1415
class StartsWithExpressionTest {
1516
private final ValueReferenceResolver resolver = RefResolverHelper.createResolver(this);
17+
// used to ref lookup
18+
URI uri = URI.create("https://www.datadoghq.com");
1619

1720
@Test
1821
void nullExpression() {
@@ -44,4 +47,12 @@ void stringExpression() {
4447
assertFalse(expression.evaluate(resolver));
4548
assertEquals("startsWith(\"abc\", \"bc\")", print(expression));
4649
}
50+
51+
@Test
52+
void stringPrimitives() {
53+
StartsWithExpression expression =
54+
new StartsWithExpression(DSL.ref("uri"), new StringValue("https"));
55+
assertTrue(expression.evaluate(resolver));
56+
assertEquals("startsWith(uri, \"https\")", print(expression));
57+
}
4758
}

dd-java-agent/agent-debugger/debugger-el/src/test/java/com/datadog/debugger/el/expressions/SubStringExpressionTest.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,40 @@
33
import static com.datadog.debugger.el.PrettyPrintVisitor.print;
44
import static org.junit.jupiter.api.Assertions.assertEquals;
55
import static org.junit.jupiter.api.Assertions.assertThrows;
6-
import static org.junit.jupiter.api.Assertions.assertTrue;
76

87
import com.datadog.debugger.el.DSL;
98
import com.datadog.debugger.el.EvaluationException;
109
import com.datadog.debugger.el.RefResolverHelper;
1110
import datadog.trace.bootstrap.debugger.el.ValueReferenceResolver;
1211
import datadog.trace.bootstrap.debugger.el.Values;
12+
import java.net.URI;
1313
import org.junit.jupiter.api.Test;
1414

1515
public class SubStringExpressionTest {
1616
private final ValueReferenceResolver resolver = RefResolverHelper.createResolver(this);
17+
// used to ref lookup
18+
URI uri = URI.create("https://www.datadoghq.com");
19+
Object nullValue = null;
1720

1821
@Test
1922
void nullExpression() {
20-
SubStringExpression expression = new SubStringExpression(null, 0, 0);
21-
assertTrue(expression.evaluate(resolver).isUndefined());
22-
assertEquals("substring(null, 0, 0)", print(expression));
23+
SubStringExpression expression1 = new SubStringExpression(null, 0, 0);
24+
EvaluationException evaluationException =
25+
assertThrows(EvaluationException.class, () -> expression1.evaluate(resolver));
26+
assertEquals("substring(null, 0, 0)", evaluationException.getExpr());
27+
SubStringExpression expression2 = new SubStringExpression(DSL.ref("nullValue"), 0, 0);
28+
evaluationException =
29+
assertThrows(EvaluationException.class, () -> expression2.evaluate(resolver));
30+
assertEquals("substring(nullValue, 0, 0)", evaluationException.getExpr());
2331
}
2432

2533
@Test
2634
void undefinedExpression() {
2735
SubStringExpression expression =
2836
new SubStringExpression(DSL.value(Values.UNDEFINED_OBJECT), 0, 0);
29-
assertTrue(expression.evaluate(resolver).isUndefined());
30-
assertEquals("substring(UNDEFINED, 0, 0)", print(expression));
37+
EvaluationException evaluationException =
38+
assertThrows(EvaluationException.class, () -> expression.evaluate(resolver));
39+
assertEquals("substring(UNDEFINED, 0, 0)", evaluationException.getExpr());
3140
}
3241

3342
@Test
@@ -44,4 +53,11 @@ void stringOutOfBoundsExpression() {
4453
assertThrows(EvaluationException.class, () -> expression.evaluate(resolver));
4554
assertEquals("substring(\"abc\", 0, 10)", evaluationException.getExpr());
4655
}
56+
57+
@Test
58+
void stringPrimitives() {
59+
SubStringExpression expression = new SubStringExpression(DSL.ref("uri"), 0, 5);
60+
assertEquals("https", expression.evaluate(resolver).getValue());
61+
assertEquals("substring(uri, 0, 5)", print(expression));
62+
}
4763
}

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/sink/DebuggerSink.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ public class DebuggerSink {
2323
private static final long LOW_RATE_INITIAL_FLUSH_INTERVAL = 1000;
2424
static final long LOW_RATE_STEP_SIZE = 200;
2525
private static final String PREFIX = "debugger.sink.";
26+
private static final String DROPPED_REQ_METRIC = PREFIX + "dropped.requests";
27+
private static final String UPLOAD_REMAINING_CAP_METRIC =
28+
PREFIX + "upload.queue.remaining.capacity";
29+
private static final String CURRENT_FLUSH_INTERVAL_METRIC = PREFIX + "current.flush.interval";
30+
private static final String SKIP_METRIC = PREFIX + "skip";
2631

2732
private final ProbeStatusSink probeStatusSink;
2833
private final SnapshotSink snapshotSink;
@@ -109,7 +114,7 @@ public SymbolSink getSymbolSink() {
109114
public void addSnapshot(Snapshot snapshot) {
110115
boolean added = snapshotSink.addLowRate(snapshot);
111116
if (!added) {
112-
debuggerMetrics.count(PREFIX + "dropped.requests", 1);
117+
debuggerMetrics.count(DROPPED_REQ_METRIC, 1);
113118
} else {
114119
probeStatusSink.addEmitting(snapshot.getProbe().getProbeId());
115120
}
@@ -120,7 +125,7 @@ public void addHighRateSnapshot(Snapshot snapshot) {
120125
if (!added) {
121126
long dropped = highRateDropped.incrementAndGet();
122127
if (dropped % 100 == 0) {
123-
debuggerMetrics.count(PREFIX + "dropped.requests", 100);
128+
debuggerMetrics.count(DROPPED_REQ_METRIC, 100);
124129
}
125130
} else {
126131
probeStatusSink.addEmitting(snapshot.getProbe().getProbeId());
@@ -151,9 +156,8 @@ void lowRateFlush(DebuggerSink ignored) {
151156
}
152157

153158
private void reconsiderLowRateFlushInterval(DebuggerSink debuggerSink) {
154-
debuggerMetrics.histogram(
155-
PREFIX + "upload.queue.remaining.capacity", snapshotSink.remainingCapacity());
156-
debuggerMetrics.histogram(PREFIX + "current.flush.interval", currentLowRateFlushInterval);
159+
debuggerMetrics.histogram(UPLOAD_REMAINING_CAP_METRIC, snapshotSink.remainingCapacity());
160+
debuggerMetrics.histogram(CURRENT_FLUSH_INTERVAL_METRIC, currentLowRateFlushInterval);
157161
doReconsiderLowRateFlushInterval();
158162
}
159163

@@ -225,7 +229,7 @@ private void reportError(ProbeId probeId, DiagnosticMessage msg) {
225229

226230
/** Notifies the snapshot was skipped for one of the SkipCause reason */
227231
public void skipSnapshot(String probeId, SkipCause cause) {
228-
debuggerMetrics.incrementCounter(PREFIX + "skip", cause.tag(), "probe_id:" + probeId);
232+
debuggerMetrics.incrementCounter(SKIP_METRIC, cause.tag(), "probe_id:" + probeId);
229233
}
230234

231235
long getCurrentLowRateFlushInterval() {

dd-java-agent/agent-iast/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ spotless {
112112
}
113113

114114
jmh {
115-
jmhVersion = '1.28'
115+
jmhVersion = libs.versions.jmh.get()
116116
duplicateClassesStrategy = DuplicatesStrategy.EXCLUDE
117117
}
118118

0 commit comments

Comments
 (0)