def apply()

in server/src/main/scala/com/twitter/server/handler/ProfileResourceHandler.scala [18:51]


  def apply(req: Request): Future[Response] = {
    val uri = Uri.fromRequest(req)
    val params = uri.params.foldLeft(Params(10.seconds, 100)) {
      case (parameters, ("seconds", pauseVal)) =>
        parameters.copy(pause = pauseVal.toInt.seconds)
      case (parameters, ("hz", hz)) =>
        parameters.copy(frequency = hz.toInt)
      case (parameters, _) =>
        parameters
    }

    log.info(
      s"[${req.uri}] collecting CPU profile ($which) for ${params.pause} seconds at ${params.frequency}Hz"
    )

    CpuProfile.recordInThread(params.pause, params.frequency, which) transform {
      case Return(prof) =>
        // Write out the profile verbatim. It's a pprof "raw" profile.
        val bos = new ByteArrayOutputStream

        prof.writeGoogleProfile(bos)
        newResponse(
          contentType = "pprof/raw",
          content = Buf.ByteArray.Owned(bos.toByteArray)
        )

      case Throw(exc) =>
        newResponse(
          status = Status.InternalServerError,
          contentType = "text/plain;charset=UTF-8",
          content = Buf.Utf8(exc.toString)
        )
    }
  }