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