Allow custom observation convention for RestClient

This commit allows to use a custom `ObservationConvention`
in the `DefaultRestClient`, and to set it through the
`RestClient.Builder`.

Closes gh-31325
This commit is contained in:
Henning Poettker
2023-09-27 13:49:21 +02:00
committed by Brian Clozel
parent c356ce2637
commit 9cab6c90a9
5 changed files with 55 additions and 1 deletions

View File

@@ -37,6 +37,8 @@ import org.springframework.http.client.ClientHttpRequest;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.http.client.observation.ClientRequestObservationContext;
import org.springframework.http.client.observation.ClientRequestObservationConvention;
import org.springframework.http.client.observation.DefaultClientRequestObservationConvention;
import org.springframework.http.converter.HttpMessageConverter;
import static org.assertj.core.api.Assertions.assertThat;
@@ -159,6 +161,20 @@ class RestClientObservationTests {
assertThatHttpObservation().hasLowCardinalityKeyValue("outcome", "UNKNOWN");
}
@Test
void executeWithCustomConventionUsesCustomObservationName() throws Exception {
ClientRequestObservationConvention observationConvention =
new DefaultClientRequestObservationConvention("custom.requests");
RestClient restClient = this.client.mutate().observationConvention(observationConvention).build();
mockSentRequest(GET, "https://example.org");
mockResponseStatus(HttpStatus.OK);
restClient.get().uri("https://example.org").retrieve().toBodilessEntity();
TestObservationRegistryAssert.assertThat(this.observationRegistry)
.hasObservationWithNameEqualTo("custom.requests");
}
private void mockSentRequest(HttpMethod method, String uri) throws Exception {
mockSentRequest(method, uri, new HttpHeaders());