diff --git a/spring-cloud-function-context/.jdk8 b/spring-cloud-function-context/.jdk8 deleted file mode 100644 index e69de29bb..000000000 diff --git a/spring-cloud-function-context/pom.xml b/spring-cloud-function-context/pom.xml index 91e8418a1..a4f0ce8ab 100644 --- a/spring-cloud-function-context/pom.xml +++ b/spring-cloud-function-context/pom.xml @@ -138,12 +138,12 @@ io.micrometer micrometer-core - true + io.micrometer micrometer-tracing-api - true + io.micrometer diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/DefaultFunctionTagsProvider.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/DefaultFunctionTagsProvider.java index 77484de33..ef55ce076 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/DefaultFunctionTagsProvider.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/DefaultFunctionTagsProvider.java @@ -16,7 +16,7 @@ package org.springframework.cloud.function.context.catalog.observability; -import io.micrometer.api.instrument.Tags; +import io.micrometer.core.instrument.Tags; public class DefaultFunctionTagsProvider implements FunctionTagsProvider { @Override diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/FunctionContext.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/FunctionContext.java index 4f663c076..79f4e3ba9 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/FunctionContext.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/FunctionContext.java @@ -16,8 +16,8 @@ package org.springframework.cloud.function.context.catalog.observability; -import io.micrometer.api.instrument.observation.Observation; -import io.micrometer.api.lang.Nullable; +import io.micrometer.core.instrument.observation.Observation; +import io.micrometer.core.lang.Nullable; import org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry; diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/FunctionObservation.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/FunctionObservation.java index 9213f5b36..445ddccb3 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/FunctionObservation.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/FunctionObservation.java @@ -16,18 +16,22 @@ package org.springframework.cloud.function.context.catalog.observability; -import io.micrometer.api.instrument.docs.DocumentedObservation; -import io.micrometer.api.instrument.docs.TagKey; +import io.micrometer.core.instrument.docs.DocumentedObservation; +import io.micrometer.core.instrument.docs.TagKey; +/** + * @author Marcin Grzejszczak + * @author Oleg Zhurakousky + * @since 4.0.0 + */ enum FunctionObservation implements DocumentedObservation { - /** - * Observation created around a function execution + * Observation created around a function execution. */ FUNCTION_OBSERVATION { @Override public String getName() { - return "spring.function"; + return "spring.cloud.function"; } @Override @@ -42,7 +46,7 @@ enum FunctionObservation implements DocumentedObservation { @Override public String getPrefix() { - return "spring.function"; + return "spring.cloud.function"; } }; @@ -54,7 +58,7 @@ enum FunctionObservation implements DocumentedObservation { FUNCTION_NAME { @Override public String getKey() { - return "spring.function.name"; + return "spring.cloud.function.name"; } } diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/FunctionTagsProvider.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/FunctionTagsProvider.java index ffe30acb4..a332526cb 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/FunctionTagsProvider.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/FunctionTagsProvider.java @@ -16,11 +16,11 @@ package org.springframework.cloud.function.context.catalog.observability; -import io.micrometer.api.instrument.observation.Observation; +import io.micrometer.core.instrument.observation.Observation; /** * {@link Observation.TagsProvider} for {@link FunctionContext}. - * + * * @author Marcin Grzejszczak */ public interface FunctionTagsProvider extends Observation.TagsProvider { diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/ObservationFunctionAroundWrapper.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/ObservationFunctionAroundWrapper.java index a965c74da..49b6275cf 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/ObservationFunctionAroundWrapper.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/ObservationFunctionAroundWrapper.java @@ -16,8 +16,8 @@ package org.springframework.cloud.function.context.catalog.observability; -import io.micrometer.api.instrument.observation.Observation; -import io.micrometer.api.instrument.observation.ObservationRegistry; +import io.micrometer.core.instrument.observation.Observation; +import io.micrometer.core.instrument.observation.ObservationRegistry; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.reactivestreams.Publisher; diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/tracing/FunctionTracingObservationHandler.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/tracing/FunctionTracingObservationHandler.java index e3f6800fd..2ec55ddb3 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/tracing/FunctionTracingObservationHandler.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/tracing/FunctionTracingObservationHandler.java @@ -16,11 +16,7 @@ package org.springframework.cloud.function.context.catalog.observability.tracing; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import io.micrometer.api.instrument.observation.Observation; +import io.micrometer.core.instrument.observation.Observation; import io.micrometer.tracing.Span; import io.micrometer.tracing.Tracer; import io.micrometer.tracing.handler.TracingObservationHandler; @@ -30,6 +26,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry; import org.springframework.cloud.function.context.catalog.observability.FunctionContext; +import org.springframework.cloud.function.context.message.MessageUtils; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.MessagingException; @@ -37,11 +34,13 @@ import org.springframework.messaging.support.ErrorMessage; import org.springframework.messaging.support.GenericMessage; import org.springframework.messaging.support.MessageBuilder; import org.springframework.messaging.support.MessageHeaderAccessor; +import org.springframework.util.StringUtils; /** * Function Tracing Observation Handler. * * @author Marcin Grzejszczak + * @author Oleg Zhurakousky * @since 4.0.0 */ public class FunctionTracingObservationHandler implements TracingObservationHandler { @@ -208,7 +207,7 @@ public class FunctionTracingObservationHandler implements TracingObservationHand } private void clearTracingHeaders(MessageHeaderAccessor headers) { - MessageHeaderPropagatorSetter.removeAnyTraceHeaders(headers, this.propagator.fields()); + MessageHeaderPropagatorSetter.removeHeaders(headers, this.propagator.fields()); } /** @@ -250,22 +249,26 @@ public class FunctionTracingObservationHandler implements TracingObservationHand } private String toRemoteServiceName(MessageHeaderAccessor headers) { - for (String key : headers.getMessageHeaders().keySet()) { - if (key.startsWith("kafka_")) { - return "kafka"; - } - else if (key.startsWith("amqp_")) { - return "rabbitmq"; - } +// for (String key : headers.getMessageHeaders().keySet()) { +// if (key.startsWith("kafka_")) { +// return "kafka"; +// } +// else if (key.startsWith("amqp_")) { +// return "rabbitmq"; +// } +// } + String serviceName = (String) headers.getHeader(MessageUtils.TARGET_PROTOCOL); + if (!StringUtils.hasLength(serviceName)) { + serviceName = REMOTE_SERVICE_NAME; } - return REMOTE_SERVICE_NAME; + return serviceName; } private Message outputMessage(Message originalMessage, Message retrievedMessage, MessageHeaderAccessor additionalHeaders) { MessageHeaderAccessor headers = mutableHeaderAccessor(originalMessage); if (originalMessage instanceof ErrorMessage errorMessage) { - headers.copyHeaders(MessageHeaderPropagatorSetter.propagationHeaders(additionalHeaders.getMessageHeaders(), + headers.copyHeaders(MessageHeaderPropagatorSetter.copyHeaders(additionalHeaders.getMessageHeaders(), this.propagator.fields())); return new ErrorMessage(errorMessage.getPayload(), isWebSockets(headers) ? headers.getMessageHeaders() : new MessageHeaders(headers.getMessageHeaders()), errorMessage.getOriginalMessage()); diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/tracing/MessageHeaderPropagatorSetter.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/tracing/MessageHeaderPropagatorSetter.java index 7fc434855..f37d0fba6 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/tracing/MessageHeaderPropagatorSetter.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/observability/tracing/MessageHeaderPropagatorSetter.java @@ -32,27 +32,28 @@ import org.springframework.util.LinkedMultiValueMap; /** * Setter for Spring Integration based communication. * - * This always sets native headers in defence of STOMP issues discussed here. * * @author Marcin Grzejszczak + * @author Oleg Zhurakousky * @since 4.0.0 */ public class MessageHeaderPropagatorSetter implements Propagator.Setter { private static final Log log = LogFactory.getLog(MessageHeaderPropagatorSetter.class); - static Map propagationHeaders(Map headers, List propagationHeaders) { - Map headersToCopy = new HashMap<>(); + static Map copyHeaders(Map headers, List headersToCopy) { + Map copiedHeaders = new HashMap<>(); for (Map.Entry entry : headers.entrySet()) { - if (propagationHeaders.contains(entry.getKey())) { - headersToCopy.put(entry.getKey(), entry.getValue()); + if (headersToCopy.contains(entry.getKey())) { + copiedHeaders.put(entry.getKey(), entry.getValue()); } } - return headersToCopy; + return copiedHeaders; } - static void removeAnyTraceHeaders(MessageHeaderAccessor accessor, List keysToRemove) { + static void removeHeaders(MessageHeaderAccessor accessor, List keysToRemove) { for (String keyToRemove : keysToRemove) { accessor.removeHeader(keyToRemove); if (accessor instanceof NativeMessageHeaderAccessor) { @@ -85,7 +86,6 @@ public class MessageHeaderPropagatorSetter implements Propagator.Setter> nativeHeaderMap = nativeAccessor.toNativeHeaderMap(); nativeHeaderMap = nativeHeaderMap instanceof LinkedMultiValueMap ? nativeHeaderMap : new LinkedMultiValueMap<>(nativeHeaderMap); - nativeAccessor.removeHeader(NativeMessageHeaderAccessor.NATIVE_HEADERS); nativeAccessor.setHeader(NativeMessageHeaderAccessor.NATIVE_HEADERS, nativeHeaderMap); return nativeAccessor; } diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/observability/ObservationFunctionAroundWrapperIntegrationTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/observability/ObservationFunctionAroundWrapperIntegrationTests.java index dbd37118a..5dda6680d 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/observability/ObservationFunctionAroundWrapperIntegrationTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/observability/ObservationFunctionAroundWrapperIntegrationTests.java @@ -23,8 +23,8 @@ import java.util.function.BiConsumer; import java.util.function.Function; import com.fasterxml.jackson.databind.ObjectMapper; -import io.micrometer.api.instrument.observation.ObservationHandler; -import io.micrometer.api.instrument.simple.SimpleMeterRegistry; +import io.micrometer.core.instrument.observation.ObservationHandler; +import io.micrometer.core.instrument.simple.SimpleMeterRegistry; import io.micrometer.tracing.Span; import io.micrometer.tracing.TraceContext; import io.micrometer.tracing.Tracer;