Skip to content

Commit 31b6ef7

Browse files
gregturnchristophstrobl
authored andcommitted
Upgrade to Micrometer 1.10.0-SNAPSHOT.
Closes #1299.
1 parent 43b964f commit 31b6ef7

File tree

11 files changed

+67
-81
lines changed

11 files changed

+67
-81
lines changed

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/observability/CassandraObservation.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ enum LowCardinalityKeyNames implements KeyName {
6666
*/
6767
KEYSPACE_NAME {
6868
@Override
69-
public String getKeyName() {
69+
public String asString() {
7070
return "spring.data.cassandra.keyspace";
7171
}
7272
},
@@ -76,7 +76,7 @@ public String getKeyName() {
7676
*/
7777
SESSION_NAME {
7878
@Override
79-
public String getKeyName() {
79+
public String asString() {
8080
return "spring.data.cassandra.sessionName";
8181
}
8282
},
@@ -86,7 +86,7 @@ public String getKeyName() {
8686
*/
8787
METHOD_NAME {
8888
@Override
89-
public String getKeyName() {
89+
public String asString() {
9090
return "spring.data.cassandra.methodName";
9191
}
9292
},
@@ -96,7 +96,7 @@ public String getKeyName() {
9696
*/
9797
URL {
9898
@Override
99-
public String getKeyName() {
99+
public String asString() {
100100
return "spring.data.cassandra.url";
101101
}
102102
},
@@ -106,7 +106,7 @@ public String getKeyName() {
106106
*/
107107
NODE_ERROR_TAG {
108108
@Override
109-
public String getKeyName() {
109+
public String asString() {
110110
return "spring.data.cassandra.node[%s].error";
111111
}
112112
}
@@ -119,7 +119,7 @@ enum HighCardinalityKeyNames implements KeyName {
119119
*/
120120
CQL_TAG {
121121
@Override
122-
public String getKeyName() {
122+
public String asString() {
123123
return "spring.data.cassandra.cql";
124124
}
125125
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818
import io.micrometer.observation.Observation;
1919

2020
/**
21-
* {@link Observation.KeyValuesProvider} for Cassandra.
21+
* {@link Observation.ObservationConvention} for Cassandra.
2222
*
2323
* @author Greg Turnquist
2424
* @since 4.0.0
2525
*/
26-
public interface CqlSessionKeyValuesProvider extends Observation.KeyValuesProvider<CqlSessionContext> {
26+
public interface CqlSessionObservationConvention extends Observation.ObservationConvention<CqlSessionContext> {
2727

2828
@Override
2929
default boolean supportsContext(Observation.Context context) {

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/observability/CqlSessionTracingBeanPostProcessor.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,20 @@ public class CqlSessionTracingBeanPostProcessor implements BeanPostProcessor {
3434

3535
private final ObservationRegistry observationRegistry;
3636

37-
private final CqlSessionKeyValuesProvider keyValuesProvider;
37+
private final CqlSessionObservationConvention observationConvention;
3838

3939
public CqlSessionTracingBeanPostProcessor(ObservationRegistry observationRegistry,
40-
CqlSessionKeyValuesProvider keyValuesProvider) {
40+
CqlSessionObservationConvention observationConvention) {
4141

4242
this.observationRegistry = observationRegistry;
43-
this.keyValuesProvider = keyValuesProvider;
43+
this.observationConvention = observationConvention;
4444
}
4545

4646
@Override
4747
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
4848

4949
if (bean instanceof CqlSession) {
50-
return CqlSessionTracingFactory.wrap((CqlSession) bean, this.observationRegistry, this.keyValuesProvider);
50+
return CqlSessionTracingFactory.wrap((CqlSession) bean, this.observationRegistry, this.observationConvention);
5151
}
5252

5353
return bean;

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/observability/CqlSessionTracingFactory.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,16 @@ private CqlSessionTracingFactory() {
3939
*
4040
* @param session
4141
* @param observationRegistry
42-
* @param keyValuesProvider
42+
* @param observationConvention
4343
* @return
4444
*/
4545
public static CqlSession wrap(CqlSession session, ObservationRegistry observationRegistry,
46-
CqlSessionKeyValuesProvider keyValuesProvider) {
46+
CqlSessionObservationConvention observationConvention) {
4747

4848
ProxyFactory proxyFactory = new ProxyFactory();
4949

5050
proxyFactory.setTarget(session);
51-
proxyFactory.addAdvice(new CqlSessionTracingInterceptor(session, observationRegistry, keyValuesProvider));
51+
proxyFactory.addAdvice(new CqlSessionTracingInterceptor(session, observationRegistry, observationConvention));
5252
proxyFactory.addInterface(CqlSession.class);
5353

5454
return (CqlSession) proxyFactory.getProxy();

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/observability/CqlSessionTracingInterceptor.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,22 @@
4545
* @author Greg Turnquist
4646
* @since 4.0.0
4747
*/
48-
final class CqlSessionTracingInterceptor
49-
implements MethodInterceptor, Observation.KeyValuesProviderAware<CqlSessionKeyValuesProvider> {
48+
final class CqlSessionTracingInterceptor implements MethodInterceptor {
5049

5150
private static final Log log = LogFactory.getLog(CqlSessionTracingInterceptor.class);
5251

5352
private final CqlSession delegateSession;
5453

5554
private final ObservationRegistry observationRegistry;
5655

57-
private CqlSessionKeyValuesProvider keyValuesProvider;
56+
private CqlSessionObservationConvention observationConvention;
5857

5958
CqlSessionTracingInterceptor(CqlSession delegateSession, ObservationRegistry observationRegistry,
60-
CqlSessionKeyValuesProvider keyValuesProvider) {
59+
CqlSessionObservationConvention observationConvention) {
6160

6261
this.delegateSession = delegateSession;
6362
this.observationRegistry = observationRegistry;
64-
this.keyValuesProvider = keyValuesProvider;
63+
this.observationConvention = observationConvention;
6564
}
6665

6766
@Nullable
@@ -154,12 +153,8 @@ private Observation childObservation(Statement<?> statement, String methodName,
154153
return CassandraObservation.CASSANDRA_QUERY_OBSERVATION //
155154
.observation(this.observationRegistry, observationContext) //
156155
.contextualName(CassandraObservation.CASSANDRA_QUERY_OBSERVATION.getContextualName()) //
157-
.keyValuesProvider(this.keyValuesProvider) //
156+
.highCardinalityKeyValues(this.observationConvention.getHighCardinalityKeyValues(observationContext)) //
157+
.lowCardinalityKeyValues(this.observationConvention.getLowCardinalityKeyValues(observationContext)) //
158158
.start();
159159
}
160-
161-
@Override
162-
public void setKeyValuesProvider(CqlSessionKeyValuesProvider keyValuesProvider) {
163-
this.keyValuesProvider = keyValuesProvider;
164-
}
165160
}

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/observability/CqlSessionTracingObservationHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,11 @@ public void onStop(CqlSessionContext context) {
6363

6464
for (KeyValue keyValue : context.getLowCardinalityKeyValues()) {
6565

66-
if (keyValue.getKey().equals(CassandraObservation.LowCardinalityKeyNames.SESSION_NAME.getKeyName())) {
66+
if (keyValue.getKey().equals(CassandraObservation.LowCardinalityKeyNames.SESSION_NAME.asString())) {
6767
sessionName = keyValue.getValue();
6868
}
6969

70-
if (keyValue.getKey().equals(CassandraObservation.LowCardinalityKeyNames.URL.getKeyName())) {
70+
if (keyValue.getKey().equals(CassandraObservation.LowCardinalityKeyNames.URL.asString())) {
7171
url = keyValue.getValue();
7272
}
7373
}
Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package org.springframework.data.cassandra.observability;
1717

18-
import io.micrometer.common.KeyValue;
1918
import io.micrometer.common.KeyValues;
2019

2120
import java.util.Optional;
@@ -25,46 +24,37 @@
2524
import org.springframework.data.cassandra.observability.CassandraObservation.LowCardinalityKeyNames;
2625

2726
import com.datastax.oss.driver.api.core.CqlIdentifier;
28-
import com.datastax.oss.driver.api.core.cql.BatchStatement;
29-
import com.datastax.oss.driver.api.core.cql.BatchableStatement;
30-
import com.datastax.oss.driver.api.core.cql.BoundStatement;
31-
import com.datastax.oss.driver.api.core.cql.SimpleStatement;
32-
import com.datastax.oss.driver.api.core.cql.Statement;
27+
import com.datastax.oss.driver.api.core.cql.*;
3328

3429
/**
35-
* Default {@link CqlSessionKeyValuesProvider} implementation.
30+
* Default {@link CqlSessionObservationConvention} implementation.
3631
*
3732
* @author Greg Turnquist
3833
* @since 4.0.0
3934
*/
40-
public class DefaultCassandraKeyValuesProvider implements CqlSessionKeyValuesProvider {
35+
public class DefaultCassandraObservationContention implements CqlSessionObservationConvention {
4136

4237
@Override
4338
public KeyValues getLowCardinalityKeyValues(CqlSessionContext context) {
4439

45-
KeyValues keyValues = KeyValues.of( //
46-
KeyValue.of( //
47-
LowCardinalityKeyNames.SESSION_NAME.getKeyName(),
48-
Optional.ofNullable(context.getDelegateSession().getName()).orElse("unknown")),
49-
KeyValue.of( //
50-
LowCardinalityKeyNames.KEYSPACE_NAME.getKeyName(),
40+
KeyValues keyValues = KeyValues.of(
41+
LowCardinalityKeyNames.SESSION_NAME
42+
.withValue(Optional.ofNullable(context.getDelegateSession().getName()).orElse("unknown")),
43+
LowCardinalityKeyNames.KEYSPACE_NAME.withValue(
5144
Optional.ofNullable(context.getStatement().getKeyspace()).map(CqlIdentifier::asInternal).orElse("unknown")),
52-
KeyValue.of( //
53-
LowCardinalityKeyNames.METHOD_NAME.getKeyName(), //
54-
context.getMethodName()));
45+
LowCardinalityKeyNames.METHOD_NAME.withValue(context.getMethodName()));
5546

5647
if (context.getStatement().getNode() != null) {
57-
keyValues = keyValues.and(KeyValue.of( //
58-
LowCardinalityKeyNames.URL.getKeyName(),
59-
context.getStatement().getNode().getEndPoint().resolve().toString()));
48+
keyValues = keyValues.and(
49+
LowCardinalityKeyNames.URL.withValue(context.getStatement().getNode().getEndPoint().resolve().toString()));
6050
}
6151

6252
return keyValues;
6353
}
6454

6555
@Override
6656
public KeyValues getHighCardinalityKeyValues(CqlSessionContext context) {
67-
return KeyValues.of(KeyValue.of(HighCardinalityKeyNames.CQL_TAG.getKeyName(), getCql(context.getStatement())));
57+
return KeyValues.of(HighCardinalityKeyNames.CQL_TAG.withValue(getCql(context.getStatement())));
6858
}
6959

7060
/**

spring-data-cassandra/src/test/java/org/springframework/data/cassandra/observability/CqlSessionTracingBeanPostProcessorTests.java

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

18-
import static org.assertj.core.api.Assertions.*;
19-
import static org.mockito.Mockito.*;
18+
import static org.assertj.core.api.Assertions.assertThat;
19+
import static org.mockito.Mockito.mock;
2020

2121
import io.micrometer.observation.ObservationRegistry;
2222

@@ -74,13 +74,13 @@ ObservationRegistry meterRegistry() {
7474
}
7575

7676
@Bean
77-
CqlSessionKeyValuesProvider keyValuesProvider() {
78-
return new DefaultCassandraKeyValuesProvider();
77+
CqlSessionObservationConvention observationConvention() {
78+
return new DefaultCassandraObservationContention();
7979
}
8080

8181
@Bean
8282
CqlSessionTracingBeanPostProcessor traceCqlSessionBeanPostProcessor(ObservationRegistry observationRegistry,
83-
CqlSessionKeyValuesProvider tagsProvider) {
83+
CqlSessionObservationConvention tagsProvider) {
8484
return new CqlSessionTracingBeanPostProcessor(observationRegistry, tagsProvider);
8585
}
8686
}

spring-data-cassandra/src/test/java/org/springframework/data/cassandra/observability/CqlSessionTracingTests.java

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@
1515
*/
1616
package org.springframework.data.cassandra.observability;
1717

18-
import static org.assertj.core.api.Assertions.*;
18+
import static org.assertj.core.api.Assertions.assertThat;
1919
import static org.springframework.data.cassandra.observability.CassandraObservation.*;
2020

2121
import io.micrometer.common.KeyValue;
2222
import io.micrometer.common.KeyValues;
23+
import io.micrometer.common.docs.KeyName;
2324
import io.micrometer.core.instrument.MeterRegistry;
24-
import io.micrometer.core.instrument.observation.TimerObservationHandler;
25+
import io.micrometer.core.instrument.observation.DefaultMeterObservationHandler;
2526
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
2627
import io.micrometer.core.tck.MeterRegistryAssert;
2728
import io.micrometer.observation.Observation;
@@ -79,7 +80,7 @@ void shouldNotCreateAnyMetricsWhenThereIsNoObservation() {
7980

8081
MeterRegistry meterRegistry = new SimpleMeterRegistry();
8182
ObservationRegistry observationRegistry = ObservationRegistry.create();
82-
observationRegistry.observationConfig().observationHandler(new TimerObservationHandler(meterRegistry));
83+
observationRegistry.observationConfig().observationHandler(new DefaultMeterObservationHandler(meterRegistry));
8384

8485
MeterRegistryAssert.then(meterRegistry).hasNoMetrics();
8586
}
@@ -89,14 +90,14 @@ void tracingNoStatementsShouldProduceNoMetrics() {
8990

9091
MeterRegistry meterRegistry = new SimpleMeterRegistry();
9192
ObservationRegistry observationRegistry = ObservationRegistry.create();
92-
observationRegistry.observationConfig().observationHandler(new TimerObservationHandler(meterRegistry));
93+
observationRegistry.observationConfig().observationHandler(new DefaultMeterObservationHandler(meterRegistry));
9394

94-
CqlSessionKeyValuesProvider tagsProvider = new DefaultCassandraKeyValuesProvider();
95+
CqlSessionObservationConvention observationContention = new DefaultCassandraObservationContention();
9596

9697
SimpleTracer tracer = new SimpleTracer();
9798
observationRegistry.observationConfig().observationHandler(new CqlSessionTracingObservationHandler(tracer));
9899

99-
CqlSessionTracingFactory.wrap(session, observationRegistry, tagsProvider);
100+
CqlSessionTracingFactory.wrap(session, observationRegistry, observationContention);
100101

101102
MeterRegistryAssert.then(meterRegistry).hasNoMetrics();
102103
}
@@ -106,15 +107,15 @@ void shouldCreateObservationForCqlSessionOperations() {
106107

107108
MeterRegistry meterRegistry = new SimpleMeterRegistry();
108109
ObservationRegistry observationRegistry = ObservationRegistry.create();
109-
observationRegistry.observationConfig().observationHandler(new TimerObservationHandler(meterRegistry));
110+
observationRegistry.observationConfig().observationHandler(new DefaultMeterObservationHandler(meterRegistry));
110111

111-
CqlSessionKeyValuesProvider tagsProvider = new DefaultCassandraKeyValuesProvider();
112+
CqlSessionObservationConvention observationContention = new DefaultCassandraObservationContention();
112113
SimpleTracer tracer = new SimpleTracer();
113114
observationRegistry.observationConfig().observationHandler(new CqlSessionTracingObservationHandler(tracer));
114115

115116
Observation.start("test", observationRegistry).scoped(() -> {
116117

117-
CqlSession traceSession = CqlSessionTracingFactory.wrap(session, observationRegistry, tagsProvider);
118+
CqlSession traceSession = CqlSessionTracingFactory.wrap(session, observationRegistry, observationContention);
118119

119120
traceSession.execute(CREATE_KEYSPACE);
120121
traceSession.executeAsync(CREATE_KEYSPACE);
@@ -123,26 +124,24 @@ void shouldCreateObservationForCqlSessionOperations() {
123124
});
124125

125126
MeterRegistryAssert.then(meterRegistry).hasTimerWithNameAndTags(CASSANDRA_QUERY_OBSERVATION.getName(), KeyValues.of( //
126-
KeyValue.of(LowCardinalityKeyNames.SESSION_NAME.getKeyName(), "s5"), //
127-
KeyValue.of(LowCardinalityKeyNames.KEYSPACE_NAME.getKeyName(), "unknown"), //
127+
LowCardinalityKeyNames.SESSION_NAME.withValue("s5"), //
128+
LowCardinalityKeyNames.KEYSPACE_NAME.withValue("unknown"), //
128129
KeyValue.of("error", "none") //
129130
));
130131

131132
assertThat(tracer.getSpans()).hasSize(4);
132133

133-
assertThat(findSpan(tracer.getSpans(), LowCardinalityKeyNames.METHOD_NAME.getKeyName(), "execute")).isNotNull();
134-
assertThat(findSpan(tracer.getSpans(), LowCardinalityKeyNames.METHOD_NAME.getKeyName(), "executeAsync"))
135-
.isNotNull();
136-
assertThat(findSpan(tracer.getSpans(), LowCardinalityKeyNames.METHOD_NAME.getKeyName(), "prepare")).isNotNull();
137-
assertThat(findSpan(tracer.getSpans(), LowCardinalityKeyNames.METHOD_NAME.getKeyName(), "prepareAsync"))
138-
.isNotNull();
134+
assertThat(findSpan(tracer.getSpans(), LowCardinalityKeyNames.METHOD_NAME, "execute")).isNotNull();
135+
assertThat(findSpan(tracer.getSpans(), LowCardinalityKeyNames.METHOD_NAME, "executeAsync")).isNotNull();
136+
assertThat(findSpan(tracer.getSpans(), LowCardinalityKeyNames.METHOD_NAME, "prepare")).isNotNull();
137+
assertThat(findSpan(tracer.getSpans(), LowCardinalityKeyNames.METHOD_NAME, "prepareAsync")).isNotNull();
139138

140139
tracer.getSpans().forEach(simpleSpan -> SpanAssert.then(simpleSpan) //
141140
.hasRemoteServiceNameEqualTo("cassandra-s5") //
142141
.hasNameEqualTo(CASSANDRA_QUERY_OBSERVATION.getContextualName()) //
143-
.hasTag(LowCardinalityKeyNames.SESSION_NAME.getKeyName(), "s5") //
144-
.hasTag(LowCardinalityKeyNames.KEYSPACE_NAME.getKeyName(), "unknown") //
145-
.hasTag(HighCardinalityKeyNames.CQL_TAG.getKeyName(), CREATE_KEYSPACE) //
142+
.hasTag(LowCardinalityKeyNames.SESSION_NAME, "s5") //
143+
.hasTag(LowCardinalityKeyNames.KEYSPACE_NAME, "unknown") //
144+
.hasTag(HighCardinalityKeyNames.CQL_TAG, CREATE_KEYSPACE) //
146145
.hasIpThatIsBlank() //
147146
.hasPortEqualTo(0) //
148147
.hasKindEqualTo(Span.Kind.CLIENT));
@@ -156,12 +155,12 @@ void shouldCreateObservationForCqlSessionOperations() {
156155
* @param value
157156
* @return
158157
*/
159-
private SimpleSpan findSpan(Deque<SimpleSpan> spans, String key, String value) {
158+
private SimpleSpan findSpan(Deque<SimpleSpan> spans, KeyName key, String value) {
160159

161160
return spans.stream() //
162161
.filter(simpleSpan -> {
163162
Map<String, String> tags = simpleSpan.getTags();
164-
return tags.containsKey(key) && tags.get(key).equals(value);
163+
return tags.containsKey(key.asString()) && tags.get(key.asString()).equals(value);
165164
}) //
166165
.findAny() //
167166
.orElse(null);

0 commit comments

Comments
 (0)