Я написал обработчик ratpack, который измеряет время выполнения цепочки обработчиков.
public class EndpointMetricsEmitter implements Handler {
public static final String HANDLE_DURATION_METRIC = "HANDLE_DURATION_MILLIS";
private final MetricContext baseContext;
private MonitoringRegistry registry;
public EndpointMetricsEmitter(MonitoringRegistry monitoringRegistry) {
this.registry = monitoringRegistry;
this.baseContext = MetricContext.newContext(REST);
}
@Override
public void handle(Context ctx) throws Exception {
Instant start = Instant.now();
ctx.next();
Instant end = Instant.now();
long dur = Duration.between(start, end).toMillis();
MetricContext endpointCtx = this.baseContext.withService(ctx.getPathBinding().getDescription());
this.registry.timer(endpointCtx, HANDLE_DURATION_METRIC, dur);
}
Проблема в том, что я понял, что ctx.next()
- это асинхронный c метод, и он возвращает void
.
есть ли способ вызвать функцию, когда возвращается последний обработчик цепочки?
спасибо