public void channelRead()

in src/main/java/com/uber/rss/handlers/HttpChannelInboundHandler.java [45:91]


    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        if (msg instanceof FullHttpRequest) {
            final FullHttpRequest request = (FullHttpRequest) msg;

            HttpResponseStatus status;
            String responseMessage;
            // TODO More detailed HTTP server, for now it's just the health check
            if (request.uri().startsWith("/health")) {
                long startTime = System.currentTimeMillis();
                try {
                    logger.info("Hit /health endpoint sysenv: " + System.getenv("UBER_HEALTH_CHECK_TIMEOUT_RSS"));
                    // disable checkDiskFreeSpace for long time spending to minute level
                    // FileUtils.checkDiskFreeSpace(MIN_TOTAL_DISK_SPACE, MIN_FREE_DISK_SPACE);
                } catch(Throwable ex) {
                    logger.error("Failed at checkDiskFreeSpace", ex);
                    M3Stats.addException(ex, this.getClass().getSimpleName()+"CheckDiskFreeSpace");
                    throw ex;
                } finally {
                    responseMessage = "OK";
                    status = HttpResponseStatus.OK;
                    healthServerLatency.update(System.currentTimeMillis() - startTime);
                }
            } else if (request.uri().startsWith("/threadDump")) {
                responseMessage = Arrays.stream(org.apache.spark.util.Utils.getThreadDump())
                        .map(t->String.valueOf(t))
                        .collect(Collectors.joining(System.lineSeparator() + "----------" + System.lineSeparator()));
                status = HttpResponseStatus.OK;
            } else {
                responseMessage = String.format("%s not found", request.uri());
                status = HttpResponseStatus.NOT_FOUND;
            }
            FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, status,
                    copiedBuffer(responseMessage.getBytes()));

            response.headers().set(HttpHeaderNames.CONTENT_TYPE, "text/plain");
            response.headers().set(HttpHeaderNames.CONTENT_LENGTH, responseMessage.length());

            if (HttpUtil.isKeepAlive(request)) {
                response.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE);
                ctx.writeAndFlush(response, ctx.voidPromise());
            } else {
                ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE);
            }
        } else {
            super.channelRead(ctx, msg);
        }
    }