Add contextualName to HTTP Observations

This commit ensures that all HTTP `ObservationConvention`
implementations provide a consistent contextual name for observations.
This name should be like "http get" where only the HTTP verb changes
depending on the request.

Fixes gh-29231
This commit is contained in:
Brian Clozel
2022-09-30 16:08:42 +02:00
parent 0cc3c6b5d1
commit b9070ae752
8 changed files with 57 additions and 5 deletions

View File

@@ -67,6 +67,11 @@ public class DefaultClientObservationConvention implements ClientObservationConv
return this.name;
}
@Override
public String getContextualName(ClientObservationContext context) {
return "http " + context.getCarrier().method().name().toLowerCase();
}
@Override
public KeyValues getLowCardinalityKeyValues(ClientObservationContext context) {
return KeyValues.of(uri(context), method(context), status(context), exception(context), outcome(context));

View File

@@ -36,6 +36,18 @@ class DefaultClientObservationConventionTests {
private DefaultClientObservationConvention observationConvention = new DefaultClientObservationConvention();
@Test
void shouldHaveName() {
assertThat(this.observationConvention.getName()).isEqualTo("http.client.requests");
}
@Test
void shouldHaveContextualName() {
ClientObservationContext context = new ClientObservationContext();
context.setCarrier(ClientRequest.create(HttpMethod.GET, URI.create("/test")).build());
assertThat(this.observationConvention.getContextualName(context)).isEqualTo("http get");
}
@Test
void shouldOnlySupportWebClientObservationContext() {
assertThat(this.observationConvention.supportsContext(new ClientObservationContext())).isTrue();