Switch to Micrometer 1.10's tracing APIs.

Micrometer Tracing 1.10 has some breaking APIs.

See #4023.
This commit is contained in:
Greg L. Turnquist
2022-04-14 11:24:26 -05:00
parent 225dbee15f
commit 667b71e073
6 changed files with 57 additions and 52 deletions

View File

@@ -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());
}
}

View File

@@ -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<MongoHandlerContext> {
public interface MongoHandlerKeyValuesProvider extends Observation.KeyValuesProvider<MongoHandlerContext> {
@Override
default boolean supportsContext(Observation.Context context) {

View File

@@ -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";
}
}

View File

@@ -37,18 +37,18 @@ import com.mongodb.event.CommandSucceededEvent;
* @since 4.0.0
*/
public final class MongoObservationCommandListener
implements CommandListener, Observation.TagsProviderAware<MongoHandlerTagsProvider> {
implements CommandListener, Observation.KeyValuesProviderAware<MongoHandlerKeyValuesProvider> {
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;
}
}

View File

@@ -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());
}
}

View File

@@ -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());
}
}