/visualization/src/main/scala/de/aktey/akka/visualmailbox/VisualMailboxMetricServer.scala

https://github.com/ouven/akka-visualmailbox · Scala · 49 lines · 35 code · 11 blank · 3 comment · 0 complexity · f1cefc9771331f6c1c9c2da0c974bfb6 MD5 · raw file

  1. package de.aktey.akka.visualmailbox
  2. import akka.actor.ActorSystem
  3. import akka.http.scaladsl.Http
  4. import akka.http.scaladsl.Http.ServerBinding
  5. import akka.io.Udp.{Bind, Bound, CommandFailed}
  6. import akka.io.{IO, Udp}
  7. import akka.pattern._
  8. import akka.stream.ActorMaterializer
  9. import akka.util.Timeout
  10. import com.typesafe.config.ConfigFactory
  11. import de.aktey.akka.visualmailbox.data.DataSourceEndpoint
  12. import de.aktey.akka.visualmailbox.web.{Routing, WebConfig}
  13. import scala.concurrent.duration._
  14. /**
  15. * Created by ruben on 10.05.16.
  16. */
  17. object VisualMailboxMetricServer extends App {
  18. val allConfig = ConfigFactory.load()
  19. val config = VisualMailboxMetricClientConfig.fromConfig(allConfig)
  20. implicit val system = ActorSystem("visualmailbox-visualizer")
  21. implicit val meterializer = ActorMaterializer()
  22. implicit val bindTimeout = Timeout(2.seconds)
  23. import system._
  24. val router = system.actorOf(MetricsRouter.props(), "router")
  25. val dataHandler = system.actorOf(DataSourceEndpoint.props(router), "data-sink")
  26. (IO(Udp) ? Bind(dataHandler, config.serverAddress)).map {
  27. case CommandFailed(cmd) =>
  28. system.terminate()
  29. case Bound(address) =>
  30. log.info(s"""{"type":"udp-bound","address":"$address"}""")
  31. }
  32. val webConfig = WebConfig.fromConfig(allConfig)
  33. Http()
  34. .bindAndHandle(Routing.root(MetricFlow.metricSource(router)), webConfig.host, webConfig.port)
  35. .foreach { case ServerBinding(address) =>
  36. log.info(s"""{"type":"http-bound","address":"$address"}""")
  37. }
  38. }