diff --git a/instrumentation/jms-1.1/javaagent-unit-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/MessageWithDestinationTest.java b/instrumentation/jms-1.1/javaagent-unit-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/MessageWithDestinationTest.java index c0bd6c22d3..095b4dc7d5 100644 --- a/instrumentation/jms-1.1/javaagent-unit-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/MessageWithDestinationTest.java +++ b/instrumentation/jms-1.1/javaagent-unit-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/MessageWithDestinationTest.java @@ -20,6 +20,7 @@ import javax.jms.Queue; import javax.jms.TemporaryQueue; import javax.jms.TemporaryTopic; import javax.jms.Topic; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; @@ -38,6 +39,12 @@ class MessageWithDestinationTest { @Mock Queue queue; @Mock TemporaryQueue temporaryQueue; @Mock Destination destination; + @Mock Timer timer; + + @BeforeEach + void setUp() { + given(timer.startTime()).willReturn(START_TIME); + } @Test void shouldCreateMessageWithUnknownDestination() throws JMSException { @@ -46,16 +53,11 @@ class MessageWithDestinationTest { // when MessageWithDestination result = - MessageWithDestination.create(message, MessageOperation.SEND, null, START_TIME); + MessageWithDestination.create(message, MessageOperation.SEND, null, timer); // then assertMessage( - MessageOperation.SEND, - "unknown", - "unknown", - /* expectedTemporary= */ false, - START_TIME, - result); + MessageOperation.SEND, "unknown", "unknown", /* expectedTemporary= */ false, result); } @Test @@ -65,16 +67,11 @@ class MessageWithDestinationTest { // when MessageWithDestination result = - MessageWithDestination.create(message, MessageOperation.SEND, destination, START_TIME); + MessageWithDestination.create(message, MessageOperation.SEND, destination, timer); // then assertMessage( - MessageOperation.SEND, - "unknown", - "unknown", - /* expectedTemporary= */ false, - START_TIME, - result); + MessageOperation.SEND, "unknown", "unknown", /* expectedTemporary= */ false, result); } @ParameterizedTest @@ -97,16 +94,11 @@ class MessageWithDestinationTest { // when MessageWithDestination result = - MessageWithDestination.create(message, MessageOperation.RECEIVE, null); + MessageWithDestination.create(message, MessageOperation.RECEIVE, null, timer); // then assertMessage( - MessageOperation.RECEIVE, - "queue", - expectedDestinationName, - expectedTemporary, - null, - result); + MessageOperation.RECEIVE, "queue", expectedDestinationName, expectedTemporary, result); } @ParameterizedTest @@ -129,16 +121,11 @@ class MessageWithDestinationTest { // when MessageWithDestination result = - MessageWithDestination.create(message, MessageOperation.RECEIVE, null); + MessageWithDestination.create(message, MessageOperation.RECEIVE, null, timer); // then assertMessage( - MessageOperation.RECEIVE, - "topic", - expectedDestinationName, - expectedTemporary, - null, - result); + MessageOperation.RECEIVE, "topic", expectedDestinationName, expectedTemporary, result); } static Stream destinations() { @@ -154,14 +141,13 @@ class MessageWithDestinationTest { String expectedDestinationKind, String expectedDestinationName, boolean expectedTemporary, - Instant expectedStartTime, MessageWithDestination actual) { - assertSame(message, actual.getMessage()); - assertSame(expectedMessageOperation, actual.getMessageOperation()); - assertEquals(expectedDestinationKind, actual.getDestinationKind()); - assertEquals(expectedDestinationName, actual.getDestinationName()); + assertSame(message, actual.message()); + assertSame(expectedMessageOperation, actual.messageOperation()); + assertEquals(expectedDestinationKind, actual.destinationKind()); + assertEquals(expectedDestinationName, actual.destinationName()); assertEquals(expectedTemporary, actual.isTemporaryDestination()); - assertEquals(expectedStartTime, actual.getStartTime()); + assertEquals(START_TIME, actual.startTime()); } } diff --git a/instrumentation/jms-1.1/javaagent-unit-tests/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/instrumentation/jms-1.1/javaagent-unit-tests/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 0000000000..1f0955d450 --- /dev/null +++ b/instrumentation/jms-1.1/javaagent-unit-tests/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-inline diff --git a/instrumentation/jms-1.1/javaagent/build.gradle.kts b/instrumentation/jms-1.1/javaagent/build.gradle.kts index 7f405eeb47..dfe4cee558 100644 --- a/instrumentation/jms-1.1/javaagent/build.gradle.kts +++ b/instrumentation/jms-1.1/javaagent/build.gradle.kts @@ -38,6 +38,9 @@ tasks { val versions: Map by project dependencies { + compileOnly("com.google.auto.value:auto-value-annotations") + annotationProcessor("com.google.auto.value:auto-value") + compileOnly("javax.jms:jms-api:1.1-rev-1") testImplementation("javax.annotation:javax.annotation-api:1.3.2") diff --git a/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsMessageAttributesExtractor.java b/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsMessageAttributesExtractor.java index 43cf31bba1..12b3e6923a 100644 --- a/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsMessageAttributesExtractor.java +++ b/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsMessageAttributesExtractor.java @@ -25,13 +25,13 @@ public class JmsMessageAttributesExtractor @Nullable @Override protected String destinationKind(MessageWithDestination messageWithDestination) { - return messageWithDestination.getDestinationKind(); + return messageWithDestination.destinationKind(); } @Nullable @Override protected String destination(MessageWithDestination messageWithDestination) { - return messageWithDestination.getDestinationName(); + return messageWithDestination.destinationName(); } @Override @@ -61,7 +61,7 @@ public class JmsMessageAttributesExtractor @Override protected String conversationId(MessageWithDestination messageWithDestination) { try { - return messageWithDestination.getMessage().getJMSCorrelationID(); + return messageWithDestination.message().getJMSCorrelationID(); } catch (JMSException e) { logger.debug("Failure getting JMS correlation id", e); return null; @@ -82,14 +82,14 @@ public class JmsMessageAttributesExtractor @Override protected MessageOperation operation(MessageWithDestination messageWithDestination) { - return messageWithDestination.getMessageOperation(); + return messageWithDestination.messageOperation(); } @Nullable @Override protected String messageId(MessageWithDestination messageWithDestination, Void unused) { try { - return messageWithDestination.getMessage().getJMSMessageID(); + return messageWithDestination.message().getJMSMessageID(); } catch (JMSException e) { logger.debug("Failure getting JMS message id", e); return null; diff --git a/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsMessageConsumerInstrumentation.java b/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsMessageConsumerInstrumentation.java index 3bf46c3ba2..b73299c827 100644 --- a/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsMessageConsumerInstrumentation.java +++ b/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsMessageConsumerInstrumentation.java @@ -17,7 +17,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.messaging.MessageOperat import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.instrumentation.api.Java8BytecodeBridge; -import java.time.Instant; import javax.jms.Message; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -49,13 +48,13 @@ public class JmsMessageConsumerInstrumentation implements TypeInstrumentation { public static class ConsumerAdvice { @Advice.OnMethodEnter - public static Instant onEnter() { - return Instant.now(); + public static Timer onEnter() { + return Timer.start(); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void stopSpan( - @Advice.Enter Instant startTime, + @Advice.Enter Timer timer, @Advice.Return Message message, @Advice.Thrown Throwable throwable) { if (message == null) { @@ -65,7 +64,7 @@ public class JmsMessageConsumerInstrumentation implements TypeInstrumentation { Context parentContext = Java8BytecodeBridge.currentContext(); MessageWithDestination request = - MessageWithDestination.create(message, MessageOperation.RECEIVE, null, startTime); + MessageWithDestination.create(message, MessageOperation.RECEIVE, null, timer); if (consumerInstrumenter().shouldStart(parentContext, request)) { Context context = consumerInstrumenter().start(parentContext, request); diff --git a/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsSingletons.java b/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsSingletons.java index f4caa86818..3a92f9957b 100644 --- a/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsSingletons.java +++ b/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsSingletons.java @@ -11,7 +11,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.messaging.MessagingSpanNameExtractor; -import java.time.Instant; public final class JmsSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.jms-1.1"; @@ -37,7 +36,7 @@ public final class JmsSingletons { otel, INSTRUMENTATION_NAME, spanNameExtractor) .addAttributesExtractor(attributesExtractor) .setTimeExtractors( - MessageWithDestination::getStartTime, (request, response) -> Instant.now()) + MessageWithDestination::startTime, (request, response) -> request.endTime()) .newInstrumenter(SpanKindExtractor.alwaysConsumer()); LISTENER_INSTRUMENTER = Instrumenter.newBuilder( diff --git a/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/MessagePropertyGetter.java b/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/MessagePropertyGetter.java index 0de77cd503..1a4fc53e7d 100644 --- a/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/MessagePropertyGetter.java +++ b/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/MessagePropertyGetter.java @@ -14,7 +14,7 @@ public final class MessagePropertyGetter implements TextMapGetter keys(MessageWithDestination message) { try { - return Collections.list(message.getMessage().getPropertyNames()); + return Collections.list(message.message().getPropertyNames()); } catch (JMSException e) { return Collections.emptyList(); } @@ -25,7 +25,7 @@ public final class MessagePropertyGetter implements TextMapGetter