序
本文主要研究一下 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