/integration-test/marathon-api-docker/src/main/scala/akka/cluster/bootstrap/MarathonApiDockerDemoApp.scala

https://github.com/akka/akka-management · Scala · 46 lines · 33 code · 10 blank · 3 comment · 3 complexity · c3a6573444916ee96d96ed0d01618067 MD5 · raw file

  1. /*
  2. * Copyright (C) 2017-2020 Lightbend Inc. <https://www.lightbend.com>
  3. */
  4. package akka.cluster.bootstrap
  5. import akka.actor.ActorSystem
  6. import akka.cluster.{ Cluster, MemberStatus }
  7. import akka.http.scaladsl.Http
  8. import akka.http.scaladsl.model._
  9. import akka.http.scaladsl.server.Directives._
  10. import akka.management.cluster.bootstrap.ClusterBootstrap
  11. import akka.management.scaladsl.AkkaManagement
  12. import akka.stream.ActorMaterializer
  13. object MarathonApiDockerDemoApp extends App {
  14. implicit val system = ActorSystem("my-system")
  15. implicit val materializer = ActorMaterializer()
  16. val cluster = Cluster(system)
  17. def isReady() = {
  18. val selfNow = cluster.selfMember
  19. selfNow.status == MemberStatus.Up
  20. }
  21. def isHealthy() = {
  22. isReady()
  23. }
  24. val route =
  25. concat(
  26. path("ping")(complete("pong!")),
  27. path("healthy")(complete(if (isHealthy()) StatusCodes.OK else StatusCodes.ServiceUnavailable)),
  28. path("ready")(complete(if (isReady()) StatusCodes.OK else StatusCodes.ServiceUnavailable))
  29. )
  30. AkkaManagement(system).start()
  31. ClusterBootstrap(system).start()
  32. Http().bindAndHandle(
  33. route,
  34. sys.env.get("HOST").getOrElse("127.0.0.1"),
  35. sys.env.get("PORT_HTTP").map(_.toInt).getOrElse(8080))
  36. }