parent
6b0f6e9f27
commit
455a736a01
|
@ -8,7 +8,7 @@ javaPlatform {
|
|||
|
||||
dependencies {
|
||||
api(platform("com.fasterxml.jackson:jackson-bom:2.13.4"))
|
||||
api(platform("io.micrometer:micrometer-bom:1.10.0-M6"))
|
||||
api(platform("io.micrometer:micrometer-bom:1.10.0-SNAPSHOT"))
|
||||
api(platform("io.netty:netty-bom:4.1.82.Final"))
|
||||
api(platform("io.netty:netty5-bom:5.0.0.Alpha5"))
|
||||
api(platform("io.projectreactor:reactor-bom:2022.0.0-SNAPSHOT"))
|
||||
|
|
|
@ -19,7 +19,7 @@ package org.springframework.http.client.observation;
|
|||
import io.micrometer.common.docs.KeyName;
|
||||
import io.micrometer.observation.Observation;
|
||||
import io.micrometer.observation.ObservationConvention;
|
||||
import io.micrometer.observation.docs.DocumentedObservation;
|
||||
import io.micrometer.observation.docs.ObservationDocumentation;
|
||||
|
||||
import org.springframework.http.client.ClientHttpRequestFactory;
|
||||
|
||||
|
@ -30,7 +30,7 @@ import org.springframework.http.client.ClientHttpRequestFactory;
|
|||
* @author Brian Clozel
|
||||
* @since 6.0
|
||||
*/
|
||||
public enum ClientHttpObservation implements DocumentedObservation {
|
||||
public enum ClientHttpObservationDocumentation implements ObservationDocumentation {
|
||||
|
||||
/**
|
||||
* Observation created for a client HTTP exchange.
|
|
@ -36,19 +36,19 @@ public class DefaultClientHttpObservationConvention implements ClientHttpObserva
|
|||
|
||||
private static final String DEFAULT_NAME = "http.client.requests";
|
||||
|
||||
private static final KeyValue URI_NONE = KeyValue.of(ClientHttpObservation.LowCardinalityKeyNames.URI, "none");
|
||||
private static final KeyValue URI_NONE = KeyValue.of(ClientHttpObservationDocumentation.LowCardinalityKeyNames.URI, "none");
|
||||
|
||||
private static final KeyValue METHOD_NONE = KeyValue.of(ClientHttpObservation.LowCardinalityKeyNames.METHOD, "none");
|
||||
private static final KeyValue METHOD_NONE = KeyValue.of(ClientHttpObservationDocumentation.LowCardinalityKeyNames.METHOD, "none");
|
||||
|
||||
private static final KeyValue STATUS_IO_ERROR = KeyValue.of(ClientHttpObservation.LowCardinalityKeyNames.STATUS, "IO_ERROR");
|
||||
private static final KeyValue STATUS_IO_ERROR = KeyValue.of(ClientHttpObservationDocumentation.LowCardinalityKeyNames.STATUS, "IO_ERROR");
|
||||
|
||||
private static final KeyValue STATUS_CLIENT_ERROR = KeyValue.of(ClientHttpObservation.LowCardinalityKeyNames.STATUS, "CLIENT_ERROR");
|
||||
private static final KeyValue STATUS_CLIENT_ERROR = KeyValue.of(ClientHttpObservationDocumentation.LowCardinalityKeyNames.STATUS, "CLIENT_ERROR");
|
||||
|
||||
private static final KeyValue EXCEPTION_NONE = KeyValue.of(ClientHttpObservation.LowCardinalityKeyNames.EXCEPTION, "none");
|
||||
private static final KeyValue EXCEPTION_NONE = KeyValue.of(ClientHttpObservationDocumentation.LowCardinalityKeyNames.EXCEPTION, "none");
|
||||
|
||||
private static final KeyValue HTTP_URL_NONE = KeyValue.of(ClientHttpObservation.HighCardinalityKeyNames.HTTP_URL, "none");
|
||||
private static final KeyValue HTTP_URL_NONE = KeyValue.of(ClientHttpObservationDocumentation.HighCardinalityKeyNames.HTTP_URL, "none");
|
||||
|
||||
private static final KeyValue CLIENT_NAME_NONE = KeyValue.of(ClientHttpObservation.HighCardinalityKeyNames.CLIENT_NAME, "none");
|
||||
private static final KeyValue CLIENT_NAME_NONE = KeyValue.of(ClientHttpObservationDocumentation.HighCardinalityKeyNames.CLIENT_NAME, "none");
|
||||
|
||||
private final String name;
|
||||
|
||||
|
@ -84,14 +84,14 @@ public class DefaultClientHttpObservationConvention implements ClientHttpObserva
|
|||
|
||||
protected KeyValue uri(ClientHttpObservationContext context) {
|
||||
if (context.getUriTemplate() != null) {
|
||||
return KeyValue.of(ClientHttpObservation.LowCardinalityKeyNames.URI, context.getUriTemplate());
|
||||
return KeyValue.of(ClientHttpObservationDocumentation.LowCardinalityKeyNames.URI, context.getUriTemplate());
|
||||
}
|
||||
return URI_NONE;
|
||||
}
|
||||
|
||||
protected KeyValue method(ClientHttpObservationContext context) {
|
||||
if (context.getCarrier() != null) {
|
||||
return KeyValue.of(ClientHttpObservation.LowCardinalityKeyNames.METHOD, context.getCarrier().getMethod().name());
|
||||
return KeyValue.of(ClientHttpObservationDocumentation.LowCardinalityKeyNames.METHOD, context.getCarrier().getMethod().name());
|
||||
}
|
||||
else {
|
||||
return METHOD_NONE;
|
||||
|
@ -104,7 +104,7 @@ public class DefaultClientHttpObservationConvention implements ClientHttpObserva
|
|||
return STATUS_CLIENT_ERROR;
|
||||
}
|
||||
try {
|
||||
return KeyValue.of(ClientHttpObservation.LowCardinalityKeyNames.STATUS, String.valueOf(response.getStatusCode().value()));
|
||||
return KeyValue.of(ClientHttpObservationDocumentation.LowCardinalityKeyNames.STATUS, String.valueOf(response.getStatusCode().value()));
|
||||
}
|
||||
catch (IOException ex) {
|
||||
return STATUS_IO_ERROR;
|
||||
|
@ -112,11 +112,13 @@ public class DefaultClientHttpObservationConvention implements ClientHttpObserva
|
|||
}
|
||||
|
||||
protected KeyValue exception(ClientHttpObservationContext context) {
|
||||
return context.getError().map(exception -> {
|
||||
String simpleName = exception.getClass().getSimpleName();
|
||||
return KeyValue.of(ClientHttpObservation.LowCardinalityKeyNames.EXCEPTION,
|
||||
StringUtils.hasText(simpleName) ? simpleName : exception.getClass().getName());
|
||||
}).orElse(EXCEPTION_NONE);
|
||||
Throwable error = context.getError();
|
||||
if (error != null) {
|
||||
String simpleName = error.getClass().getSimpleName();
|
||||
return KeyValue.of(ClientHttpObservationDocumentation.LowCardinalityKeyNames.EXCEPTION,
|
||||
StringUtils.hasText(simpleName) ? simpleName : error.getClass().getName());
|
||||
}
|
||||
return EXCEPTION_NONE;
|
||||
}
|
||||
|
||||
protected static KeyValue outcome(ClientHttpObservationContext context) {
|
||||
|
@ -139,14 +141,14 @@ public class DefaultClientHttpObservationConvention implements ClientHttpObserva
|
|||
|
||||
protected KeyValue requestUri(ClientHttpObservationContext context) {
|
||||
if (context.getCarrier() != null) {
|
||||
return KeyValue.of(ClientHttpObservation.HighCardinalityKeyNames.HTTP_URL, context.getCarrier().getURI().toASCIIString());
|
||||
return KeyValue.of(ClientHttpObservationDocumentation.HighCardinalityKeyNames.HTTP_URL, context.getCarrier().getURI().toASCIIString());
|
||||
}
|
||||
return HTTP_URL_NONE;
|
||||
}
|
||||
|
||||
protected KeyValue clientName(ClientHttpObservationContext context) {
|
||||
if (context.getCarrier() != null && context.getCarrier().getURI().getHost() != null) {
|
||||
return KeyValue.of(ClientHttpObservation.HighCardinalityKeyNames.CLIENT_NAME, context.getCarrier().getURI().getHost());
|
||||
return KeyValue.of(ClientHttpObservationDocumentation.HighCardinalityKeyNames.CLIENT_NAME, context.getCarrier().getURI().getHost());
|
||||
}
|
||||
return CLIENT_NAME_NONE;
|
||||
}
|
||||
|
|
|
@ -44,9 +44,9 @@ import org.springframework.http.ResponseEntity;
|
|||
import org.springframework.http.client.ClientHttpRequest;
|
||||
import org.springframework.http.client.ClientHttpRequestFactory;
|
||||
import org.springframework.http.client.ClientHttpResponse;
|
||||
import org.springframework.http.client.observation.ClientHttpObservation;
|
||||
import org.springframework.http.client.observation.ClientHttpObservationContext;
|
||||
import org.springframework.http.client.observation.ClientHttpObservationConvention;
|
||||
import org.springframework.http.client.observation.ClientHttpObservationDocumentation;
|
||||
import org.springframework.http.client.observation.DefaultClientHttpObservationConvention;
|
||||
import org.springframework.http.client.support.InterceptingHttpAccessor;
|
||||
import org.springframework.http.converter.ByteArrayHttpMessageConverter;
|
||||
|
@ -865,8 +865,8 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat
|
|||
}
|
||||
ClientHttpObservationContext observationContext = new ClientHttpObservationContext(request);
|
||||
observationContext.setUriTemplate(uriTemplate);
|
||||
Observation observation = ClientHttpObservation.HTTP_REQUEST.observation(this.observationConvention,
|
||||
DEFAULT_OBSERVATION_CONVENTION, observationContext, this.observationRegistry).start();
|
||||
Observation observation = ClientHttpObservationDocumentation.HTTP_REQUEST.observation(this.observationConvention,
|
||||
DEFAULT_OBSERVATION_CONVENTION, () -> observationContext, this.observationRegistry).start();
|
||||
ClientHttpResponse response = null;
|
||||
try {
|
||||
if (requestCallback != null) {
|
||||
|
|
|
@ -33,21 +33,21 @@ public class DefaultHttpRequestsObservationConvention implements HttpRequestsObs
|
|||
|
||||
private static final String DEFAULT_NAME = "http.server.requests";
|
||||
|
||||
private static final KeyValue METHOD_UNKNOWN = KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.METHOD, "UNKNOWN");
|
||||
private static final KeyValue METHOD_UNKNOWN = KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.METHOD, "UNKNOWN");
|
||||
|
||||
private static final KeyValue STATUS_UNKNOWN = KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.STATUS, "UNKNOWN");
|
||||
private static final KeyValue STATUS_UNKNOWN = KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.STATUS, "UNKNOWN");
|
||||
|
||||
private static final KeyValue URI_UNKNOWN = KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.URI, "UNKNOWN");
|
||||
private static final KeyValue URI_UNKNOWN = KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.URI, "UNKNOWN");
|
||||
|
||||
private static final KeyValue URI_ROOT = KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.URI, "root");
|
||||
private static final KeyValue URI_ROOT = KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.URI, "root");
|
||||
|
||||
private static final KeyValue URI_NOT_FOUND = KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.URI, "NOT_FOUND");
|
||||
private static final KeyValue URI_NOT_FOUND = KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.URI, "NOT_FOUND");
|
||||
|
||||
private static final KeyValue URI_REDIRECTION = KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.URI, "REDIRECTION");
|
||||
private static final KeyValue URI_REDIRECTION = KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.URI, "REDIRECTION");
|
||||
|
||||
private static final KeyValue EXCEPTION_NONE = KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.EXCEPTION, "none");
|
||||
private static final KeyValue EXCEPTION_NONE = KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.EXCEPTION, "none");
|
||||
|
||||
private static final KeyValue HTTP_URL_UNKNOWN = KeyValue.of(HttpRequestsObservation.HighCardinalityKeyNames.HTTP_URL, "UNKNOWN");
|
||||
private static final KeyValue HTTP_URL_UNKNOWN = KeyValue.of(HttpRequestsObservationDocumentation.HighCardinalityKeyNames.HTTP_URL, "UNKNOWN");
|
||||
|
||||
private final String name;
|
||||
|
||||
|
@ -87,11 +87,11 @@ public class DefaultHttpRequestsObservationConvention implements HttpRequestsObs
|
|||
}
|
||||
|
||||
protected KeyValue method(HttpRequestsObservationContext context) {
|
||||
return (context.getCarrier() != null) ? KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.METHOD, context.getCarrier().getMethod()) : METHOD_UNKNOWN;
|
||||
return (context.getCarrier() != null) ? KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.METHOD, context.getCarrier().getMethod()) : METHOD_UNKNOWN;
|
||||
}
|
||||
|
||||
protected KeyValue status(HttpRequestsObservationContext context) {
|
||||
return (context.getResponse() != null) ? KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.STATUS, Integer.toString(context.getResponse().getStatus())) : STATUS_UNKNOWN;
|
||||
return (context.getResponse() != null) ? KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.STATUS, Integer.toString(context.getResponse().getStatus())) : STATUS_UNKNOWN;
|
||||
}
|
||||
|
||||
protected KeyValue uri(HttpRequestsObservationContext context) {
|
||||
|
@ -119,12 +119,13 @@ public class DefaultHttpRequestsObservationConvention implements HttpRequestsObs
|
|||
}
|
||||
|
||||
protected KeyValue exception(HttpRequestsObservationContext context) {
|
||||
return context.getError().map(throwable -> {
|
||||
String simpleName = throwable.getClass().getSimpleName();
|
||||
return KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.EXCEPTION,
|
||||
StringUtils.hasText(simpleName) ? simpleName : throwable.getClass().getName());
|
||||
})
|
||||
.orElse(EXCEPTION_NONE);
|
||||
Throwable error = context.getError();
|
||||
if (error != null) {
|
||||
String simpleName = error.getClass().getSimpleName();
|
||||
return KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.EXCEPTION,
|
||||
StringUtils.hasText(simpleName) ? simpleName : error.getClass().getName());
|
||||
}
|
||||
return EXCEPTION_NONE;
|
||||
}
|
||||
|
||||
protected KeyValue outcome(HttpRequestsObservationContext context) {
|
||||
|
@ -138,7 +139,7 @@ public class DefaultHttpRequestsObservationConvention implements HttpRequestsObs
|
|||
|
||||
protected KeyValue uriExpanded(HttpRequestsObservationContext context) {
|
||||
if (context.getCarrier() != null) {
|
||||
return KeyValue.of(HttpRequestsObservation.HighCardinalityKeyNames.HTTP_URL, context.getCarrier().getRequestURI());
|
||||
return KeyValue.of(HttpRequestsObservationDocumentation.HighCardinalityKeyNames.HTTP_URL, context.getCarrier().getRequestURI());
|
||||
}
|
||||
return HTTP_URL_UNKNOWN;
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ package org.springframework.web.observation;
|
|||
import io.micrometer.common.docs.KeyName;
|
||||
import io.micrometer.observation.Observation;
|
||||
import io.micrometer.observation.ObservationConvention;
|
||||
import io.micrometer.observation.docs.DocumentedObservation;
|
||||
import io.micrometer.observation.docs.ObservationDocumentation;
|
||||
|
||||
/**
|
||||
* Documented {@link io.micrometer.common.KeyValue KeyValues} for the HTTP server observations
|
||||
|
@ -28,7 +28,7 @@ import io.micrometer.observation.docs.DocumentedObservation;
|
|||
* @author Brian Clozel
|
||||
* @since 6.0
|
||||
*/
|
||||
public enum HttpRequestsObservation implements DocumentedObservation {
|
||||
public enum HttpRequestsObservationDocumentation implements ObservationDocumentation {
|
||||
|
||||
/**
|
||||
* HTTP server request observations.
|
|
@ -125,8 +125,8 @@ public class HttpRequestsObservationFilter extends OncePerRequestFilter {
|
|||
Observation observation = (Observation) request.getAttribute(CURRENT_OBSERVATION_ATTRIBUTE);
|
||||
if (observation == null) {
|
||||
HttpRequestsObservationContext context = new HttpRequestsObservationContext(request, response);
|
||||
observation = HttpRequestsObservation.HTTP_REQUESTS.observation(this.observationConvention,
|
||||
DEFAULT_OBSERVATION_CONVENTION, context, this.observationRegistry).start();
|
||||
observation = HttpRequestsObservationDocumentation.HTTP_REQUESTS.observation(this.observationConvention,
|
||||
DEFAULT_OBSERVATION_CONVENTION, () -> context, this.observationRegistry).start();
|
||||
request.setAttribute(CURRENT_OBSERVATION_ATTRIBUTE, observation);
|
||||
request.setAttribute(CURRENT_OBSERVATION_CONTEXT_ATTRIBUTE, observation.getContext());
|
||||
}
|
||||
|
|
|
@ -34,21 +34,21 @@ public class DefaultHttpRequestsObservationConvention implements HttpRequestsObs
|
|||
|
||||
private static final String DEFAULT_NAME = "http.server.requests";
|
||||
|
||||
private static final KeyValue METHOD_UNKNOWN = KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.METHOD, "UNKNOWN");
|
||||
private static final KeyValue METHOD_UNKNOWN = KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.METHOD, "UNKNOWN");
|
||||
|
||||
private static final KeyValue STATUS_UNKNOWN = KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.STATUS, "UNKNOWN");
|
||||
private static final KeyValue STATUS_UNKNOWN = KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.STATUS, "UNKNOWN");
|
||||
|
||||
private static final KeyValue URI_UNKNOWN = KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.URI, "UNKNOWN");
|
||||
private static final KeyValue URI_UNKNOWN = KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.URI, "UNKNOWN");
|
||||
|
||||
private static final KeyValue URI_ROOT = KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.URI, "root");
|
||||
private static final KeyValue URI_ROOT = KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.URI, "root");
|
||||
|
||||
private static final KeyValue URI_NOT_FOUND = KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.URI, "NOT_FOUND");
|
||||
private static final KeyValue URI_NOT_FOUND = KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.URI, "NOT_FOUND");
|
||||
|
||||
private static final KeyValue URI_REDIRECTION = KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.URI, "REDIRECTION");
|
||||
private static final KeyValue URI_REDIRECTION = KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.URI, "REDIRECTION");
|
||||
|
||||
private static final KeyValue EXCEPTION_NONE = KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.EXCEPTION, "none");
|
||||
private static final KeyValue EXCEPTION_NONE = KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.EXCEPTION, "none");
|
||||
|
||||
private static final KeyValue HTTP_URL_UNKNOWN = KeyValue.of(HttpRequestsObservation.HighCardinalityKeyNames.HTTP_URL, "UNKNOWN");
|
||||
private static final KeyValue HTTP_URL_UNKNOWN = KeyValue.of(HttpRequestsObservationDocumentation.HighCardinalityKeyNames.HTTP_URL, "UNKNOWN");
|
||||
|
||||
private final String name;
|
||||
|
||||
|
@ -89,14 +89,14 @@ public class DefaultHttpRequestsObservationConvention implements HttpRequestsObs
|
|||
}
|
||||
|
||||
protected KeyValue method(HttpRequestsObservationContext context) {
|
||||
return (context.getCarrier() != null) ? KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.METHOD, context.getCarrier().getMethod().name()) : METHOD_UNKNOWN;
|
||||
return (context.getCarrier() != null) ? KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.METHOD, context.getCarrier().getMethod().name()) : METHOD_UNKNOWN;
|
||||
}
|
||||
|
||||
protected KeyValue status(HttpRequestsObservationContext context) {
|
||||
if (context.isConnectionAborted()) {
|
||||
return STATUS_UNKNOWN;
|
||||
}
|
||||
return (context.getResponse() != null) ? KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.STATUS, Integer.toString(context.getResponse().getStatusCode().value())) : STATUS_UNKNOWN;
|
||||
return (context.getResponse() != null) ? KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.STATUS, Integer.toString(context.getResponse().getStatusCode().value())) : STATUS_UNKNOWN;
|
||||
}
|
||||
|
||||
protected KeyValue uri(HttpRequestsObservationContext context) {
|
||||
|
@ -124,12 +124,13 @@ public class DefaultHttpRequestsObservationConvention implements HttpRequestsObs
|
|||
}
|
||||
|
||||
protected KeyValue exception(HttpRequestsObservationContext context) {
|
||||
return context.getError().map(throwable -> {
|
||||
String simpleName = throwable.getClass().getSimpleName();
|
||||
return KeyValue.of(HttpRequestsObservation.LowCardinalityKeyNames.EXCEPTION,
|
||||
StringUtils.hasText(simpleName) ? simpleName : throwable.getClass().getName());
|
||||
})
|
||||
.orElse(EXCEPTION_NONE);
|
||||
Throwable error = context.getError();
|
||||
if (error != null) {
|
||||
String simpleName = error.getClass().getSimpleName();
|
||||
return KeyValue.of(HttpRequestsObservationDocumentation.LowCardinalityKeyNames.EXCEPTION,
|
||||
StringUtils.hasText(simpleName) ? simpleName : error.getClass().getName());
|
||||
}
|
||||
return EXCEPTION_NONE;
|
||||
}
|
||||
|
||||
protected KeyValue outcome(HttpRequestsObservationContext context) {
|
||||
|
@ -146,7 +147,7 @@ public class DefaultHttpRequestsObservationConvention implements HttpRequestsObs
|
|||
protected KeyValue httpUrl(HttpRequestsObservationContext context) {
|
||||
if (context.getCarrier() != null) {
|
||||
String uriExpanded = context.getCarrier().getPath().toString();
|
||||
return KeyValue.of(HttpRequestsObservation.HighCardinalityKeyNames.HTTP_URL, uriExpanded);
|
||||
return KeyValue.of(HttpRequestsObservationDocumentation.HighCardinalityKeyNames.HTTP_URL, uriExpanded);
|
||||
}
|
||||
return HTTP_URL_UNKNOWN;
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ package org.springframework.web.observation.reactive;
|
|||
import io.micrometer.common.docs.KeyName;
|
||||
import io.micrometer.observation.Observation;
|
||||
import io.micrometer.observation.ObservationConvention;
|
||||
import io.micrometer.observation.docs.DocumentedObservation;
|
||||
import io.micrometer.observation.docs.ObservationDocumentation;
|
||||
|
||||
/**
|
||||
* Documented {@link io.micrometer.common.KeyValue KeyValues} for the HTTP server observations
|
||||
|
@ -28,7 +28,7 @@ import io.micrometer.observation.docs.DocumentedObservation;
|
|||
* @author Brian Clozel
|
||||
* @since 6.0
|
||||
*/
|
||||
public enum HttpRequestsObservation implements DocumentedObservation {
|
||||
public enum HttpRequestsObservationDocumentation implements ObservationDocumentation {
|
||||
|
||||
/**
|
||||
* HTTP server request observations.
|
|
@ -97,7 +97,7 @@ public class HttpRequestsObservationWebFilter implements WebFilter {
|
|||
}
|
||||
|
||||
private Publisher<Void> filter(ServerWebExchange exchange, HttpRequestsObservationContext observationContext, Mono<Void> call) {
|
||||
Observation observation = HttpRequestsObservation.HTTP_REQUESTS.createNotStarted(this.observationConvention,
|
||||
Observation observation = HttpRequestsObservationDocumentation.HTTP_REQUESTS.observation(this.observationConvention,
|
||||
DEFAULT_OBSERVATION_CONVENTION, () -> observationContext, this.observationRegistry);
|
||||
observation.start();
|
||||
return call.doOnEach(signal -> {
|
||||
|
|
|
@ -68,7 +68,7 @@ class HttpRequestsObservationFilterTests {
|
|||
|
||||
HttpRequestsObservationContext context = (HttpRequestsObservationContext) this.request
|
||||
.getAttribute(HttpRequestsObservationFilter.CURRENT_OBSERVATION_CONTEXT_ATTRIBUTE);
|
||||
assertThat(context.getError()).get().isEqualTo(customError);
|
||||
assertThat(context.getError()).isEqualTo(customError);
|
||||
assertThatHttpObservation().hasLowCardinalityKeyValue("outcome", "SERVER_ERROR");
|
||||
}
|
||||
|
||||
|
@ -83,7 +83,7 @@ class HttpRequestsObservationFilterTests {
|
|||
}).isInstanceOf(ServletException.class);
|
||||
HttpRequestsObservationContext context = (HttpRequestsObservationContext) this.request
|
||||
.getAttribute(HttpRequestsObservationFilter.CURRENT_OBSERVATION_CONTEXT_ATTRIBUTE);
|
||||
assertThat(context.getError()).get().isEqualTo(customError);
|
||||
assertThat(context.getError()).isEqualTo(customError);
|
||||
assertThatHttpObservation().hasLowCardinalityKeyValue("outcome", "SUCCESS");
|
||||
}
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@ class HttpRequestsObservationWebFilterTests {
|
|||
.expectError(IllegalArgumentException.class)
|
||||
.verify();
|
||||
Optional<HttpRequestsObservationContext> observationContext = HttpRequestsObservationWebFilter.findObservationContext(exchange);
|
||||
assertThat(observationContext.get().getError()).get().isInstanceOf(IllegalArgumentException.class);
|
||||
assertThat(observationContext.get().getError()).isInstanceOf(IllegalArgumentException.class);
|
||||
assertThatHttpObservation().hasLowCardinalityKeyValue("outcome", "SERVER_ERROR");
|
||||
}
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ package org.springframework.web.reactive.function.client;
|
|||
import io.micrometer.common.docs.KeyName;
|
||||
import io.micrometer.observation.Observation;
|
||||
import io.micrometer.observation.ObservationConvention;
|
||||
import io.micrometer.observation.docs.DocumentedObservation;
|
||||
import io.micrometer.observation.docs.ObservationDocumentation;
|
||||
|
||||
/**
|
||||
* Documented {@link io.micrometer.common.KeyValue KeyValues} for the {@link WebClient} observations.
|
||||
|
@ -27,7 +27,7 @@ import io.micrometer.observation.docs.DocumentedObservation;
|
|||
* @author Brian Clozel
|
||||
* @since 6.0
|
||||
*/
|
||||
public enum ClientObservation implements DocumentedObservation {
|
||||
public enum ClientObservationDocumentation implements ObservationDocumentation {
|
||||
|
||||
/**
|
||||
* Observation created for an HTTP client exchange.
|
||||
|
@ -40,12 +40,12 @@ public enum ClientObservation implements DocumentedObservation {
|
|||
|
||||
@Override
|
||||
public KeyName[] getLowCardinalityKeyNames() {
|
||||
return ClientObservation.LowCardinalityKeyNames.values();
|
||||
return ClientObservationDocumentation.LowCardinalityKeyNames.values();
|
||||
}
|
||||
|
||||
@Override
|
||||
public KeyName[] getHighCardinalityKeyNames() {
|
||||
return ClientObservation.HighCardinalityKeyNames.values();
|
||||
return ClientObservationDocumentation.HighCardinalityKeyNames.values();
|
||||
}
|
||||
|
||||
};
|
|
@ -22,7 +22,7 @@ import io.micrometer.common.KeyValue;
|
|||
import io.micrometer.common.KeyValues;
|
||||
import io.micrometer.observation.ObservationConvention;
|
||||
|
||||
import org.springframework.http.client.observation.ClientHttpObservation;
|
||||
import org.springframework.http.client.observation.ClientHttpObservationDocumentation;
|
||||
import org.springframework.http.observation.HttpOutcome;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
|
@ -37,19 +37,19 @@ public class DefaultClientObservationConvention implements ClientObservationConv
|
|||
|
||||
private static final String DEFAULT_NAME = "http.client.requests";
|
||||
|
||||
private static final KeyValue URI_NONE = KeyValue.of(ClientObservation.LowCardinalityKeyNames.URI, "none");
|
||||
private static final KeyValue URI_NONE = KeyValue.of(ClientObservationDocumentation.LowCardinalityKeyNames.URI, "none");
|
||||
|
||||
private static final KeyValue METHOD_NONE = KeyValue.of(ClientObservation.LowCardinalityKeyNames.METHOD, "none");
|
||||
private static final KeyValue METHOD_NONE = KeyValue.of(ClientObservationDocumentation.LowCardinalityKeyNames.METHOD, "none");
|
||||
|
||||
private static final KeyValue STATUS_IO_ERROR = KeyValue.of(ClientHttpObservation.LowCardinalityKeyNames.STATUS, "IO_ERROR");
|
||||
private static final KeyValue STATUS_IO_ERROR = KeyValue.of(ClientHttpObservationDocumentation.LowCardinalityKeyNames.STATUS, "IO_ERROR");
|
||||
|
||||
private static final KeyValue STATUS_CLIENT_ERROR = KeyValue.of(ClientHttpObservation.LowCardinalityKeyNames.STATUS, "CLIENT_ERROR");
|
||||
private static final KeyValue STATUS_CLIENT_ERROR = KeyValue.of(ClientHttpObservationDocumentation.LowCardinalityKeyNames.STATUS, "CLIENT_ERROR");
|
||||
|
||||
private static final KeyValue EXCEPTION_NONE = KeyValue.of(ClientObservation.LowCardinalityKeyNames.EXCEPTION, "none");
|
||||
private static final KeyValue EXCEPTION_NONE = KeyValue.of(ClientObservationDocumentation.LowCardinalityKeyNames.EXCEPTION, "none");
|
||||
|
||||
private static final KeyValue HTTP_URL_NONE = KeyValue.of(ClientHttpObservation.HighCardinalityKeyNames.HTTP_URL, "none");
|
||||
private static final KeyValue HTTP_URL_NONE = KeyValue.of(ClientHttpObservationDocumentation.HighCardinalityKeyNames.HTTP_URL, "none");
|
||||
|
||||
private static final KeyValue CLIENT_NAME_NONE = KeyValue.of(ClientHttpObservation.HighCardinalityKeyNames.CLIENT_NAME, "none");
|
||||
private static final KeyValue CLIENT_NAME_NONE = KeyValue.of(ClientHttpObservationDocumentation.HighCardinalityKeyNames.CLIENT_NAME, "none");
|
||||
|
||||
private final String name;
|
||||
|
||||
|
@ -86,14 +86,14 @@ public class DefaultClientObservationConvention implements ClientObservationConv
|
|||
|
||||
protected KeyValue uri(ClientObservationContext context) {
|
||||
if (context.getUriTemplate() != null) {
|
||||
return KeyValue.of(ClientObservation.LowCardinalityKeyNames.URI, context.getUriTemplate());
|
||||
return KeyValue.of(ClientObservationDocumentation.LowCardinalityKeyNames.URI, context.getUriTemplate());
|
||||
}
|
||||
return URI_NONE;
|
||||
}
|
||||
|
||||
protected KeyValue method(ClientObservationContext context) {
|
||||
if (context.getCarrier() != null) {
|
||||
return KeyValue.of(ClientObservation.LowCardinalityKeyNames.METHOD, context.getCarrier().method().name());
|
||||
return KeyValue.of(ClientObservationDocumentation.LowCardinalityKeyNames.METHOD, context.getCarrier().method().name());
|
||||
}
|
||||
else {
|
||||
return METHOD_NONE;
|
||||
|
@ -106,20 +106,22 @@ public class DefaultClientObservationConvention implements ClientObservationConv
|
|||
}
|
||||
ClientResponse response = context.getResponse();
|
||||
if (response != null) {
|
||||
return KeyValue.of(ClientObservation.LowCardinalityKeyNames.STATUS, String.valueOf(response.statusCode().value()));
|
||||
return KeyValue.of(ClientObservationDocumentation.LowCardinalityKeyNames.STATUS, String.valueOf(response.statusCode().value()));
|
||||
}
|
||||
if (context.getError().isPresent() && context.getError().get() instanceof IOException) {
|
||||
if (context.getError() != null && context.getError() instanceof IOException) {
|
||||
return STATUS_IO_ERROR;
|
||||
}
|
||||
return STATUS_CLIENT_ERROR;
|
||||
}
|
||||
|
||||
protected KeyValue exception(ClientObservationContext context) {
|
||||
return context.getError().map(exception -> {
|
||||
String simpleName = exception.getClass().getSimpleName();
|
||||
return KeyValue.of(ClientObservation.LowCardinalityKeyNames.EXCEPTION,
|
||||
StringUtils.hasText(simpleName) ? simpleName : exception.getClass().getName());
|
||||
}).orElse(EXCEPTION_NONE);
|
||||
Throwable error = context.getError();
|
||||
if (error != null) {
|
||||
String simpleName = error.getClass().getSimpleName();
|
||||
return KeyValue.of(ClientObservationDocumentation.LowCardinalityKeyNames.EXCEPTION,
|
||||
StringUtils.hasText(simpleName) ? simpleName : error.getClass().getName());
|
||||
}
|
||||
return EXCEPTION_NONE;
|
||||
}
|
||||
|
||||
protected KeyValue outcome(ClientObservationContext context) {
|
||||
|
@ -140,14 +142,14 @@ public class DefaultClientObservationConvention implements ClientObservationConv
|
|||
|
||||
protected KeyValue httpUrl(ClientObservationContext context) {
|
||||
if (context.getCarrier() != null) {
|
||||
return KeyValue.of(ClientObservation.HighCardinalityKeyNames.HTTP_URL, context.getCarrier().url().toASCIIString());
|
||||
return KeyValue.of(ClientObservationDocumentation.HighCardinalityKeyNames.HTTP_URL, context.getCarrier().url().toASCIIString());
|
||||
}
|
||||
return HTTP_URL_NONE;
|
||||
}
|
||||
|
||||
protected KeyValue clientName(ClientObservationContext context) {
|
||||
if (context.getCarrier() != null && context.getCarrier().url().getHost() != null) {
|
||||
return KeyValue.of(ClientObservation.HighCardinalityKeyNames.CLIENT_NAME, context.getCarrier().url().getHost());
|
||||
return KeyValue.of(ClientObservationDocumentation.HighCardinalityKeyNames.CLIENT_NAME, context.getCarrier().url().getHost());
|
||||
}
|
||||
return CLIENT_NAME_NONE;
|
||||
}
|
||||
|
|
|
@ -460,8 +460,8 @@ class DefaultWebClient implements WebClient {
|
|||
initRequestBuilder().body(this.inserter).build() :
|
||||
initRequestBuilder().build());
|
||||
return Mono.defer(() -> {
|
||||
Observation observation = ClientObservation.HTTP_REQUEST.observation(observationConvention,
|
||||
DEFAULT_OBSERVATION_CONVENTION, observationContext, observationRegistry).start();
|
||||
Observation observation = ClientObservationDocumentation.HTTP_REQUEST.observation(observationConvention,
|
||||
DEFAULT_OBSERVATION_CONVENTION, () -> observationContext, observationRegistry).start();
|
||||
observationContext.setCarrier(request);
|
||||
observationContext.setUriTemplate((String) request.attribute(URI_TEMPLATE_ATTRIBUTE).orElse(null));
|
||||
Mono<ClientResponse> responseMono = exchangeFunction.exchange(request)
|
||||
|
|
Loading…
Reference in New Issue