ObservationHandler<ServerRequestObservationContext> не предоставляет значения контекста DefaultServerRequestObservationCJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 ObservationHandler<ServerRequestObservationContext> не предоставляет значения контекста DefaultServerRequestObservationC

Сообщение Anonymous »

Я пытаюсь использовать и расширить решение API Observation API Spring Boot для инструментирования метрик для Spring MVC http.server.requests.
Я пытаюсь добавить пользовательский тег с длительностью ключа и значением времени выполнения http-запроса в мс. Для этого я предоставил @Bean, который расширяет DefaultServerRequestObservationConvention из пакета org.springframework.http.server.observation следующим образом:

Код: Выделить всё

public class ExtendedServerRequestObservationConvention extends DefaultServerRequestObservationConvention {

...

@Override
@NonNull
public KeyValues getHighCardinalityKeyValues(@NonNull ServerRequestObservationContext context) {
return super.getHighCardinalityKeyValues(context).and(addTag(context));
}

// additional tag that we want to include in the metrics
protected KeyValue addTag(ServerRequestObservationContext context) {
String requestDuration = context.get("duration");
assert requestDuration != null;
return KeyValue.of("duration", requestDuration);
}
}```

Чтобы измерить продолжительность, я попытался использовать таймер из Observation.Context и добавить значение в контекст с помощью context.put()
Чтобы измерить продолжительность, я попытался использовать таймер из Observation.Context и добавить значение в контекст с помощью context.put()
код>, вот так:

Код: Выделить всё

public class ExtendedObservationHandler implements ObservationHandler {

...
@Override
public void onStop(ServerRequestObservationContext context) {
LongTaskTimer.Sample sample = context.get(LongTaskTimer.Sample.class);
if (sample != null) {
// Get the duration in the desired time unit, e.g., milliseconds
double duration = sample.duration(java.util.concurrent.TimeUnit.MILLISECONDS);
String durationStr = String.valueOf(duration);
System.out.println("Request duration: " + durationStr + "ms");
context.put("duration", durationStr);
}

ObservationHandler.super.onStop(context);
}

@Override
public boolean supportsContext(@NonNull Observation.Context context) {
return context instanceof ServerRequestObservationContext;
}
}
Проблема в том, что значение продолжительности недоступно, когда я пытаюсь получить его с помощью context.get('duration') в ExtendedServerRequestObservationConvention. У меня оба класса настроены как @Bean, они оба работают, но не «вместе».
Что мне не хватает? Может кто-нибудь может помочь? Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/787 ... ntext-valu
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»