membership-attribute-service/app/controllers/HealthCheckController.scala (35 lines of code) (raw):

package controllers import com.gu.monitoring.SafeLogging import components.TouchpointBackends import play.api.libs.json.Json import play.api.mvc.{BaseController, ControllerComponents} import services.HealthCheckableService trait Test { def ok: Boolean def messages: Seq[String] = Nil } class BoolTest(name: String, exec: () => Boolean) extends Test { override def messages = List(s"Test $name failed, health check will fail") override def ok = exec() } class HealthCheckController(touchPointBackends: TouchpointBackends, override val controllerComponents: ControllerComponents) extends BaseController with SafeLogging { val touchpointComponents = touchPointBackends.normal // behaviourService, Stripe and all Zuora services are not critical private lazy val services: Set[HealthCheckableService] = Set( touchpointComponents.salesforceService, touchpointComponents.zuoraSoapService, ) private lazy val tests = services.map(service => new BoolTest(service.serviceName, () => service.checkHealth)) def healthCheck() = Action { Cached(1) { val failures = tests.filterNot(_.ok) if (failures.isEmpty) { Ok(Json.obj("status" -> "ok", "gitCommitId" -> app.BuildInfo.gitCommitId)) } else { failures.flatMap(_.messages).foreach(msg => logger.warnNoPrefix(msg)) ServiceUnavailable("Service Unavailable") } } } }