@Override public EndpointRunnableFactory apply(EndpointRunnableFactory delegate) { return (request, requestContext, endpoint) -> { final String endpointName = endpoint.info().getName(); // note: will not time duration of matching and dispatching final RequestMetrics requestStats = metrics.metricsForEndpointCall(endpointName); requestStats.incoming(request.request()); final TrackedOngoingRequest trackedRequest = new MetricsTrackingOngoingRequest(requestStats, request); final Client instrumentingClient = new InstrumentingClient(requestContext.requestScopedClient(), trackedRequest); final RequestContext instrumentingContext = RequestContexts.create( requestContext.request(), instrumentingClient, requestContext.pathArgs(), requestContext.arrivalTimeNanos(), requestContext.metadata()); return delegate.create(trackedRequest, instrumentingContext, endpoint); }; } }
private CompletionStage<Response<ByteString>> haltBackfill(String id, RequestContext rc, RequestAuthenticator authenticator) { final AuthContext authContext = authenticator.authenticate(rc.request()); try { // TODO: run in transction final Optional<Backfill> backfillOptional = storage.backfill(id); if (backfillOptional.isPresent()) { final Backfill backfill = backfillOptional.get(); workflowActionAuthorizer.authorizeWorkflowAction(authContext, backfill.workflowId()); storage.storeBackfill(backfill.builder().halted(true).build()); return haltActiveBackfillInstances(backfill, rc.requestScopedClient()); } else { return CompletableFuture.completedFuture( Response.forStatus(Status.NOT_FOUND.withReasonPhrase("backfill not found"))); } } catch (IOException e) { return CompletableFuture.completedFuture(Response.forStatus( Status.INTERNAL_SERVER_ERROR .withReasonPhrase("could not halt backfill: " + e.getMessage()))); } }