聊聊spring boot的WebFluxTagsProvider的使用

网友投稿 323 2023-01-02


聊聊spring boot的WebFluxTagsProvider的使用

本文主要研究一下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 WebFluxTaghttp://sProvider {

/**

* 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 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 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这UjJZVOlO几个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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring Boot利用Docker快速部署项目的完整步骤
下一篇:实现接口使用什么关键字(定义接口和实现接口关键字)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~