/** * Starts the collection of the {@link Request} information. This method sets the following properties: * <ul> * <li>{@link RequestLog#requestStartTimeMillis()}</li> * <li>{@link RequestLog#requestStartTimeMicros()}</li> * <li>{@link RequestLog#requestStartTimeNanos()}</li> * <li>{@link RequestLog#channel()}</li> * <li>{@link RequestLog#sessionProtocol()}</li> * <li>{@link RequestLog#authority()}</li> * <li>{@link RequestLog#sslSession()}</li> * </ul> * * @param channel the {@link Channel} which handled the {@link Request}. * @param sessionProtocol the {@link SessionProtocol} of the connection. */ default void startRequest(Channel channel, SessionProtocol sessionProtocol) { requireNonNull(channel, "channel"); requireNonNull(sessionProtocol, "sessionProtocol"); startRequest(channel, sessionProtocol, ChannelUtil.findSslSession(channel, sessionProtocol)); }
/** * Starts the collection of the {@link Request} information. This method sets the following properties: * <ul> * <li>{@link RequestLog#requestStartTimeMillis()}</li> * <li>{@link RequestLog#requestStartTimeMicros()}</li> * <li>{@link RequestLog#requestStartTimeNanos()}</li> * <li>{@link RequestLog#channel()}</li> * <li>{@link RequestLog#sessionProtocol()}</li> * <li>{@link RequestLog#authority()}</li> * <li>{@link RequestLog#sslSession()}</li> * </ul> * * @param channel the {@link Channel} which handled the {@link Request}. * @param sessionProtocol the {@link SessionProtocol} of the connection. * @param requestStartTimeNanos {@link System#nanoTime()} value when the request started. * @param requestStartTimeMicros the number of microseconds since the epoch, * e.g. {@code System.currentTimeMillis() * 1000}. */ default void startRequest(Channel channel, SessionProtocol sessionProtocol, long requestStartTimeNanos, long requestStartTimeMicros) { requireNonNull(channel, "channel"); requireNonNull(sessionProtocol, "sessionProtocol"); startRequest(channel, sessionProtocol, ChannelUtil.findSslSession(channel, sessionProtocol), requestStartTimeNanos, requestStartTimeMicros); }
private EarlyRespondingRequestContext newEarlyRespondingRequestContext(ChannelHandlerContext ctx, DecodedHttpRequest req, String path, @Nullable String query) { final Channel channel = ctx.channel(); final EarlyRespondingRequestContext reqCtx = new EarlyRespondingRequestContext(channel, NoopMeterRegistry.get(), protocol(), req.method(), path, query, req); final RequestLogBuilder logBuilder = reqCtx.logBuilder(); logBuilder.startRequest(channel, protocol()); logBuilder.requestHeaders(req.headers()); return reqCtx; }
private boolean handleEarlyCancellation(ClientRequestContext ctx, HttpRequest req, DecodedHttpResponse res) { if (res.isOpen()) { return false; } // The response has been closed even before its request is sent. assert protocol != null; req.abort(); ctx.logBuilder().startRequest(channel, protocol); ctx.logBuilder().requestHeaders(req.headers()); req.completionFuture().handle((unused, cause) -> { if (cause == null) { ctx.logBuilder().endRequest(); } else { ctx.logBuilder().endRequest(cause); } return null; }); res.completionFuture().handle((unused, cause) -> { if (cause == null) { ctx.logBuilder().endResponse(); } else { ctx.logBuilder().endResponse(cause); } return null; }); return true; }
private void writeFirstHeader() { final HttpSession session = HttpSession.get(ch); if (!session.canSendRequest()) { failAndRespond(UnprocessedRequestException.get()); return; } final HttpHeaders firstHeaders = autoFillHeaders(ch); final SessionProtocol protocol = session.protocol(); assert protocol != null; logBuilder.startRequest(ch, protocol); logBuilder.requestHeaders(firstHeaders); if (request.isEmpty()) { state = State.DONE; write0(firstHeaders, true, true); } else { state = State.NEEDS_DATA_OR_TRAILING_HEADERS; write0(firstHeaders, false, true); } }
/** * Returns a new {@link ClientRequestContext} created with the properties of this builder. */ public ClientRequestContext build() { final Endpoint endpoint; if (this.endpoint != null) { endpoint = this.endpoint; } else { endpoint = Endpoint.parse(authority()); } final DefaultClientRequestContext ctx = new DefaultClientRequestContext( eventLoop(), meterRegistry(), sessionProtocol(), endpoint, method(), path(), query(), fragment, options, request()); if (isRequestStartTimeSet()) { ctx.logBuilder().startRequest(fakeChannel(), sessionProtocol(), sslSession(), requestStartTimeNanos(), requestStartTimeMicros()); } else { ctx.logBuilder().startRequest(fakeChannel(), sessionProtocol(), sslSession()); } if (request() instanceof HttpRequest) { ctx.logBuilder().requestHeaders(((HttpRequest) request()).headers()); } else { ctx.logBuilder().requestContent(request(), null); } return ctx; } }