@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 static String arg(String name, RequestContext rc) { return rc.pathArgs().get(name); } }
private static String arg(String name, RequestContext rc) { return rc.pathArgs().get(name); }
public Stream<Route<AsyncHandler<Response<ByteString>>>> routes() { final List<Route<AsyncHandler<Response<ByteString>>>> schedulerProxies = Arrays.asList( Route.async( "GET", BASE + "/<endpoint:path>", rc -> proxyToScheduler("/" + rc.pathArgs().get("endpoint"), rc)), Route.async( "POST", BASE + "/<endpoint:path>", rc -> proxyToScheduler("/" + rc.pathArgs().get("endpoint"), rc)), Route.async( "DELETE", BASE + "/<endpoint:path>", rc -> proxyToScheduler("/" + rc.pathArgs().get("endpoint"), rc)), Route.async( "PATCH", BASE + "/<endpoint:path>", rc -> proxyToScheduler("/" + rc.pathArgs().get("endpoint"), rc)), Route.async( "PUT", BASE + "/<endpoint:path>", rc -> proxyToScheduler("/" + rc.pathArgs().get("endpoint"), rc)) ); return Api.prefixRoutes(schedulerProxies, V3); }
public Stream<Route<AsyncHandler<Response<ByteString>>>> routes() { final EntityMiddleware em = EntityMiddleware.forCodec(JacksonEntityCodec.forMapper(Json.OBJECT_MAPPER)); final List<Route<AsyncHandler<Response<ByteString>>>> routes = Stream.of( Route.with( em.serializerDirect(ResourcesPayload.class), "GET", BASE, rc -> getResources()), Route.with( em.direct(Resource.class), "POST", BASE, rc -> this::postResource), Route.with( em.serializerResponse(Resource.class), "GET", BASE + "/<rid>", rc -> getResource(rc.pathArgs().get("rid"))), Route.with( em.serializerResponse(Void.class), "DELETE", BASE + "/<rid>", rc -> deleteResource(rc.pathArgs().get("rid"))), Route.with( em.response(Resource.class), "PUT", BASE + "/<rid>", rc -> payload -> updateResource(rc.pathArgs().get("rid"), payload)) ) .map(r -> r.withMiddleware(Middleware::syncToAsync)) .collect(toList()); return Api.prefixRoutes(routes, V3); }
em.serializerResponse(BackfillPayload.class), "GET", BASE + "/<bid>", rc -> getBackfill(rc, rc.pathArgs().get("bid"))), Route.with( authedEntity(authenticator, em.response(EditableBackfillInput.class, Backfill.class)), "PUT", BASE + "/<bid>", ac -> rc -> payload -> updateBackfill(ac, rc.pathArgs().get("bid"), payload)) Route.async( "DELETE", BASE + "/<bid>", rc -> haltBackfill(rc.pathArgs().get("bid"), rc, authenticator)) );