Skip to content

Commit 989e425

Browse files
author
Johannes Duesing
committed
Merge branch 'feature/adapt-swagger-model' into feature/instanceregistry
2 parents ca17f1f + 5546b31 commit 989e425

File tree

3 files changed

+54
-28
lines changed

3 files changed

+54
-28
lines changed

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import spray.json.{DefaultJsonProtocol, JsString, JsValue, JsonFormat}
55

66
trait JsonSupport extends SprayJsonSupport with DefaultJsonProtocol {
77
implicit val componentTypeFormat = new JsonFormat[InstanceEnums.ComponentType] {
8-
def write(compType : InstanceEnums.ComponentType) = JsString(compType.toString())
8+
def write(compType : InstanceEnums.ComponentType) = JsString(compType.toString)
99

1010
def read(value: JsValue) = value match {
1111
case JsString(s) => s match {
@@ -24,11 +24,11 @@ trait JsonSupport extends SprayJsonSupport with DefaultJsonProtocol {
2424

2525
final case class Instance (
2626
iD: Option[Long],
27-
iP: Option[String],
28-
portnumber: Option[Long],
29-
name: Option[String],
27+
host: String,
28+
portnumber: Int,
29+
name: String,
3030
/* Component Type */
31-
componentType: Option[InstanceEnums.ComponentType]
31+
componentType: InstanceEnums.ComponentType
3232
)
3333

3434
object InstanceEnums {
@@ -42,4 +42,4 @@ object InstanceEnums {
4242
val ElasticSearch = Value("ElasticSearch")
4343
}
4444

45-
}
45+
}

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

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,25 @@ package de.upb.cs.swt.delphi.instancemanagement
22

33
import java.net.InetAddress
44

5+
import akka.actor.ActorSystem
56
import akka.http.scaladsl.Http
67
import akka.http.scaladsl.marshalling.Marshal
78
import akka.http.scaladsl.model._
89
import akka.http.scaladsl.unmarshalling.Unmarshal
10+
import akka.stream.ActorMaterializer
911
import de.upb.cs.swt.delphi.instancemanagement.InstanceEnums.ComponentType
1012
import de.upb.cs.swt.delphi.webapi.{AppLogging, Configuration, Server}
1113

12-
13-
import scala.concurrent.{Await, Future}
14+
import scala.concurrent.{Await, ExecutionContext, Future}
1415
import scala.concurrent.duration.Duration
1516
import scala.util.{Failure, Success, Try}
1617

1718
object InstanceRegistry extends JsonSupport with AppLogging
1819
{
1920

20-
implicit val system = Server.system
21-
implicit val ec = system.dispatcher
22-
implicit val materializer = Server.materializer
21+
implicit val system : ActorSystem = Server.system
22+
implicit val ec : ExecutionContext = system.dispatcher
23+
implicit val materializer : ActorMaterializer = Server.materializer
2324

2425

2526
def register(configuration: Configuration) : Try[Long] = {
@@ -59,8 +60,8 @@ object InstanceRegistry extends JsonSupport with AppLogging
5960
if(status == StatusCodes.OK) {
6061

6162
Await.result(Unmarshal(response.entity).to[Instance] map {instance =>
62-
val elasticIP = instance.iP
63-
log.info(s"Instance Registry assigned ElasticSearch instance at ${elasticIP.getOrElse("None")}")
63+
val elasticIP = instance.host
64+
log.info(s"Instance Registry assigned ElasticSearch instance at $elasticIP")
6465
Success(instance)
6566
} recover {case ex =>
6667
log.warning(s"Failed to read response from Instance Registry, exception: $ex")
@@ -85,10 +86,10 @@ object InstanceRegistry extends JsonSupport with AppLogging
8586
if(configuration.elasticsearchInstance.iD.isEmpty) {
8687
Failure(new RuntimeException("Cannot post matching result to Instance Registry, assigned ElasticSearch instance has no ID."))
8788
} else {
88-
val IdToPost = configuration.elasticsearchInstance.iD.get
89+
val idToPost = configuration.elasticsearchInstance.iD.getOrElse(-1L)
8990
val request = HttpRequest(
9091
method = HttpMethods.POST,
91-
configuration.instanceRegistryUri + s"/matchingResult?Id=$IdToPost&MatchingSuccessful=$isElasticSearchReachable")
92+
configuration.instanceRegistryUri + s"/matchingResult?Id=$idToPost&MatchingSuccessful=$isElasticSearchReachable")
9293

9394
Await.result(Http(system).singleRequest(request) map {response =>
9495
if(response.status == StatusCodes.OK){
@@ -114,7 +115,7 @@ object InstanceRegistry extends JsonSupport with AppLogging
114115
if(!configuration.usingInstanceRegistry){
115116
Failure(new RuntimeException("Cannot deregister from Instance Registry, no Instance Registry available."))
116117
} else {
117-
val id : Long = configuration.assignedID.get
118+
val id : Long = configuration.assignedID.getOrElse(-1L)
118119

119120
val request = HttpRequest(method = HttpMethods.POST, configuration.instanceRegistryUri + s"/deregister?Id=$id")
120121

@@ -144,5 +145,5 @@ object InstanceRegistry extends JsonSupport with AppLogging
144145

145146

146147
private def createInstance(id: Option[Long], controlPort : Int, name : String) : Instance =
147-
Instance(id, Option(InetAddress.getLocalHost.getHostAddress), Option(controlPort), Option(name), Option(ComponentType.Crawler))
148+
Instance(id, InetAddress.getLocalHost.getHostAddress, controlPort, name, ComponentType.WebApi)
148149
}

src/main/scala/de/upb/cs/swt/delphi/webapi/Configuration.scala

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import com.sksamuel.elastic4s.http.ElasticDsl._
55
import de.upb.cs.swt.delphi.instancemanagement.InstanceEnums.ComponentType
66
import de.upb.cs.swt.delphi.instancemanagement.{Instance, InstanceRegistry}
77

8-
import scala.util.{Failure, Success}
8+
import scala.util.{Failure, Success, Try}
99

1010
/**
1111
* @author Ben Hermann
@@ -20,21 +20,22 @@ class Configuration( //Server and Elasticsearch configuration
2020
) {
2121

2222

23-
lazy val elasticsearchClientUri: ElasticsearchClientUri = ElasticsearchClientUri({
24-
if(elasticsearchInstance.portnumber.isEmpty){
25-
elasticsearchInstance.iP.getOrElse("elasticsearch://localhost:9200")
26-
}else{
27-
elasticsearchInstance.iP.getOrElse("elasticsearch://localhost") + ":" + elasticsearchInstance.portnumber.getOrElse("9200")
28-
}
29-
})
23+
lazy val elasticsearchClientUri: ElasticsearchClientUri = ElasticsearchClientUri(
24+
elasticsearchInstance.host + ":" + elasticsearchInstance.portnumber)
3025

3126
lazy val elasticsearchInstance : Instance = InstanceRegistry.retrieveElasticSearchInstance(this) match {
3227
case Success(instance) => instance
33-
case Failure(_) => Instance(None, Some(sys.env.getOrElse("DELPHI_ELASTIC_URI","elasticsearch://localhost:9200")), None, Some("Default ElasticSearch instance"), Some(ComponentType.ElasticSearch) )
28+
case Failure(_) => Instance(
29+
None,
30+
fallbackElasticSearchHost,
31+
fallbackElasticSearchPort,
32+
"Default ElasticSearch instance",
33+
ComponentType.ElasticSearch)
3434
}
35-
35+
val defaultElasticSearchPort : Int = 9200
36+
val defaultElasticSearchHost : String = "elasticsearch://localhost"
3637
val instanceName = "MyWebApiInstance"
37-
val instanceRegistryUri : String = sys.env.getOrElse("DELPHI_IR_URI", "http://localhost:8085")
38+
val instanceRegistryUri : String = sys.env.getOrElse("DELPHI_IR_URI", "http://localhost:8087")
3839
lazy val usingInstanceRegistry : Boolean = assignedID match {
3940
case Some(_) => true
4041
case None => false
@@ -43,5 +44,29 @@ class Configuration( //Server and Elasticsearch configuration
4344
case Success(id) => Some(id)
4445
case Failure(_) => None
4546
}
47+
lazy val fallbackElasticSearchPort : Int = sys.env.get("DELPHI_ELASTIC_URI") match {
48+
case Some(hostString) => if(hostString.count(c => c == ':') == 3){
49+
Try(hostString.split(":")(2).toInt) match {
50+
case Success(port) => port
51+
case Failure(_) => defaultElasticSearchPort
52+
}
53+
} else {
54+
defaultElasticSearchPort
55+
}
56+
case None => defaultElasticSearchPort
57+
}
58+
59+
lazy val fallbackElasticSearchHost : String = sys.env.get("DELPHI_ELASTIC_URI") match {
60+
case Some(hostString) =>
61+
if(hostString.count(c => c == ':') == 2){
62+
hostString.substring(0,hostString.lastIndexOf(":"))
63+
} else {
64+
defaultElasticSearchHost
65+
}
66+
case None => defaultElasticSearchHost
67+
68+
}
4669

4770
}
71+
72+

0 commit comments

Comments
 (0)