parent
c03ccb2e6c
commit
3c049a2bd0
|
|
@ -23,6 +23,9 @@ import org.springframework.lang.Nullable;
|
|||
/**
|
||||
* Context that holds information for metadata collection
|
||||
* during the {@link ClientHttpObservationDocumentation#HTTP_REQUEST HTTP client exchange observations}.
|
||||
* <p>The {@link #getCarrier() tracing context carrier} is a {@link ClientRequest.Builder request builder},
|
||||
* since the actual request is immutable. For {@code KeyValue} extraction, the {@link #getRequest() actual request}
|
||||
* should be used instead.
|
||||
*
|
||||
* @author Brian Clozel
|
||||
* @since 6.0
|
||||
|
|
@ -35,7 +38,7 @@ public class ClientRequestObservationContext extends RequestReplySenderContext<C
|
|||
private boolean aborted;
|
||||
|
||||
@Nullable
|
||||
private ClientRequest builtRequest;
|
||||
private ClientRequest request;
|
||||
|
||||
|
||||
public ClientRequestObservationContext() {
|
||||
|
|
@ -44,7 +47,7 @@ public class ClientRequestObservationContext extends RequestReplySenderContext<C
|
|||
|
||||
private static void setRequestHeader(@Nullable ClientRequest.Builder request, String name, String value) {
|
||||
if (request != null) {
|
||||
request.header(name, value);
|
||||
request.headers(headers -> headers.set(name, value));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -80,16 +83,17 @@ public class ClientRequestObservationContext extends RequestReplySenderContext<C
|
|||
}
|
||||
|
||||
/**
|
||||
* Return the built request.
|
||||
* Return the immutable client request.
|
||||
*/
|
||||
public ClientRequest getBuiltRequest() {
|
||||
return this.builtRequest;
|
||||
@Nullable
|
||||
public ClientRequest getRequest() {
|
||||
return this.request;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the built request.
|
||||
* Set the client request.
|
||||
*/
|
||||
public void setBuiltRequest(ClientRequest builtRequest) {
|
||||
this.builtRequest = builtRequest;
|
||||
public void setRequest(ClientRequest request) {
|
||||
this.request = request;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ public class DefaultClientRequestObservationConvention implements ClientRequestO
|
|||
|
||||
@Override
|
||||
public String getContextualName(ClientRequestObservationContext context) {
|
||||
return "http " + context.getBuiltRequest().method().name().toLowerCase();
|
||||
return "http " + context.getRequest().method().name().toLowerCase();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -95,8 +95,8 @@ public class DefaultClientRequestObservationConvention implements ClientRequestO
|
|||
}
|
||||
|
||||
protected KeyValue method(ClientRequestObservationContext context) {
|
||||
if (context.getBuiltRequest() != null) {
|
||||
return KeyValue.of(ClientHttpObservationDocumentation.LowCardinalityKeyNames.METHOD, context.getBuiltRequest().method().name());
|
||||
if (context.getRequest() != null) {
|
||||
return KeyValue.of(ClientHttpObservationDocumentation.LowCardinalityKeyNames.METHOD, context.getRequest().method().name());
|
||||
}
|
||||
else {
|
||||
return METHOD_NONE;
|
||||
|
|
@ -143,15 +143,15 @@ public class DefaultClientRequestObservationConvention implements ClientRequestO
|
|||
}
|
||||
|
||||
protected KeyValue httpUrl(ClientRequestObservationContext context) {
|
||||
if (context.getBuiltRequest() != null) {
|
||||
return KeyValue.of(ClientHttpObservationDocumentation.HighCardinalityKeyNames.HTTP_URL, context.getBuiltRequest().url().toASCIIString());
|
||||
if (context.getRequest() != null) {
|
||||
return KeyValue.of(ClientHttpObservationDocumentation.HighCardinalityKeyNames.HTTP_URL, context.getRequest().url().toASCIIString());
|
||||
}
|
||||
return HTTP_URL_NONE;
|
||||
}
|
||||
|
||||
protected KeyValue clientName(ClientRequestObservationContext context) {
|
||||
if (context.getBuiltRequest() != null && context.getBuiltRequest().url().getHost() != null) {
|
||||
return KeyValue.of(ClientHttpObservationDocumentation.HighCardinalityKeyNames.CLIENT_NAME, context.getBuiltRequest().url().getHost());
|
||||
if (context.getRequest() != null && context.getRequest().url().getHost() != null) {
|
||||
return KeyValue.of(ClientHttpObservationDocumentation.HighCardinalityKeyNames.CLIENT_NAME, context.getRequest().url().getHost());
|
||||
}
|
||||
return CLIENT_NAME_NONE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -467,7 +467,7 @@ class DefaultWebClient implements WebClient {
|
|||
.start();
|
||||
ClientRequest request = requestBuilder.build();
|
||||
observationContext.setUriTemplate((String) request.attribute(URI_TEMPLATE_ATTRIBUTE).orElse(null));
|
||||
observationContext.setBuiltRequest(request);
|
||||
observationContext.setRequest(request);
|
||||
Mono<ClientResponse> responseMono = exchangeFunction.exchange(request)
|
||||
.checkpoint("Request to " + this.httpMethod.name() + " " + this.uri + " [DefaultWebClient]")
|
||||
.switchIfEmpty(NO_HTTP_CLIENT_RESPONSE_ERROR);
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ class DefaultClientRequestObservationConventionTests {
|
|||
void shouldHaveContextualName() {
|
||||
ClientRequestObservationContext context = new ClientRequestObservationContext();
|
||||
context.setCarrier(ClientRequest.create(HttpMethod.GET, URI.create("/test")));
|
||||
context.setBuiltRequest(context.getCarrier().build());
|
||||
context.setRequest(context.getCarrier().build());
|
||||
assertThat(this.observationConvention.getContextualName(context)).isEqualTo("http get");
|
||||
}
|
||||
|
||||
|
|
@ -82,7 +82,7 @@ class DefaultClientRequestObservationConventionTests {
|
|||
.attribute(WebClient.class.getName() + ".uriTemplate", "/resource/{id}");
|
||||
ClientRequestObservationContext context = createContext(request);
|
||||
context.setUriTemplate("/resource/{id}");
|
||||
context.setBuiltRequest(context.getCarrier().build());
|
||||
context.setRequest(context.getCarrier().build());
|
||||
assertThat(this.observationConvention.getLowCardinalityKeyValues(context))
|
||||
.contains(KeyValue.of("exception", "none"), KeyValue.of("method", "GET"), KeyValue.of("uri", "/resource/{id}"),
|
||||
KeyValue.of("status", "200"), KeyValue.of("outcome", "SUCCESS"));
|
||||
|
|
@ -93,7 +93,7 @@ class DefaultClientRequestObservationConventionTests {
|
|||
@Test
|
||||
void shouldAddKeyValuesForRequestWithoutUriTemplate() {
|
||||
ClientRequestObservationContext context = createContext(ClientRequest.create(HttpMethod.GET, URI.create("/resource/42")));
|
||||
context.setBuiltRequest(context.getCarrier().build());
|
||||
context.setRequest(context.getCarrier().build());
|
||||
assertThat(this.observationConvention.getLowCardinalityKeyValues(context))
|
||||
.contains(KeyValue.of("method", "GET"), KeyValue.of("uri", "none"));
|
||||
assertThat(this.observationConvention.getHighCardinalityKeyValues(context)).hasSize(2).contains(KeyValue.of("http.url", "/resource/42"));
|
||||
|
|
@ -102,7 +102,7 @@ class DefaultClientRequestObservationConventionTests {
|
|||
@Test
|
||||
void shouldAddClientNameKeyValueForRequestWithHost() {
|
||||
ClientRequestObservationContext context = createContext(ClientRequest.create(HttpMethod.GET, URI.create("https://localhost:8080/resource/42")));
|
||||
context.setBuiltRequest(context.getCarrier().build());
|
||||
context.setRequest(context.getCarrier().build());
|
||||
assertThat(this.observationConvention.getHighCardinalityKeyValues(context)).contains(KeyValue.of("client.name", "localhost"));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue