diff --git a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/TrackingSpanDecorator.groovy b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/TrackingSpanDecorator.groovy index 7db4f70a272..af967aff6e2 100644 --- a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/TrackingSpanDecorator.groovy +++ b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/TrackingSpanDecorator.groovy @@ -179,6 +179,11 @@ class TrackingSpanDecorator implements AgentSpan { return delegate.setMetric(key, value) } + @Override + AgentSpan setMetric(CharSequence key, float value) { + return delegate.setMetric(key, value) + } + @Override AgentSpan setMetric(CharSequence key, long value) { return delegate.setMetric(key, value) diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelSpan.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelSpan.java index a23fdd7a431..57be53ede95 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelSpan.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelSpan.java @@ -214,6 +214,11 @@ public MutableSpan setMetric(final CharSequence metric, final long value) { return delegate.setMetric(metric, value); } + @Override + public MutableSpan setMetric(final CharSequence metric, final float value) { + return delegate.setMetric(metric, value); + } + @Override public MutableSpan setMetric(final CharSequence metric, final double value) { return delegate.setMetric(metric, value); diff --git a/dd-java-agent/instrumentation/opentracing/opentracing-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTSpan.java b/dd-java-agent/instrumentation/opentracing/opentracing-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTSpan.java index 265bd567ac1..9f11f1b21af 100644 --- a/dd-java-agent/instrumentation/opentracing/opentracing-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTSpan.java +++ b/dd-java-agent/instrumentation/opentracing/opentracing-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTSpan.java @@ -62,6 +62,12 @@ public OTSpan setMetric(final CharSequence metric, final long value) { return this; } + @Override + public OTSpan setMetric(final CharSequence metric, final float value) { + delegate.setMetric(metric, value); + return this; + } + @Override public OTSpan setMetric(final CharSequence metric, final double value) { delegate.setMetric(metric, value); diff --git a/dd-java-agent/instrumentation/opentracing/opentracing-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTSpan.java b/dd-java-agent/instrumentation/opentracing/opentracing-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTSpan.java index c833ff64edb..84a8f1ceb24 100644 --- a/dd-java-agent/instrumentation/opentracing/opentracing-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTSpan.java +++ b/dd-java-agent/instrumentation/opentracing/opentracing-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTSpan.java @@ -63,6 +63,12 @@ public OTSpan setMetric(final CharSequence metric, final long value) { return this; } + @Override + public OTSpan setMetric(final CharSequence metric, final float value) { + delegate.setMetric(metric, value); + return this; + } + @Override public OTSpan setMetric(final CharSequence metric, final double value) { delegate.setMetric(metric, value); diff --git a/dd-trace-api/src/main/java/datadog/trace/api/interceptor/MutableSpan.java b/dd-trace-api/src/main/java/datadog/trace/api/interceptor/MutableSpan.java index fe39a22249f..e5ef4cef73c 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/interceptor/MutableSpan.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/interceptor/MutableSpan.java @@ -59,6 +59,8 @@ default Object getTag(String key) { MutableSpan setMetric(final CharSequence metric, final long value); + MutableSpan setMetric(final CharSequence metric, final float value); + MutableSpan setMetric(final CharSequence metric, final double value); boolean isError(); diff --git a/dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java b/dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java index 4a0eb4378b5..1869718d71f 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java @@ -751,6 +751,30 @@ public void setMetric(final CharSequence key, final Number value) { } } + public void setMetric(final CharSequence key, final int value) { + synchronized (unsafeTags) { + unsafeTags.set(key.toString(), value); + } + } + + public void setMetric(final CharSequence key, final long value) { + synchronized (unsafeTags) { + unsafeTags.set(key.toString(), value); + } + } + + public void setMetric(final CharSequence key, final float value) { + synchronized (unsafeTags) { + unsafeTags.set(key.toString(), value); + } + } + + public void setMetric(final CharSequence key, final double value) { + synchronized (unsafeTags) { + unsafeTags.set(key.toString(), value); + } + } + public void setMetric(final TagMap.EntryReader entry) { if (entry == null) { return; diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanContextTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanContextTest.groovy index 1cdaa33d668..3915fdf63f1 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanContextTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanContextTest.groovy @@ -130,7 +130,7 @@ class DDSpanContextTest extends DDCoreSpecification { def context = span.context() when: - context.setMetric("test", value) + context.setMetric("test", (Number)value) then: type.isInstance(context.getTag("test")) diff --git a/dd-trace-core/src/test/java/datadog/trace/core/SpanTest.java b/dd-trace-core/src/test/java/datadog/trace/core/SpanTest.java index cfe345aa6b4..7b3a631eaa9 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/SpanTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/SpanTest.java @@ -1,6 +1,7 @@ package datadog.trace.core; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; import datadog.trace.api.TagMap; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; @@ -10,6 +11,58 @@ public class SpanTest { static final CoreTracer TRACER = CoreTracer.builder().build(); + @Test + @DisplayName("setMetric: int") + public void setMetricInt() { + int expected = 2; + + AgentSpan span = TRACER.startSpan("foo", "foo"); + span.setMetric("int", expected); + + Object value = span.getTag("int"); + assertInstanceOf(Integer.class, value); + assertEquals(Integer.valueOf(expected), value); + } + + @Test + @DisplayName("setMetric: long") + public void setMetricLong() { + long expected = 20L; + + AgentSpan span = TRACER.startSpan("foo", "foo"); + span.setMetric("long", expected); + + Object value = span.getTag("long"); + assertInstanceOf(Long.class, value); + assertEquals(Long.valueOf(expected), value); + } + + @Test + @DisplayName("setMetric: float") + public void setMetricFloat() { + float expected = 2.718F; + + AgentSpan span = TRACER.startSpan("foo", "foo"); + span.setMetric("float", expected); + + Object value = span.getTag("float"); + assertInstanceOf(Float.class, value); + assertEquals(Float.valueOf(expected), value); + } + + @Test + @DisplayName("setMetric: double") + public void setMetricDouble() { + double expected = 3.1415D; + + AgentSpan span = TRACER.startSpan("foo", "foo"); + span.setMetric("double", expected); + + Object value = span.getTag("double"); + assertInstanceOf(Double.class, value); + assertEquals(Double.valueOf(expected), value); + } + @Test @DisplayName("setTag: TagMap.Entry") public void setTagEntry() { diff --git a/dd-trace-ot/src/main/java/datadog/opentracing/OTSpan.java b/dd-trace-ot/src/main/java/datadog/opentracing/OTSpan.java index 6252ee6e712..053dfa50eec 100644 --- a/dd-trace-ot/src/main/java/datadog/opentracing/OTSpan.java +++ b/dd-trace-ot/src/main/java/datadog/opentracing/OTSpan.java @@ -62,6 +62,12 @@ public OTSpan setMetric(final CharSequence metric, final long value) { return this; } + @Override + public OTSpan setMetric(final CharSequence metric, final float value) { + delegate.setMetric(metric, value); + return this; + } + @Override public OTSpan setMetric(final CharSequence metric, final double value) { delegate.setMetric(metric, value); diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpan.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpan.java index 18ba85b0454..f86687a2554 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpan.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpan.java @@ -92,6 +92,9 @@ default boolean isValid() { @Override AgentSpan setMetric(CharSequence key, long value); + @Override + AgentSpan setMetric(CharSequence key, float value); + @Override AgentSpan setMetric(CharSequence key, double value); diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ImmutableSpan.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ImmutableSpan.java index 1f857a6e7df..c71f8b59023 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ImmutableSpan.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ImmutableSpan.java @@ -77,6 +77,11 @@ public AgentSpan setMetric(CharSequence key, long value) { return this; } + @Override + public AgentSpan setMetric(CharSequence key, float value) { + return this; + } + @Override public AgentSpan setMetric(CharSequence key, double value) { return this;