Skip to content

Commit fe400cf

Browse files
dougqhmccullsdevflow.devflow-routing-intake
authored
Add primitive versions of setMetric to DDSpanContext (#10516)
Adding primitive versions of setMetric Adding primitive versions of setMetric to take advantage of TagMap, primitive versions already exist on AgentSpan/DDSpan Adding tests Merge branch 'master' into dougqh/avoid-metric-boxing Merge branch 'master' into dougqh/avoid-metric-boxing Adding float support Adding cast to Number Apparently, Groovy does double dynamic dispatch which caused this test to fail now that there are primitive overrides. Adding an explicit cast, so the test only calls setMetric(CharSeq, Number) which still functions the same as it did previously. spotless Merge branch 'master' into dougqh/avoid-metric-boxing Merge branch 'master' into dougqh/avoid-metric-boxing Co-authored-by: mcculls <stuart.mcculloch@datadoghq.com> Co-authored-by: devflow.devflow-routing-intake <devflow.devflow-routing-intake@kubernetes.us1.ddbuild.io>
1 parent a249dd3 commit fe400cf

11 files changed

Lines changed: 116 additions & 1 deletion

File tree

dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/TrackingSpanDecorator.groovy

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,11 @@ class TrackingSpanDecorator implements AgentSpan {
180180
return delegate.setMetric(key, value)
181181
}
182182

183+
@Override
184+
AgentSpan setMetric(CharSequence key, float value) {
185+
return delegate.setMetric(key, value)
186+
}
187+
183188
@Override
184189
AgentSpan setMetric(CharSequence key, long value) {
185190
return delegate.setMetric(key, value)

dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelSpan.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,11 @@ public MutableSpan setMetric(final CharSequence metric, final long value) {
216216
return delegate.setMetric(metric, value);
217217
}
218218

219+
@Override
220+
public MutableSpan setMetric(final CharSequence metric, final float value) {
221+
return delegate.setMetric(metric, value);
222+
}
223+
219224
@Override
220225
public MutableSpan setMetric(final CharSequence metric, final double value) {
221226
return delegate.setMetric(metric, value);

dd-java-agent/instrumentation/opentracing/opentracing-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTSpan.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@ public OTSpan setMetric(final CharSequence metric, final long value) {
6363
return this;
6464
}
6565

66+
@Override
67+
public OTSpan setMetric(final CharSequence metric, final float value) {
68+
delegate.setMetric(metric, value);
69+
return this;
70+
}
71+
6672
@Override
6773
public OTSpan setMetric(final CharSequence metric, final double value) {
6874
delegate.setMetric(metric, value);

dd-java-agent/instrumentation/opentracing/opentracing-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTSpan.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ public OTSpan setMetric(final CharSequence metric, final long value) {
6464
return this;
6565
}
6666

67+
@Override
68+
public OTSpan setMetric(final CharSequence metric, final float value) {
69+
delegate.setMetric(metric, value);
70+
return this;
71+
}
72+
6773
@Override
6874
public OTSpan setMetric(final CharSequence metric, final double value) {
6975
delegate.setMetric(metric, value);

dd-trace-api/src/main/java/datadog/trace/api/interceptor/MutableSpan.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ default Object getTag(String key) {
5959

6060
MutableSpan setMetric(final CharSequence metric, final long value);
6161

62+
MutableSpan setMetric(final CharSequence metric, final float value);
63+
6264
MutableSpan setMetric(final CharSequence metric, final double value);
6365

6466
boolean isError();

dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,30 @@ public void setMetric(final CharSequence key, final Number value) {
728728
}
729729
}
730730

731+
public void setMetric(final CharSequence key, final int value) {
732+
synchronized (unsafeTags) {
733+
unsafeTags.set(key.toString(), value);
734+
}
735+
}
736+
737+
public void setMetric(final CharSequence key, final long value) {
738+
synchronized (unsafeTags) {
739+
unsafeTags.set(key.toString(), value);
740+
}
741+
}
742+
743+
public void setMetric(final CharSequence key, final float value) {
744+
synchronized (unsafeTags) {
745+
unsafeTags.set(key.toString(), value);
746+
}
747+
}
748+
749+
public void setMetric(final CharSequence key, final double value) {
750+
synchronized (unsafeTags) {
751+
unsafeTags.set(key.toString(), value);
752+
}
753+
}
754+
731755
public void setMetric(final TagMap.EntryReader entry) {
732756
if (entry == null) {
733757
return;

dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanContextTest.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ class DDSpanContextTest extends DDCoreSpecification {
130130
def context = span.context()
131131

132132
when:
133-
context.setMetric("test", value)
133+
context.setMetric("test", (Number)value)
134134

135135
then:
136136
type.isInstance(context.getTag("test"))

dd-trace-core/src/test/java/datadog/trace/core/SpanTest.java

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package datadog.trace.core;
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
45

56
import datadog.trace.api.TagMap;
67
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
@@ -10,6 +11,58 @@
1011
public class SpanTest {
1112
static final CoreTracer TRACER = CoreTracer.builder().build();
1213

14+
@Test
15+
@DisplayName("setMetric: int")
16+
public void setMetricInt() {
17+
int expected = 2;
18+
19+
AgentSpan span = TRACER.startSpan("foo", "foo");
20+
span.setMetric("int", expected);
21+
22+
Object value = span.getTag("int");
23+
assertInstanceOf(Integer.class, value);
24+
assertEquals(Integer.valueOf(expected), value);
25+
}
26+
27+
@Test
28+
@DisplayName("setMetric: long")
29+
public void setMetricLong() {
30+
long expected = 20L;
31+
32+
AgentSpan span = TRACER.startSpan("foo", "foo");
33+
span.setMetric("long", expected);
34+
35+
Object value = span.getTag("long");
36+
assertInstanceOf(Long.class, value);
37+
assertEquals(Long.valueOf(expected), value);
38+
}
39+
40+
@Test
41+
@DisplayName("setMetric: float")
42+
public void setMetricFloat() {
43+
float expected = 2.718F;
44+
45+
AgentSpan span = TRACER.startSpan("foo", "foo");
46+
span.setMetric("float", expected);
47+
48+
Object value = span.getTag("float");
49+
assertInstanceOf(Float.class, value);
50+
assertEquals(Float.valueOf(expected), value);
51+
}
52+
53+
@Test
54+
@DisplayName("setMetric: double")
55+
public void setMetricDouble() {
56+
double expected = 3.1415D;
57+
58+
AgentSpan span = TRACER.startSpan("foo", "foo");
59+
span.setMetric("double", expected);
60+
61+
Object value = span.getTag("double");
62+
assertInstanceOf(Double.class, value);
63+
assertEquals(Double.valueOf(expected), value);
64+
}
65+
1366
@Test
1467
@DisplayName("setTag: TagMap.Entry")
1568
public void setTagEntry() {

dd-trace-ot/src/main/java/datadog/opentracing/OTSpan.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ public OTSpan setMetric(final CharSequence metric, final long value) {
6262
return this;
6363
}
6464

65+
@Override
66+
public OTSpan setMetric(final CharSequence metric, final float value) {
67+
delegate.setMetric(metric, value);
68+
return this;
69+
}
70+
6571
@Override
6672
public OTSpan setMetric(final CharSequence metric, final double value) {
6773
delegate.setMetric(metric, value);

internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpan.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ default boolean isValid() {
9292
@Override
9393
AgentSpan setMetric(CharSequence key, long value);
9494

95+
@Override
96+
AgentSpan setMetric(CharSequence key, float value);
97+
9598
@Override
9699
AgentSpan setMetric(CharSequence key, double value);
97100

0 commit comments

Comments
 (0)