in s2rest_netty/src/main/scala/org/apache/s2graph/rest/netty/Server.scala [142:193]
override def channelRead0(ctx: ChannelHandlerContext, req: FullHttpRequest): Unit = {
val uri = req.getUri
val startedAt = System.currentTimeMillis()
val checkFunc = healthCheck(ctx) _
val updateFunc = updateHealthCheck(ctx) _
req.getMethod match {
case HttpMethod.GET =>
uri match {
case "/health_check.html" => checkFunc(NettyServer.isHealthy)
case "/fallback_check.html" => checkFunc(NettyServer.isFallbackHealthy)
case "/query_fallback_check.html" => checkFunc(NettyServer.isQueryFallbackHealthy)
case s if s.startsWith("/graphs/getEdge/") =>
if (!NettyServer.isQueryFallbackHealthy) {
val result = HandlerResult(body = Future.successful(PostProcess.emptyResults))
toResponse(ctx, req, s, result, startedAt)
} else {
val Array(srcId, tgtId, labelName, direction) = s.split("/").takeRight(4)
val params = Json.arr(Json.obj("label" -> labelName, "direction" -> direction, "from" -> srcId, "to" -> tgtId))
val result = s2rest.checkEdges(params)
toResponse(ctx, req, s, result, startedAt)
}
case _ => badRoute(ctx)
}
case HttpMethod.PUT =>
if (uri.startsWith("/health_check/")) {
val newValue = uri.split("/").last.toBoolean
updateFunc(newValue) { v => NettyServer.isHealthy = v }
} else if (uri.startsWith("/query_fallback_check/")) {
val newValue = uri.split("/").last.toBoolean
updateFunc(newValue) { v => NettyServer.isQueryFallbackHealthy = v }
} else if (uri.startsWith("/fallback_check/")) {
val newValue = uri.split("/").last.toBoolean
updateFunc(newValue) { v => NettyServer.isFallbackHealthy = v }
} else {
badRoute(ctx)
}
case HttpMethod.POST =>
val body = req.content.toString(CharsetUtil.UTF_8)
if (!NettyServer.isQueryFallbackHealthy) {
val result = HandlerResult(body = Future.successful(PostProcess.emptyResults))
toResponse(ctx, req, body, result, startedAt)
} else {
val result = s2rest.doPost(uri, body, req.headers())
toResponse(ctx, req, body, result, startedAt)
}
case _ =>
simpleResponse(ctx, BadRequest, byteBufOpt = None, channelFutureListenerOpt = CloseOpt)
}
}