Skip to content

Commit 6c50461

Browse files
authored
Merge pull request #42 from delphi-hub/feature/newRegistryAPI
Adapted registry interface to newest API version
2 parents 34a97f8 + a186175 commit 6c50461

File tree

1 file changed

+19
-63
lines changed

1 file changed

+19
-63
lines changed

src/main/scala/de/upb/cs/swt/delphi/instancemanagement/InstanceRegistry.scala

+19-63
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ object InstanceRegistry extends InstanceJsonSupport with AppLogging {
120120
def register(configuration: Configuration): Try[Long] = {
121121
val instance = createInstance(None, configuration.bindPort, configuration.instanceName)
122122

123-
Await.result(postInstance(instance, configuration.instanceRegistryUri + "/register") map { response =>
123+
Await.result(postInstance(instance, configuration.instanceRegistryUri + "/instances/register") map { response =>
124124
if (response.status == StatusCodes.OK) {
125125
Await.result(Unmarshal(response.entity).to[String] map { assignedID =>
126126
val id = assignedID.toLong
@@ -149,7 +149,7 @@ object InstanceRegistry extends InstanceJsonSupport with AppLogging {
149149
} else {
150150
val request = HttpRequest(method = HttpMethods.GET,
151151
configuration.instanceRegistryUri +
152-
s"/matchingInstance?Id=${configuration.assignedID.getOrElse(-1)}&ComponentType=ElasticSearch")
152+
s"/instances/${configuration.assignedID.getOrElse(-1)}/matchingInstance?ComponentType=ElasticSearch")
153153

154154
Await.result(Http(system).singleRequest(request.withHeaders(RawHeader("Authorization",s"Bearer ${AuthProvider.generateJwt()}"))) map { response =>
155155
response.status match {
@@ -189,12 +189,17 @@ object InstanceRegistry extends InstanceJsonSupport with AppLogging {
189189
Failure(new RuntimeException("Cannot post matching result to Instance Registry, assigned ElasticSearch instance has no ID."))
190190
} else {
191191
val idToPost = configuration.elasticsearchInstance.id.getOrElse(-1L)
192+
193+
val matchingData = JsObject("MatchingSuccessful" -> JsBoolean(isElasticSearchReachable),
194+
"SenderId" -> JsNumber(configuration.assignedID.getOrElse(-1L)))
195+
192196
val request = HttpRequest(
193197
method = HttpMethods.POST,
194-
configuration.instanceRegistryUri +
195-
s"/matchingResult?CallerId=${configuration.assignedID.getOrElse(-1)}&MatchedInstanceId=$idToPost&MatchingSuccessful=$isElasticSearchReachable")
198+
configuration.instanceRegistryUri + s"/instances/$idToPost/matchingResult")
196199

197-
Await.result(Http(system).singleRequest(request.withHeaders(RawHeader("Authorization",s"Bearer ${AuthProvider.generateJwt()}"))) map { response =>
200+
Await.result(Http(system).singleRequest(request
201+
.withHeaders(RawHeader("Authorization",s"Bearer ${AuthProvider.generateJwt()}"))
202+
.withEntity(ContentTypes.`application/json`, ByteString(matchingData.toJson.toString))) map { response =>
198203
if (response.status == StatusCodes.OK) {
199204
log.info(s"Successfully posted matching result to Instance Registry.")
200205
Success()
@@ -219,7 +224,8 @@ object InstanceRegistry extends InstanceJsonSupport with AppLogging {
219224
} else {
220225
val id: Long = configuration.assignedID.getOrElse(-1L)
221226

222-
val request = HttpRequest(method = HttpMethods.POST, configuration.instanceRegistryUri + s"/deregister?Id=$id")
227+
val request = HttpRequest(method = HttpMethods.POST, configuration.instanceRegistryUri +
228+
s"/instances/$id/deregister")
223229

224230
Await.result(Http(system).singleRequest(request.withHeaders(RawHeader("Authorization",s"Bearer ${AuthProvider.generateJwt()}"))) map { response =>
225231
if (response.status == StatusCodes.OK) {
@@ -241,9 +247,11 @@ object InstanceRegistry extends InstanceJsonSupport with AppLogging {
241247

242248
def postInstance(instance: Instance, uri: String)(): Future[HttpResponse] = {
243249
try {
244-
val request = HttpRequest(method = HttpMethods.POST, uri = uri, entity = instance.toJson(instanceFormat).toString())
250+
val request = HttpRequest(method = HttpMethods.POST, uri = uri)
245251
//Use generic name for startup, no id present at this point
246-
Http(system).singleRequest(request.withHeaders(RawHeader("Authorization",s"Bearer ${AuthProvider.generateJwt(useGenericName = true)}")))
252+
Http(system).singleRequest(request
253+
.withHeaders(RawHeader("Authorization",s"Bearer ${AuthProvider.generateJwt(useGenericName = true)}"))
254+
.withEntity(ContentTypes.`application/json`, ByteString(instance.toJson(instanceFormat).toString)))
247255
} catch {
248256
case dx: DeserializationException =>
249257
log.warning(s"Failed to deregister to Instance Registry, exception: $dx")
@@ -256,58 +264,6 @@ object InstanceRegistry extends InstanceJsonSupport with AppLogging {
256264
Instance(id, InetAddress.getLocalHost.getHostAddress,
257265
controlPort, name, ComponentType.WebApi, None, InstanceState.Running, List.empty[String], List.empty[InstanceLink], List.empty[InstanceLink])
258266

259-
def reportStart(id: String, configuration: Configuration): Try[ResponseEntity] = {
260-
val request = HttpRequest(method = HttpMethods.GET, configuration.instanceRegistryUri + "/reportStart")
261-
Await.result(Http(system).singleRequest(request) map { response =>
262-
if (response.status == StatusCodes.OK) {
263-
Success(response.entity)
264-
}
265-
else {
266-
val statuscode = response.status
267-
log.warning(s"Failed to perform reportStart, server returned $statuscode")
268-
Failure(new RuntimeException(s"Failed to perform reportStart, server returned $statuscode"))
269-
}
270-
} recover { case ex =>
271-
log.warning(s"Failed to perform reportStart, exception: $ex")
272-
Failure(new RuntimeException(s"Failed to perform reportStart, server returned, exception: $ex"))
273-
}, Duration.Inf)
274-
}
275-
276-
def reportFailure(id: String, configuration: Configuration): Try[ResponseEntity] = {
277-
278-
val request = HttpRequest(method = HttpMethods.GET, configuration.instanceRegistryUri + "/reportFailure")
279-
Await.result(Http(system).singleRequest(request) map { response =>
280-
if (response.status == StatusCodes.OK) {
281-
Success(response.entity)
282-
}
283-
else {
284-
val statuscode = response.status
285-
log.warning(s"Failed to perform reportFailure, server returned $statuscode")
286-
Failure(new RuntimeException(s"Failed to perform reportFailure, server returned $statuscode"))
287-
}
288-
} recover { case ex =>
289-
log.warning(s"Failed to perform reportFailure, server returned, exception: $ex")
290-
Failure(new RuntimeException(s"Failed to perform reportFailure, server returned, exception: $ex"))
291-
}, Duration.Inf)
292-
}
293-
294-
def reportStop(id: String, configuration: Configuration): Try[ResponseEntity] = {
295-
296-
val request = HttpRequest(method = HttpMethods.GET, configuration.instanceRegistryUri + "/reportStop")
297-
Await.result(Http(system).singleRequest(request) map { response =>
298-
if (response.status == StatusCodes.OK) {
299-
Success(response.entity)
300-
}
301-
else {
302-
val statuscode = response.status
303-
log.warning(s"Failed to perform reportStop, server returned $statuscode")
304-
Failure(new RuntimeException(s"Failed to perform reportStop, server returned $statuscode"))
305-
}
306-
} recover { case ex =>
307-
log.warning(s"Failed to perform reportStop, server returned, exception: $ex")
308-
Failure(new RuntimeException(s"Failed to perform reportStop, server returned, exception: $ex"))
309-
}, Duration.Inf)
310-
}
311267

312268
object ReportOperationType extends Enumeration {
313269
val Start: Value = Value("Start")
@@ -317,11 +273,11 @@ object InstanceRegistry extends InstanceJsonSupport with AppLogging {
317273
def toOperationUriString(operation: ReportOperationType.Value, id: Long): String = {
318274
operation match {
319275
case Start =>
320-
s"/reportStart?Id=$id"
276+
s"/instances/$id/reportStart"
321277
case Stop =>
322-
s"/reportStop?Id=$id"
278+
s"/instances/$id/reportStop"
323279
case _ =>
324-
s"/reportFailure?Id=$id"
280+
s"/instances/$id/reportFailure"
325281
}
326282
}
327283
}

0 commit comments

Comments
 (0)