From 667b71e073a1704ce8193c7d4d06a17407e49855 Mon Sep 17 00:00:00 2001 From: "Greg L. Turnquist" Date: Thu, 14 Apr 2022 11:24:26 -0500 Subject: [PATCH] Switch to Micrometer 1.10's tracing APIs. Micrometer Tracing 1.10 has some breaking APIs. See #4023. --- ...DefaultMongoHandlerKeyValuesProvider.java} | 38 ++++++++++--------- ...ava => MongoHandlerKeyValuesProvider.java} | 4 +- .../observability/MongoObservation.java | 26 ++++++------- .../MongoObservationCommandListener.java | 12 +++--- ...rvationCommandListenerForTracingTests.java | 10 ++--- .../MongoObservationCommandListenerTests.java | 19 +++++----- 6 files changed, 57 insertions(+), 52 deletions(-) rename spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/{DefaultMongoHandlerTagsProvider.java => DefaultMongoHandlerKeyValuesProvider.java} (51%) rename spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/{MongoHandlerTagsProvider.java => MongoHandlerKeyValuesProvider.java} (83%) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/DefaultMongoHandlerTagsProvider.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/DefaultMongoHandlerKeyValuesProvider.java similarity index 51% rename from spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/DefaultMongoHandlerTagsProvider.java rename to spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/DefaultMongoHandlerKeyValuesProvider.java index 24b30b20f..02267a63e 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/DefaultMongoHandlerTagsProvider.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/DefaultMongoHandlerKeyValuesProvider.java @@ -15,52 +15,56 @@ */ package org.springframework.data.mongodb.observability; -import io.micrometer.common.Tag; -import io.micrometer.common.Tags; +import io.micrometer.common.KeyValue; +import io.micrometer.common.KeyValues; + +import org.springframework.data.mongodb.observability.MongoObservation.HighCardinalityCommandKeyNames; +import org.springframework.data.mongodb.observability.MongoObservation.LowCardinalityCommandKeyNames; import com.mongodb.connection.ConnectionDescription; import com.mongodb.connection.ConnectionId; import com.mongodb.event.CommandStartedEvent; /** - * Default {@link MongoHandlerTagsProvider} implementation. + * Default {@link MongoHandlerKeyValuesProvider} implementation. * * @author Greg Turnquist * @since 4.0.0 */ -public class DefaultMongoHandlerTagsProvider implements MongoHandlerTagsProvider { +public class DefaultMongoHandlerKeyValuesProvider implements MongoHandlerKeyValuesProvider { @Override - public Tags getLowCardinalityTags(MongoHandlerContext context) { + public KeyValues getLowCardinalityKeyValues(MongoHandlerContext context) { - Tags tags = Tags.empty(); + KeyValues keyValues = KeyValues.empty(); if (context.getCollectionName() != null) { - tags = tags.and(MongoObservation.LowCardinalityCommandTags.MONGODB_COLLECTION.of(context.getCollectionName())); + keyValues = keyValues + .and(KeyValue.of(LowCardinalityCommandKeyNames.MONGODB_COLLECTION.getKeyName(), context.getCollectionName())); } - Tag connectionTag = connectionTag(context.getCommandStartedEvent()); + KeyValue connectionTag = connectionTag(context.getCommandStartedEvent()); if (connectionTag != null) { - tags = tags.and(connectionTag); + keyValues = keyValues.and(connectionTag); } - return tags; + return keyValues; } @Override - public Tags getHighCardinalityTags(MongoHandlerContext context) { + public KeyValues getHighCardinalityKeyValues(MongoHandlerContext context) { - return Tags.of(MongoObservation.HighCardinalityCommandTags.MONGODB_COMMAND - .of(context.getCommandStartedEvent().getCommandName())); + return KeyValues.of(KeyValue.of(HighCardinalityCommandKeyNames.MONGODB_COMMAND.getKeyName(), + context.getCommandStartedEvent().getCommandName())); } /** - * Extract connection details for a MongoDB connection into a {@link Tag}. + * Extract connection details for a MongoDB connection into a {@link KeyValue}. * * @param event * @return */ - private static Tag connectionTag(CommandStartedEvent event) { + private static KeyValue connectionTag(CommandStartedEvent event) { ConnectionDescription connectionDescription = event.getConnectionDescription(); @@ -68,8 +72,8 @@ public class DefaultMongoHandlerTagsProvider implements MongoHandlerTagsProvider ConnectionId connectionId = connectionDescription.getConnectionId(); if (connectionId != null) { - return MongoObservation.LowCardinalityCommandTags.MONGODB_CLUSTER_ID - .of(connectionId.getServerId().getClusterId().getValue()); + return KeyValue.of(LowCardinalityCommandKeyNames.MONGODB_CLUSTER_ID.getKeyName(), + connectionId.getServerId().getClusterId().getValue()); } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoHandlerTagsProvider.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoHandlerKeyValuesProvider.java similarity index 83% rename from spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoHandlerTagsProvider.java rename to spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoHandlerKeyValuesProvider.java index eec9e9e81..5c6f089df 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoHandlerTagsProvider.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoHandlerKeyValuesProvider.java @@ -18,12 +18,12 @@ package org.springframework.data.mongodb.observability; import io.micrometer.observation.Observation; /** - * {@link Observation.TagsProvider} for {@link MongoHandlerContext}. + * {@link Observation.KeyValuesProvider} for {@link MongoHandlerContext}. * * @author Greg Turnquist * @since 4.0.0 */ -public interface MongoHandlerTagsProvider extends Observation.TagsProvider { +public interface MongoHandlerKeyValuesProvider extends Observation.KeyValuesProvider { @Override default boolean supportsContext(Observation.Context context) { diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoObservation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoObservation.java index 6d10250bf..6b6bb38f2 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoObservation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoObservation.java @@ -15,7 +15,7 @@ */ package org.springframework.data.mongodb.observability; -import io.micrometer.common.docs.TagKey; +import io.micrometer.common.docs.KeyName; import io.micrometer.observation.docs.DocumentedObservation; /** @@ -23,7 +23,7 @@ import io.micrometer.observation.docs.DocumentedObservation; * * @author Marcin Grzejszczak * @author Greg Turnquist - * @since 1.0.0 + * @since 4.0.0 */ enum MongoObservation implements DocumentedObservation { @@ -38,13 +38,13 @@ enum MongoObservation implements DocumentedObservation { } @Override - public TagKey[] getLowCardinalityTagKeys() { - return LowCardinalityCommandTags.values(); + public KeyName[] getLowCardinalityKeyNames() { + return LowCardinalityCommandKeyNames.values(); } @Override - public TagKey[] getHighCardinalityTagKeys() { - return HighCardinalityCommandTags.values(); + public KeyName[] getHighCardinalityKeyNames() { + return HighCardinalityCommandKeyNames.values(); } @Override @@ -54,16 +54,16 @@ enum MongoObservation implements DocumentedObservation { }; /** - * Enums related to low cardinality tags for MongoDB commands. + * Enums related to low cardinality key names for MongoDB commands. */ - enum LowCardinalityCommandTags implements TagKey { + enum LowCardinalityCommandKeyNames implements KeyName { /** * MongoDB collection name. */ MONGODB_COLLECTION { @Override - public String getKey() { + public String getKeyName() { return "spring.data.mongodb.collection"; } }, @@ -73,23 +73,23 @@ enum MongoObservation implements DocumentedObservation { */ MONGODB_CLUSTER_ID { @Override - public String getKey() { + public String getKeyName() { return "spring.data.mongodb.cluster_id"; } } } /** - * Enums related to high cardinality tags for MongoDB commands. + * Enums related to high cardinality key names for MongoDB commands. */ - enum HighCardinalityCommandTags implements TagKey { + enum HighCardinalityCommandKeyNames implements KeyName { /** * MongoDB command value. */ MONGODB_COMMAND { @Override - public String getKey() { + public String getKeyName() { return "spring.data.mongodb.command"; } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoObservationCommandListener.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoObservationCommandListener.java index 3a708e590..f7f829a84 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoObservationCommandListener.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoObservationCommandListener.java @@ -37,18 +37,18 @@ import com.mongodb.event.CommandSucceededEvent; * @since 4.0.0 */ public final class MongoObservationCommandListener - implements CommandListener, Observation.TagsProviderAware { + implements CommandListener, Observation.KeyValuesProviderAware { private static final Log log = LogFactory.getLog(MongoObservationCommandListener.class); private final ObservationRegistry observationRegistry; - private MongoHandlerTagsProvider tagsProvider; + private MongoHandlerKeyValuesProvider keyValuesProvider; public MongoObservationCommandListener(ObservationRegistry observationRegistry) { this.observationRegistry = observationRegistry; - this.tagsProvider = new DefaultMongoHandlerTagsProvider(); + this.keyValuesProvider = new DefaultMongoHandlerKeyValuesProvider(); } @Override @@ -160,7 +160,7 @@ public final class MongoObservationCommandListener Observation observation = MongoObservation.MONGODB_COMMAND_OBSERVATION .observation(this.observationRegistry, observationContext) // .contextualName(observationContext.getContextualName()) // - .tagsProvider(this.tagsProvider) // + .keyValuesProvider(this.keyValuesProvider) // .start(); requestContext.put(Observation.class, observation); @@ -173,7 +173,7 @@ public final class MongoObservationCommandListener } @Override - public void setTagsProvider(MongoHandlerTagsProvider mongoHandlerTagsProvider) { - this.tagsProvider = mongoHandlerTagsProvider; + public void setKeyValuesProvider(MongoHandlerKeyValuesProvider mongoHandlerKeyValuesProvider) { + this.keyValuesProvider = mongoHandlerKeyValuesProvider; } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/observability/MongoObservationCommandListenerForTracingTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/observability/MongoObservationCommandListenerForTracingTests.java index e4da69f6e..2d263c791 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/observability/MongoObservationCommandListenerForTracingTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/observability/MongoObservationCommandListenerForTracingTests.java @@ -30,8 +30,8 @@ import org.bson.BsonString; import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.springframework.data.mongodb.observability.MongoObservation.HighCardinalityCommandTags; -import org.springframework.data.mongodb.observability.MongoObservation.LowCardinalityCommandTags; +import org.springframework.data.mongodb.observability.MongoObservation.HighCardinalityCommandKeyNames; +import org.springframework.data.mongodb.observability.MongoObservation.LowCardinalityCommandKeyNames; import com.mongodb.ServerAddress; import com.mongodb.connection.ClusterId; @@ -163,8 +163,8 @@ class MongoObservationCommandListenerForTracingTests { .hasNameEqualTo("insert user") // .hasKindEqualTo(Span.Kind.CLIENT) // .hasRemoteServiceNameEqualTo("mongodb-database") // - .hasTag(HighCardinalityCommandTags.MONGODB_COMMAND.getKey(), "insert") // - .hasTag(LowCardinalityCommandTags.MONGODB_COLLECTION.getKey(), "user") // - .hasTagWithKey(LowCardinalityCommandTags.MONGODB_CLUSTER_ID.getKey()); + .hasTag(HighCardinalityCommandKeyNames.MONGODB_COMMAND.getKeyName(), "insert") // + .hasTag(LowCardinalityCommandKeyNames.MONGODB_COLLECTION.getKeyName(), "user") // + .hasTagWithKey(LowCardinalityCommandKeyNames.MONGODB_CLUSTER_ID.getKeyName()); } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/observability/MongoObservationCommandListenerTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/observability/MongoObservationCommandListenerTests.java index 154b71a4b..ef2f6d561 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/observability/MongoObservationCommandListenerTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/observability/MongoObservationCommandListenerTests.java @@ -17,7 +17,8 @@ package org.springframework.data.mongodb.observability; import static io.micrometer.core.tck.MeterRegistryAssert.*; -import io.micrometer.common.Tags; +import io.micrometer.common.KeyValue; +import io.micrometer.common.KeyValues; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.observation.TimerObservationHandler; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; @@ -28,8 +29,8 @@ import org.bson.BsonDocument; import org.bson.BsonString; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.springframework.data.mongodb.observability.MongoObservation.HighCardinalityCommandTags; -import org.springframework.data.mongodb.observability.MongoObservation.LowCardinalityCommandTags; +import org.springframework.data.mongodb.observability.MongoObservation.HighCardinalityCommandKeyNames; +import org.springframework.data.mongodb.observability.MongoObservation.LowCardinalityCommandKeyNames; import com.mongodb.ServerAddress; import com.mongodb.connection.ClusterId; @@ -148,8 +149,8 @@ class MongoObservationCommandListenerTests { listener.commandSucceeded(new CommandSucceededEvent(testRequestContext, 0, null, "insert", null, 0)); // then - assertThat(meterRegistry).hasTimerWithNameAndTags(HighCardinalityCommandTags.MONGODB_COMMAND.getKey(), - Tags.of(LowCardinalityCommandTags.MONGODB_COLLECTION.of("user"))); + assertThat(meterRegistry).hasTimerWithNameAndTags(HighCardinalityCommandKeyNames.MONGODB_COMMAND.getKeyName(), + KeyValues.of(KeyValue.of(LowCardinalityCommandKeyNames.MONGODB_COLLECTION.getKeyName(), "user"))); } @Test @@ -177,10 +178,10 @@ class MongoObservationCommandListenerTests { private void assertThatTimerRegisteredWithTags() { assertThat(meterRegistry) // - .hasTimerWithNameAndTags(HighCardinalityCommandTags.MONGODB_COMMAND.getKey(), - Tags.of(LowCardinalityCommandTags.MONGODB_COLLECTION.getKey(), "user")) // - .hasTimerWithNameAndTagKeys(HighCardinalityCommandTags.MONGODB_COMMAND.getKey(), - LowCardinalityCommandTags.MONGODB_CLUSTER_ID.getKey()); + .hasTimerWithNameAndTags(HighCardinalityCommandKeyNames.MONGODB_COMMAND.getKeyName(), + KeyValues.of(KeyValue.of(LowCardinalityCommandKeyNames.MONGODB_COLLECTION.getKeyName(), "user"))) // + .hasTimerWithNameAndTagKeys(HighCardinalityCommandKeyNames.MONGODB_COMMAND.getKeyName(), + LowCardinalityCommandKeyNames.MONGODB_CLUSTER_ID.getKeyName()); } }