/magda-search-api/src/main/scala/au/csiro/data61/magda/MagdaApp.scala

https://github.com/magda-io/magda · Scala · 68 lines · 56 code · 12 blank · 0 comment · 0 complexity · 65140d14afd0484c29c618188bf89208 MD5 · raw file

  1. package au.csiro.data61.magda
  2. import akka.actor.{Actor, ActorLogging, ActorSystem, DeadLetter, Props}
  3. import akka.event.Logging
  4. import akka.http.scaladsl.Http
  5. import akka.http.scaladsl.model.HttpResponse
  6. import akka.http.scaladsl.model.StatusCodes
  7. import akka.http.scaladsl.server.Directives.complete
  8. import akka.http.scaladsl.server.{
  9. MalformedQueryParamRejection,
  10. RejectionHandler
  11. }
  12. import akka.stream.ActorMaterializer
  13. import au.csiro.data61.magda.api.SearchApi
  14. import au.csiro.data61.magda.search.elasticsearch.{
  15. DefaultClientProvider,
  16. ElasticSearchQueryer
  17. }
  18. object MagdaApp extends App {
  19. implicit val config = AppConfig.conf()
  20. implicit val system = ActorSystem("search-api", config)
  21. implicit val executor = system.dispatcher
  22. implicit val materializer = ActorMaterializer()
  23. implicit val clientProvider = new DefaultClientProvider
  24. implicit val logger = Logging(system, getClass)
  25. implicit def myRejectionHandler =
  26. RejectionHandler
  27. .newBuilder()
  28. .handle {
  29. case MalformedQueryParamRejection(parameterName, errorMsg, cause) =>
  30. complete(
  31. HttpResponse(
  32. StatusCodes.BadRequest,
  33. entity = s"The query parameter `${parameterName}` was malformed."
  34. )
  35. )
  36. }
  37. .result()
  38. logger.info("Starting Search API on port {}", config.getString("http.port"))
  39. val listener = system.actorOf(Props(classOf[Listener]))
  40. system.eventStream.subscribe(listener, classOf[DeadLetter])
  41. val searchQueryer = ElasticSearchQueryer.apply
  42. val api = new SearchApi(searchQueryer)
  43. val interface = Option(System.getenv("npm_package_config_interface"))
  44. .orElse(Option(config.getString("http.interface")))
  45. .getOrElse("127.0.0.1")
  46. val port = Option(System.getenv("npm_package_config_port"))
  47. .map(_.toInt)
  48. .orElse(Option(config.getInt("http.port")))
  49. .getOrElse(6102)
  50. Http().bindAndHandle(api.routes, interface, port)
  51. }
  52. class Listener extends Actor with ActorLogging {
  53. def receive = {
  54. case d: DeadLetter => log.debug(d.message.toString())
  55. }
  56. }