序
本文主要研究一下webflux的WebFluxTagsProvider
WebFluxTagsProvider
spring-boot-actuator-2.1.5.RELEASE-sources.jar!/org/springframework/boot/actuate/metrics/web/reactive/server/WebFluxTagsProvider.java
- @FunctionalInterface
- public interface WebFluxTagsProvider {
-
- /**
- * Provides tags to be associated with metrics for the given {@code exchange}.
- * @param exchange the exchange
- * @param ex the current exception (may be {@code null})
- * @return tags to associate with metrics for the request and response exchange
- */
- Iterable<Tag> httpRequestTags(ServerWebExchange exchange, Throwable ex);
-
- }
-
WebFluxTagsProvider接口定义了httpRequestTags方法
DefaultWebFluxTagsProvider
spring-boot-actuator-2.1.5.RELEASE-sources.jar!/org/springframework/boot/actuate/metrics/web/reactive/server/DefaultWebFluxTagsProvider.java
- public class DefaultWebFluxTagsProvider implements WebFluxTagsProvider {
-
- @Override
- public Iterable<Tag> httpRequestTags(ServerWebExchange exchange,
- Throwable exception) {
- return Arrays.asList(WebFluxTags.method(exchange), WebFluxTags.uri(exchange),
- WebFluxTags.exception(exception), WebFluxTags.status(exchange),
- WebFluxTags.outcome(exchange));
- }
-
- }
-
DefaultWebFluxTagsProvider实现了WebFluxTagsProvider接口,它返回了method、uri、exception、status、outcome这几个tag
WebFluxTags
spring-boot-actuator-2.1.5.RELEASE-sources.jar!/org/springframework/boot/actuate/metrics/web/reactive/server/WebFluxTags.java
- public final class WebFluxTags {
-
- private static final Tag URI_NOT_FOUND = Tag.of("uri", "NOT_FOUND");
-
- private static final Tag URI_REDIRECTION = Tag.of("uri", "REDIRECTION");
-
- private static final Tag URI_ROOT = Tag.of("uri", "root");
-
- private static final Tag URI_UNKNOWN = Tag.of("uri", "UNKNOWN");
-
- private static final Tag EXCEPTION_NONE = Tag.of("exception", "None");
-
- private static final Tag OUTCOME_UNKNOWN = Tag.of("outcome", "UNKNOWN");
-
- private static final Tag OUTCOME_INFORMATIONAL = Tag.of("outcome", "INFORMATIONAL");
-
- private static final Tag OUTCOME_SUCCESS = Tag.of("outcome", "SUCCESS");
-
- private static final Tag OUTCOME_REDIRECTION = Tag.of("outcome", "REDIRECTION");
-
- private static final Tag OUTCOME_CLIENT_ERROR = Tag.of("outcome", "CLIENT_ERROR");
-
- private static final Tag OUTCOME_SERVER_ERROR = Tag.of("outcome", "SERVER_ERROR");
-
- private WebFluxTags() {
- }
-
- public static Tag method(ServerWebExchange exchange) {
- return Tag.of("method", exchange.getRequest().getMethodValue());
- }
-
- public static Tag status(ServerWebExchange exchange) {
- HttpStatus status = exchange.getResponse().getStatusCode();
- if (status == null) {
- status = HttpStatus.OK;
- }
- return Tag.of("status", String.valueOf(status.value()));
- }
-
- public static Tag uri(ServerWebExchange exchange) {
- PathPattern pathPattern = exchange
- .getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
- if (pathPattern != null) {
- return Tag.of("uri", pathPattern.getPatternString());
- }
- HttpStatus status = exchange.getResponse().getStatusCode();
- if (status != null) {
- if (status.is3xxRedirection()) {
- return URI_REDIRECTION;
- }
- if (status == HttpStatus.NOT_FOUND) {
- return URI_NOT_FOUND;
- }
- }
- String path = getPathInfo(exchange);
- if (path.isEmpty()) {
- return URI_ROOT;
- }
- return URI_UNKNOWN;
- }
-
- private static String getPathInfo(ServerWebExchange exchange) {
- String path = exchange.getRequest().getPath().value();
- String uri = StringUtils.hasText(path) ? path : "/";
- return uri.replaceAll("//+", "/").replaceAll("/$", "");
- }
-
- public static Tag exception(Throwable exception) {
- if (exception != null) {
- String simpleName = exception.getClass().getSimpleName();
- return Tag.of("exception", StringUtils.hasText(simpleName) ? simpleName
- : exception.getClass().getName());
- }
- return EXCEPTION_NONE;
- }
-
- public static Tag outcome(ServerWebExchange exchange) {
- HttpStatus status = exchange.getResponse().getStatusCode();
- if (status != null) {
- if (status.is1xxInformational()) {
- return OUTCOME_INFORMATIONAL;
- }
- if (status.is2xxSuccessful()) {
- return OUTCOME_SUCCESS;
- }
- if (status.is3xxRedirection()) {
- return OUTCOME_REDIRECTION;
- }
- if (status.is4xxClientError()) {
- return OUTCOME_CLIENT_ERROR;
- }
- return OUTCOME_SERVER_ERROR;
- }
- return OUTCOME_UNKNOWN;
- }
-
- }
-
WebFluxTags定义了URI_NOT_FOUND、URI_REDIRECTION、URI_ROOT、URI_UNKNOWN、EXCEPTION_NONE、OUTCOME_UNKNOWN、OUTCOME_INFORMATIONAL、OUTCOME_SUCCESS、OUTCOME_REDIRECTION、OUTCOME_CLIENT_ERROR、OUTCOME_SERVER_ERROR这些Tag常量
小结
WebFluxTagsProvider接口定义了httpRequestTags方法;DefaultWebFluxTagsProvider实现了WebFluxTagsProvider接口,它返回了method、uri、exception、status、outcome这几个tag;WebFluxTags定义了URI_NOT_FOUND、URI_REDIRECTION、URI_ROOT、URI_UNKNOWN、EXCEPTION_NONE、OUTCOME_UNKNOWN、OUTCOME_INFORMATIONAL、OUTCOME_SUCCESS、OUTCOME_REDIRECTION、OUTCOME_CLIENT_ERROR、OUTCOME_SERVER_ERROR这些Tag常量
doc
WebFluxTagsProvider
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。