Skip to content

Commit a9341f3

Browse files
Provide fallback for Observation KeyValues
1 parent 73ce595 commit a9341f3

File tree

2 files changed

+38
-39
lines changed

2 files changed

+38
-39
lines changed

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/DefaultMongoHandlerObservationConvention.java

Lines changed: 26 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,16 @@
1515
*/
1616
package org.springframework.data.mongodb.observability;
1717

18-
import io.micrometer.common.KeyValue;
19-
import io.micrometer.common.KeyValues;
20-
21-
import org.springframework.data.mongodb.observability.MongoObservation.LowCardinalityCommandKeyNames;
22-
import org.springframework.util.Assert;
23-
import org.springframework.util.ObjectUtils;
24-
2518
import com.mongodb.ConnectionString;
2619
import com.mongodb.ServerAddress;
2720
import com.mongodb.connection.ConnectionDescription;
2821
import com.mongodb.connection.ConnectionId;
2922
import com.mongodb.event.CommandStartedEvent;
23+
import io.micrometer.common.KeyValues;
24+
import org.springframework.util.Assert;
25+
import org.springframework.util.ObjectUtils;
26+
27+
import static org.springframework.data.mongodb.observability.MongoObservation.LowCardinalityCommandKeyNames.*;
3028

3129
/**
3230
* Default {@link MongoHandlerObservationConvention} implementation.
@@ -41,54 +39,43 @@ class DefaultMongoHandlerObservationConvention implements MongoHandlerObservatio
4139
@Override
4240
public KeyValues getLowCardinalityKeyValues(MongoHandlerContext context) {
4341

44-
KeyValues keyValues = KeyValues.of(LowCardinalityCommandKeyNames.DB_SYSTEM.withValue("mongodb"),
45-
LowCardinalityCommandKeyNames.MONGODB_COMMAND.withValue(context.getCommandName()));
46-
47-
ConnectionString connectionString = context.getConnectionString();
48-
if (connectionString != null) {
49-
50-
keyValues = keyValues
51-
.and(LowCardinalityCommandKeyNames.DB_CONNECTION_STRING.withValue(connectionString.getConnectionString()));
52-
53-
String user = connectionString.getUsername();
54-
55-
if (!ObjectUtils.isEmpty(user)) {
56-
keyValues = keyValues.and(LowCardinalityCommandKeyNames.DB_USER.withValue(user));
57-
}
58-
}
59-
60-
if (!ObjectUtils.isEmpty(context.getDatabaseName())) {
61-
keyValues = keyValues.and(LowCardinalityCommandKeyNames.DB_NAME.withValue(context.getDatabaseName()));
62-
}
63-
64-
keyValues = keyValues.and(LowCardinalityCommandKeyNames.MONGODB_COLLECTION.withValue(
65-
ObjectUtils.isEmpty(context.getCollectionName()) ? KeyValue.NONE_VALUE : context.getCollectionName()));
66-
6742
if (context.getCommandStartedEvent() == null) {
6843
throw new IllegalStateException("not command started event present");
6944
}
7045

71-
ConnectionDescription connectionDescription = context.getCommandStartedEvent().getConnectionDescription();
46+
ConnectionString connectionString = context.getConnectionString();
47+
String connectionStringValue = connectionString != null ? connectionString.getConnectionString() : null;
48+
String username = connectionString != null ? connectionString.getUsername() : null;
7249

50+
String transport = null, peerName = null, peerPort =null, clusterId = null;
51+
ConnectionDescription connectionDescription = context.getCommandStartedEvent().getConnectionDescription();
7352
if (connectionDescription != null) {
74-
7553
ServerAddress serverAddress = connectionDescription.getServerAddress();
7654

7755
if (serverAddress != null) {
78-
79-
keyValues = keyValues.and(LowCardinalityCommandKeyNames.NET_TRANSPORT.withValue("IP.TCP"),
80-
LowCardinalityCommandKeyNames.NET_PEER_NAME.withValue(serverAddress.getHost()),
81-
LowCardinalityCommandKeyNames.NET_PEER_PORT.withValue("" + serverAddress.getPort()));
56+
transport = "IP.TCP";
57+
peerName = serverAddress.getHost();
58+
peerPort = String.valueOf(serverAddress.getPort());
8259
}
8360

8461
ConnectionId connectionId = connectionDescription.getConnectionId();
8562
if (connectionId != null) {
86-
keyValues = keyValues.and(LowCardinalityCommandKeyNames.MONGODB_CLUSTER_ID
87-
.withValue(connectionId.getServerId().getClusterId().getValue()));
63+
clusterId = connectionId.getServerId().getClusterId().getValue();
8864
}
8965
}
9066

91-
return keyValues;
67+
return KeyValues.of(
68+
DB_SYSTEM.withValue("mongodb"),
69+
MONGODB_COMMAND.withValue(context.getCommandName()),
70+
DB_CONNECTION_STRING.withOptionalValue(connectionStringValue),
71+
DB_USER.withOptionalValue(username),
72+
DB_NAME.withOptionalValue(context.getDatabaseName()),
73+
MONGODB_COLLECTION.withOptionalValue(context.getCollectionName()),
74+
NET_TRANSPORT.withOptionalValue(transport),
75+
NET_PEER_NAME.withOptionalValue(peerName),
76+
NET_PEER_PORT.withOptionalValue(peerPort),
77+
MONGODB_CLUSTER_ID.withOptionalValue(clusterId)
78+
);
9279
}
9380

9481
@Override

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoObservation.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@
1515
*/
1616
package org.springframework.data.mongodb.observability;
1717

18+
import io.micrometer.common.KeyValue;
1819
import io.micrometer.common.docs.KeyName;
1920
import io.micrometer.observation.docs.ObservationDocumentation;
21+
import org.jspecify.annotations.Nullable;
22+
import org.springframework.util.ObjectUtils;
2023

2124
/**
2225
* A MongoDB-based {@link io.micrometer.observation.Observation}.
@@ -172,6 +175,15 @@ public String asString() {
172175
public String asString() {
173176
return "db.operation";
174177
}
178+
};
179+
180+
/**
181+
* Creates a key value for the given key name.
182+
* @param value value for key, if value is null or empty {@link KeyValue.NONE_VALUE} will be used
183+
* @return key value
184+
*/
185+
public KeyValue withOptionalValue(@Nullable String value) {
186+
return withValue(ObjectUtils.isEmpty(value) ? KeyValue.NONE_VALUE : value);
175187
}
176188
}
177189

0 commit comments

Comments
 (0)