in common/src/main/scala/com/theguardian/multimedia/archivehunter/common/ProxyTranscodeFramework/ProxyGenerators.scala [223:262]
def rerunProxyJob(jobUuid:UUID) = {
val entryFuture = jobModelDAO.jobForId(jobUuid.toString).flatMap({
case None=>Future(Left(s"No job found for ${jobUuid.toString}"))
case Some(Left(err))=>Future(Left(err.toString))
case Some(Right(jobModel))=>
indexer.getById(jobModel.sourceId).map(result=>Right((jobModel,result)))
})
entryFuture.flatMap({
case Left(err)=>Future(Left(err))
case Right(params)=>
val jobModel = params._1
val entry = params._2
val targetFuture = scanTargetDAO.targetForBucket(entry.bucket).map({
case None => throw new RuntimeException(s"Entry's source bucket ${entry.bucket} is not registered")
case Some(Left(err)) => throw new RuntimeException(err.toString)
case Some(Right(target)) => target
})
val uriToProxyFuture = getUriToProxy(entry)
jobModel.transcodeInfo match {
case Some(transcodeInfo)=>
Future.sequence(Seq(targetFuture, uriToProxyFuture)).flatMap(futures=> {
val target = futures.head.asInstanceOf[ScanTarget]
val uriToProxy = futures(1).asInstanceOf[Option[String]]
internalDoProxy(jobModel, transcodeInfo.requestType, transcodeInfo.proxyType, target, uriToProxy).map({
case Success(result) => Right(result)
case Failure(err) =>
logger.error("Could not run proxying: ", err)
Left(err.toString)
})
})
case None=>
Future(Left("No transcode info on this job"))
}
})
}