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);
}
}