protected def callHttp = Http()

in app/vidispine/VidispineCommunicator.scala [19:59]


  protected def callHttp = Http()

  /**
   * Call out to Vidispine and return the content stream if successful. Use this for streaming raw content directly elsewhere
   * @param req HttpRequest to undertake, authorization is added to this
   * @param attempt Attempt counter, don't specify this
   * @param retryLimit Maximum number of retries
   * @return
   */
  protected def callToVidispineRaw(req: HttpRequest, attempt: Int = 1, retryLimit:Int=10):Future[Option[HttpEntity]] = if (attempt > retryLimit) {
    Future.failed(new RuntimeException("Too many retries, see logs for details"))
  } else {
    logger.debug(s"Vidispine request URL is ${req.uri.toString()}")

    val updatedReq = req.withHeaders(req.headers ++ Seq(Authorization(BasicHttpCredentials(config.username, config.password))))

    val loggerContext = Option(MDC.getCopyOfContextMap)

    callHttp
      .singleRequest(updatedReq)
      .flatMap(response=>{
        if(loggerContext.isDefined) MDC.setContextMap(loggerContext.get)
        AkkaHttpHelpers.handleResponse(response,"Vidispine")
      })
      .flatMap({
        case Right(Some(entity))=>
          if(loggerContext.isDefined) MDC.setContextMap(loggerContext.get)
          Future(Some(entity))
        case Right(None)=>
          if(loggerContext.isDefined) MDC.setContextMap(loggerContext.get)
          Future(None)
        case Left(RedirectRequired(newUri))=>
          if(loggerContext.isDefined) MDC.setContextMap(loggerContext.get)
          logger.info(s"Vidispine redirected to $newUri")
          callToVidispineRaw(req.withUri(newUri), attempt+1, retryLimit)
        case Left(RetryRequired)=>
          if(loggerContext.isDefined) MDC.setContextMap(loggerContext.get)
          Thread.sleep(500*attempt)
          callToVidispineRaw(req, attempt+1, retryLimit)
      })
  }