image-loader/app/controllers/ImageLoaderManagement.scala (30 lines of code) (raw):

package controllers import org.apache.pekko.Done import com.gu.mediaservice.lib.aws.SimpleSqsMessageConsumer import com.gu.mediaservice.lib.management.{BuildInfo, Management} import play.api.libs.json.Json import play.api.mvc.{Action, AnyContent, ControllerComponents} import scala.concurrent.Future class ImageLoaderManagement( override val controllerComponents: ControllerComponents, override val buildInfo: BuildInfo, maybeIngestQueueAndProcessor:Option[(SimpleSqsMessageConsumer, Future[Done])] ) extends Management(controllerComponents, buildInfo) { override def healthCheck: Action[AnyContent] = Action { maybeIngestQueueAndProcessor match { case Some((ingestQueue, ingestQueueProcessorFuture)) => // healthcheck should fail if the processor completes - this would mean the application is no longer monitoring the queue val status = if (ingestQueueProcessorFuture.isCompleted) InternalServerError else Ok status(Json.obj( "status" -> (if (ingestQueueProcessorFuture.isCompleted) "ERROR" else "OK"), "hasIngestQueue" -> true, "ingestQueueStatus" -> ingestQueue.getStatus, "maybeIngestQueueProcessorFuture" -> ingestQueueProcessorFuture.toString )) case None => Ok(Json.obj( "status" -> "OK", "hasIngestQueue" -> false, )) } } }