diff --git a/src/main/scala/de/upb/cs/swt/delphi/instancemanagement/InstanceRegistry.scala b/src/main/scala/de/upb/cs/swt/delphi/instancemanagement/InstanceRegistry.scala index 2623bab..6a7517c 100644 --- a/src/main/scala/de/upb/cs/swt/delphi/instancemanagement/InstanceRegistry.scala +++ b/src/main/scala/de/upb/cs/swt/delphi/instancemanagement/InstanceRegistry.scala @@ -120,7 +120,7 @@ object InstanceRegistry extends InstanceJsonSupport with AppLogging { def register(configuration: Configuration): Try[Long] = { val instance = createInstance(None, configuration.bindPort, configuration.instanceName) - Await.result(postInstance(instance, configuration.instanceRegistryUri + "/register") map { response => + Await.result(postInstance(instance, configuration.instanceRegistryUri + "/instances/register") map { response => if (response.status == StatusCodes.OK) { Await.result(Unmarshal(response.entity).to[String] map { assignedID => val id = assignedID.toLong @@ -149,7 +149,7 @@ object InstanceRegistry extends InstanceJsonSupport with AppLogging { } else { val request = HttpRequest(method = HttpMethods.GET, configuration.instanceRegistryUri + - s"/matchingInstance?Id=${configuration.assignedID.getOrElse(-1)}&ComponentType=ElasticSearch") + s"/instances/${configuration.assignedID.getOrElse(-1)}/matchingInstance?ComponentType=ElasticSearch") Await.result(Http(system).singleRequest(request.withHeaders(RawHeader("Authorization",s"Bearer ${AuthProvider.generateJwt()}"))) map { response => response.status match { @@ -189,12 +189,17 @@ object InstanceRegistry extends InstanceJsonSupport with AppLogging { Failure(new RuntimeException("Cannot post matching result to Instance Registry, assigned ElasticSearch instance has no ID.")) } else { val idToPost = configuration.elasticsearchInstance.id.getOrElse(-1L) + + val matchingData = JsObject("MatchingSuccessful" -> JsBoolean(isElasticSearchReachable), + "SenderId" -> JsNumber(configuration.assignedID.getOrElse(-1L))) + val request = HttpRequest( method = HttpMethods.POST, - configuration.instanceRegistryUri + - s"/matchingResult?CallerId=${configuration.assignedID.getOrElse(-1)}&MatchedInstanceId=$idToPost&MatchingSuccessful=$isElasticSearchReachable") + configuration.instanceRegistryUri + s"/instances/$idToPost/matchingResult") - Await.result(Http(system).singleRequest(request.withHeaders(RawHeader("Authorization",s"Bearer ${AuthProvider.generateJwt()}"))) map { response => + Await.result(Http(system).singleRequest(request + .withHeaders(RawHeader("Authorization",s"Bearer ${AuthProvider.generateJwt()}")) + .withEntity(ContentTypes.`application/json`, ByteString(matchingData.toJson.toString))) map { response => if (response.status == StatusCodes.OK) { log.info(s"Successfully posted matching result to Instance Registry.") Success() @@ -219,7 +224,8 @@ object InstanceRegistry extends InstanceJsonSupport with AppLogging { } else { val id: Long = configuration.assignedID.getOrElse(-1L) - val request = HttpRequest(method = HttpMethods.POST, configuration.instanceRegistryUri + s"/deregister?Id=$id") + val request = HttpRequest(method = HttpMethods.POST, configuration.instanceRegistryUri + + s"/instances/$id/deregister") Await.result(Http(system).singleRequest(request.withHeaders(RawHeader("Authorization",s"Bearer ${AuthProvider.generateJwt()}"))) map { response => if (response.status == StatusCodes.OK) { @@ -241,9 +247,11 @@ object InstanceRegistry extends InstanceJsonSupport with AppLogging { def postInstance(instance: Instance, uri: String)(): Future[HttpResponse] = { try { - val request = HttpRequest(method = HttpMethods.POST, uri = uri, entity = instance.toJson(instanceFormat).toString()) + val request = HttpRequest(method = HttpMethods.POST, uri = uri) //Use generic name for startup, no id present at this point - Http(system).singleRequest(request.withHeaders(RawHeader("Authorization",s"Bearer ${AuthProvider.generateJwt(useGenericName = true)}"))) + Http(system).singleRequest(request + .withHeaders(RawHeader("Authorization",s"Bearer ${AuthProvider.generateJwt(useGenericName = true)}")) + .withEntity(ContentTypes.`application/json`, ByteString(instance.toJson(instanceFormat).toString))) } catch { case dx: DeserializationException => log.warning(s"Failed to deregister to Instance Registry, exception: $dx") @@ -256,58 +264,6 @@ object InstanceRegistry extends InstanceJsonSupport with AppLogging { Instance(id, InetAddress.getLocalHost.getHostAddress, controlPort, name, ComponentType.WebApi, None, InstanceState.Running, List.empty[String], List.empty[InstanceLink], List.empty[InstanceLink]) - def reportStart(id: String, configuration: Configuration): Try[ResponseEntity] = { - val request = HttpRequest(method = HttpMethods.GET, configuration.instanceRegistryUri + "/reportStart") - Await.result(Http(system).singleRequest(request) map { response => - if (response.status == StatusCodes.OK) { - Success(response.entity) - } - else { - val statuscode = response.status - log.warning(s"Failed to perform reportStart, server returned $statuscode") - Failure(new RuntimeException(s"Failed to perform reportStart, server returned $statuscode")) - } - } recover { case ex => - log.warning(s"Failed to perform reportStart, exception: $ex") - Failure(new RuntimeException(s"Failed to perform reportStart, server returned, exception: $ex")) - }, Duration.Inf) - } - - def reportFailure(id: String, configuration: Configuration): Try[ResponseEntity] = { - - val request = HttpRequest(method = HttpMethods.GET, configuration.instanceRegistryUri + "/reportFailure") - Await.result(Http(system).singleRequest(request) map { response => - if (response.status == StatusCodes.OK) { - Success(response.entity) - } - else { - val statuscode = response.status - log.warning(s"Failed to perform reportFailure, server returned $statuscode") - Failure(new RuntimeException(s"Failed to perform reportFailure, server returned $statuscode")) - } - } recover { case ex => - log.warning(s"Failed to perform reportFailure, server returned, exception: $ex") - Failure(new RuntimeException(s"Failed to perform reportFailure, server returned, exception: $ex")) - }, Duration.Inf) - } - - def reportStop(id: String, configuration: Configuration): Try[ResponseEntity] = { - - val request = HttpRequest(method = HttpMethods.GET, configuration.instanceRegistryUri + "/reportStop") - Await.result(Http(system).singleRequest(request) map { response => - if (response.status == StatusCodes.OK) { - Success(response.entity) - } - else { - val statuscode = response.status - log.warning(s"Failed to perform reportStop, server returned $statuscode") - Failure(new RuntimeException(s"Failed to perform reportStop, server returned $statuscode")) - } - } recover { case ex => - log.warning(s"Failed to perform reportStop, server returned, exception: $ex") - Failure(new RuntimeException(s"Failed to perform reportStop, server returned, exception: $ex")) - }, Duration.Inf) - } object ReportOperationType extends Enumeration { val Start: Value = Value("Start") @@ -317,11 +273,11 @@ object InstanceRegistry extends InstanceJsonSupport with AppLogging { def toOperationUriString(operation: ReportOperationType.Value, id: Long): String = { operation match { case Start => - s"/reportStart?Id=$id" + s"/instances/$id/reportStart" case Stop => - s"/reportStop?Id=$id" + s"/instances/$id/reportStop" case _ => - s"/reportFailure?Id=$id" + s"/instances/$id/reportFailure" } } }