前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊聊spring boot的WebFluxTagsProvider

聊聊spring boot的WebFluxTagsProvider

原创
作者头像
code4it
修改2019-07-11 14:11:44
6780
修改2019-07-11 14:11:44
举报
文章被收录于专栏:码匠的流水账码匠的流水账

本文主要研究一下webflux的WebFluxTagsProvider

WebFluxTagsProvider

spring-boot-actuator-2.1.5.RELEASE-sources.jar!/org/springframework/boot/actuate/metrics/web/reactive/server/WebFluxTagsProvider.java

代码语言:javascript
复制
@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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • WebFluxTagsProvider
  • DefaultWebFluxTagsProvider
  • WebFluxTags
  • 小结
  • doc
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档