override def channelRead0()

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