Включение переменной пути конечной точки пружинной загрузки в качестве метрического измерения - PullRequest
0 голосов
/ 19 октября 2018

У меня есть конечная точка API: / user / {tenant} / create

Я использую пружинную загрузку 2 с микрометром для метрики.

По умолчанию аннотация @Timer для конечной точки пружинной загрузки 2 включаетследующие теги: исключение, метод, uri, состояние

Я хочу добавить переданное значение для параметра API "tenant" в качестве дополнительного тега для конечной точки

Как это сделать с помощью Springботинок 2 и микрометр

Ответы [ 2 ]

0 голосов
/ 19 октября 2018
@Bean
public WebMvcTagsProvider webMvcTagsProvider() {
    return new CustomWebMvcTagsProvider();
}

`

public class CustomWebMvcTagsProvider extends DefaultWebMvcTagsProvider {

public Iterable<Tag> getTags(HttpServletRequest request, HttpServletResponse response, Object handler, Throwable exception) {
    return Tags.of(super.getTags(request, response, handler, exception)).and(getTenantTag(request));
}

private Tag getTenantTag(HttpServletRequest request) {
    String tenant = ((Map<String, String>)request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE)).get("tenant");
    if(tenant == null){
        tenant = "na";
    }
    return Tag.of("tenant", tenant);
}

}

0 голосов
/ 19 октября 2018

Использовать пользовательские WebMvcTagsProvider, например:

@Bean
public WebMvcTagsProvider webMvcTagsProvider() {
    return new WebMvcTagsProvider() {
        @Override
        public Iterable<Tag> getTags(HttpServletRequest request, HttpServletResponse response, Object handler, Throwable exception) {
            return ((Map<String, String>) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE))
                    .entrySet()
                    .stream()
                    .map(entry -> new ImmutableTag(entry.getKey(), entry.getValue()))
                    .collect(Collectors.toList());
        }

        @Override
        public Iterable<Tag> getLongRequestTags(HttpServletRequest request, Object handler) {
            return new ArrayList<>();
        }
    };
}
...