Switch to Micrometer 1.10's tracing APIs.
Micrometer Tracing 1.10 has some breaking APIs. See #4023.
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user