From 94845e0fb2dacfa9138b22328c81b86b549748bf Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Thu, 14 Aug 2025 07:37:00 +0200 Subject: [PATCH] Polishing. Update javadoc and remove deprecated observation keys. Original Pull Request: #5020 --- .../mongodb/observability/MongoKeyName.java | 5 +++-- .../mongodb/observability/MongoObservation.java | 16 ++++------------ .../data/mongodb/observability/Observer.java | 17 +++++++---------- .../ImperativeIntegrationTests.java | 10 +++++++--- .../ROOT/pages/observability/metrics.adoc | 2 -- .../modules/ROOT/pages/observability/spans.adoc | 2 -- 6 files changed, 21 insertions(+), 31 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoKeyName.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoKeyName.java index b7db03fc3..5fd15c6f5 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoKeyName.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoKeyName.java @@ -1,5 +1,5 @@ /* - * Copyright 2025 the original author or authors. + * Copyright 2025-present the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,6 +31,7 @@ import org.springframework.util.StringUtils; * {@link KeyValue} and {@link KeyName}. * * @author Mark Paluch + * @since 4.4.9 */ record MongoKeyName(String name, boolean required, Function valueFunction) implements KeyName { @@ -44,7 +45,7 @@ record MongoKeyName(String name, boolean required, Function */ - public static MongoKeyName required(String name, Function valueFunction) { + static MongoKeyName required(String name, Function valueFunction) { return required(name, valueFunction, Objects::nonNull); } 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 b898def63..464fb036a 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,16 +15,15 @@ */ package org.springframework.data.mongodb.observability; -import static org.springframework.data.mongodb.observability.MongoKeyName.*; +import static org.springframework.data.mongodb.observability.MongoKeyName.MongoKeyValue; +import static org.springframework.data.mongodb.observability.MongoKeyName.just; import io.micrometer.common.docs.KeyName; import io.micrometer.observation.docs.ObservationDocumentation; import org.jspecify.annotations.Nullable; - import org.springframework.util.StringUtils; -import com.mongodb.ConnectionString; import com.mongodb.ServerAddress; import com.mongodb.connection.ConnectionDescription; import com.mongodb.event.CommandEvent; @@ -86,24 +85,18 @@ enum MongoObservation implements ObservationDocumentation { static MongoKeyName NET_PEER_NAME = MongoKeyName.required("net.peer.name", ServerAddress::getHost); static MongoKeyName NET_PEER_PORT = MongoKeyName.required("net.peer.port", ServerAddress::getPort); - static MongoKeyName DB_CONNECTION_STRING = MongoKeyName.requiredString("db.connection_string", - Object::toString); - static MongoKeyName DB_USER = MongoKeyName.requiredString("db.user", - ConnectionString::getUsername); - /** * Observe low cardinality key values for the given {@link MongoHandlerContext}. * * @param context the context to contribute from, can be {@literal null} if no context is available. * @return the key value contributor providing low cardinality key names. */ - public static Observer observe(@Nullable MongoHandlerContext context) { + static Observer observe(@Nullable MongoHandlerContext context) { return Observer.fromContext(context, it -> { it.contribute(DB_SYSTEM).contribute(MONGODB_COMMAND, DB_NAME, MONGODB_COLLECTION); - it.nested(MongoHandlerContext::getConnectionString).contribute(DB_CONNECTION_STRING, DB_USER); it.nested(MongoHandlerContext::getCommandStartedEvent) // .nested(CommandEvent::getConnectionDescription).contribute(MONGODB_CLUSTER_ID) // .nested(ConnectionDescription::getServerAddress) // @@ -116,9 +109,8 @@ enum MongoObservation implements ObservationDocumentation { * * @return the key names for low cardinality keys. */ - public static KeyName[] getKeyNames() { + static KeyName[] getKeyNames() { return observe(null).toKeyNames(); } } - } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/Observer.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/Observer.java index d0a414936..ba46c60c6 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/Observer.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/Observer.java @@ -30,6 +30,7 @@ import org.jspecify.annotations.Nullable; * observability systems. * * @author Mark Paluch + * @since 4.4.9 */ class Observer { @@ -40,7 +41,7 @@ class Observer { * * @return a new {@link Observer}. */ - public static Observer create() { + static Observer create() { return new Observer(); } @@ -53,7 +54,7 @@ class Observer { * @return the stateful {@link Observer}. * @param context type. */ - public static Observer fromContext(@Nullable C context, Consumer> consumer) { + static Observer fromContext(@Nullable C context, Consumer> consumer) { Observer contributor = create(); @@ -68,7 +69,7 @@ class Observer { * @param keyValue * @return */ - public Observer contribute(MongoKeyName.MongoKeyValue keyValue) { + Observer contribute(MongoKeyName.MongoKeyValue keyValue) { keyValues.add(keyValue); @@ -83,7 +84,7 @@ class Observer { * @return the nested contextual {@link ContextualObserver} that can contribute key-value tuples. * @param */ - public ContextualObserver contextual(@Nullable C context) { + ContextualObserver contextual(@Nullable C context) { if (context == null) { return new EmptyContextualObserver<>(keyValues); @@ -92,15 +93,11 @@ class Observer { return new DefaultContextualObserver<>(context, keyValues); } - public ContextualObserver empty(Class targetType) { - return new EmptyContextualObserver<>(this.keyValues); - } - - public KeyValues toKeyValues() { + KeyValues toKeyValues() { return KeyValues.of(keyValues); } - public KeyName[] toKeyNames() { + KeyName[] toKeyNames() { KeyName[] keyNames = new KeyName[keyValues.size()]; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/observability/ImperativeIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/observability/ImperativeIntegrationTests.java index c1b1b4851..db8cd1a60 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/observability/ImperativeIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/observability/ImperativeIntegrationTests.java @@ -81,13 +81,17 @@ public class ImperativeIntegrationTests extends SampleTestRunner { for (FinishedSpan span : tracer.getFinishedSpans()) { - assertThat(span.getTags()).containsEntry("db.system", "mongodb").containsEntry("net.transport", "IP.TCP"); + assertThat(span.getTags()) // + .containsEntry("db.system", "mongodb") // + .containsEntry("net.transport", "IP.TCP") // + .doesNotContainKey("db.connection_string") // + .doesNotContainKey("db.user"); if (MongoClientVersion.isVersion5orNewer()) { - assertThat(span.getTags()).containsKeys("db.connection_string", "db.name", "db.operation", + assertThat(span.getTags()).containsKeys("db.name", "db.operation", "db.mongodb.collection", "net.peer.name", "net.peer.port"); } else { - assertThat(span.getTags()).containsKeys("db.connection_string", "db.name", "db.operation", + assertThat(span.getTags()).containsKeys("db.name", "db.operation", "db.mongodb.collection", "net.peer.name", "net.peer.port", "net.sock.peer.addr", "net.sock.peer.port"); } } diff --git a/src/main/antora/modules/ROOT/pages/observability/metrics.adoc b/src/main/antora/modules/ROOT/pages/observability/metrics.adoc index 8b5ce92a6..455a6d17b 100644 --- a/src/main/antora/modules/ROOT/pages/observability/metrics.adoc +++ b/src/main/antora/modules/ROOT/pages/observability/metrics.adoc @@ -24,12 +24,10 @@ Fully qualified name of the enclosing class `org.springframework.data.mongodb.ob [cols="a,a"] |=== |Name | Description -|`db.connection_string` _(required)_|MongoDB connection string. |`db.mongodb.collection` _(required)_|MongoDB collection name. |`db.name` _(required)_|MongoDB database name. |`db.operation` _(required)_|MongoDB command value. |`db.system` _(required)_|MongoDB database system. -|`db.user` _(required)_|MongoDB user. |`net.peer.name` _(required)_|Name of the database host. |`net.peer.port` _(required)_|Logical remote port number. |`net.sock.peer.addr` _(required)_|Mongo peer address. diff --git a/src/main/antora/modules/ROOT/pages/observability/spans.adoc b/src/main/antora/modules/ROOT/pages/observability/spans.adoc index 8e79d33a8..8c8bad95f 100644 --- a/src/main/antora/modules/ROOT/pages/observability/spans.adoc +++ b/src/main/antora/modules/ROOT/pages/observability/spans.adoc @@ -15,12 +15,10 @@ Fully qualified name of the enclosing class `org.springframework.data.mongodb.ob .Tag Keys |=== |Name | Description -|`db.connection_string` _(required)_|MongoDB connection string. |`db.mongodb.collection` _(required)_|MongoDB collection name. |`db.name` _(required)_|MongoDB database name. |`db.operation` _(required)_|MongoDB command value. |`db.system` _(required)_|MongoDB database system. -|`db.user` _(required)_|MongoDB user. |`net.peer.name` _(required)_|Name of the database host. |`net.peer.port` _(required)_|Logical remote port number. |`net.sock.peer.addr` _(required)_|Mongo peer address.