@Override
  public CompletableFuture<Response> execute(
      Request request, Options options, Optional<Object> requestContext) {
    final RequestTemplate template = request.requestTemplate();
    final Timer.Context timer = createTimer(template);
    return asyncClient
        .execute(request, options, requestContext)
        .whenComplete(
            (response, th) -> {
              if (th == null) {
                recordSuccess(template, response);
              } else if (th instanceof FeignException) {
                FeignException e = (FeignException) th;
                recordFailure(template, e);
              } else if (th instanceof Exception) {
                Exception e = (Exception) th;
                recordFailure(template, e);
              }
            })
        .whenComplete((response, th) -> timer.close());
  }
Warp feign {@link AsyncClient} with metrics.
dropwizard-metrics5/src/main/java/feign/metrics5/MeteredAsyncClient.java