From 7a66f375566fe8f2682404fdd0bfd8792c0b707b Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 12 Dec 2021 19:41:41 +0100 Subject: [PATCH 1/3] WebSub fixes --- .../tapas/TapasAuctionHouseApplication.java | 30 ++++---- .../common/clients/WebSubSubscriber.java | 70 +++++++++++-------- ...tionStartedEventListenerWebSubAdapter.java | 5 +- .../websub/DiscoverWebSubAdapter.java | 33 +++++++++ .../websub/ValidateIntentWebSubAdapter.java | 18 +---- ...PublishAuctionStartedEventMqttAdapter.java | 1 - ...blishAuctionStartedEventWebSubAdapter.java | 13 +--- .../domain/AuctionHouseDiscovery.java | 7 +- .../src/main/resources/application.properties | 6 +- 9 files changed, 106 insertions(+), 77 deletions(-) create mode 100644 tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/DiscoverWebSubAdapter.java diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/TapasAuctionHouseApplication.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/TapasAuctionHouseApplication.java index 6aa001d..5504e4f 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/TapasAuctionHouseApplication.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/TapasAuctionHouseApplication.java @@ -3,20 +3,18 @@ package ch.unisg.tapas; import ch.unisg.tapas.auctionhouse.adapter.common.clients.TapasMqttClient; import ch.unisg.tapas.auctionhouse.adapter.in.messaging.mqtt.AuctionEventsMqttDispatcher; import ch.unisg.tapas.auctionhouse.domain.AuctionHouseDiscovery; +import ch.unisg.tapas.auctionhouse.domain.AuctionHouseDiscoveryInformation; import ch.unisg.tapas.auctionhouse.adapter.common.clients.WebSubSubscriber; import ch.unisg.tapas.common.AuctionHouseResourceDirectory; -import ch.unisg.tapas.common.ConfigProperties; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.eclipse.paho.client.mqttv3.MqttException; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.env.Environment; import java.net.URI; -import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -28,23 +26,17 @@ import java.util.concurrent.TimeUnit; public class TapasAuctionHouseApplication { private static final Logger LOGGER = LogManager.getLogger(TapasAuctionHouseApplication.class); - public static String RESOURCE_DIRECTORY = "http://localhost:3500"; public static String DEFAULT_MQTT_BROKER = "tcp://broker.hivemq.com:1883"; private static ConfigurableEnvironment ENVIRONMENT; - public static void main(String[] args) { SpringApplication tapasAuctioneerApp = new SpringApplication(TapasAuctionHouseApplication.class); ENVIRONMENT = tapasAuctioneerApp.run(args).getEnvironment(); - // TODO Set start up of message services with config // We will use these bootstrap methods in Week 6: bootstrapMarketplaceWithWebSub(); - bootstrapMarketplaceWithMqtt(); - - ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); - executor.scheduleAtFixedRate(crawlerRunnable, 30, 30, TimeUnit.SECONDS); + // bootstrapMarketplaceWithMqtt() } /** * Discovers auction houses and subscribes to WebSub notifications @@ -52,11 +44,12 @@ public class TapasAuctionHouseApplication { private static void bootstrapMarketplaceWithWebSub() { discoverAuctionHouseEndpoints(); - // WebSubSubscriber subscriber = new WebSubSubscriber(); + WebSubSubscriber subscriber = new WebSubSubscriber(ENVIRONMENT.getProperty("auctionhouse.uri")); - // for (String endpoint : auctionHouseEndpoints) { - // subscriber.subscribeToAuctionHouseEndpoint(URI.create(endpoint)); - // } + for (AuctionHouseDiscoveryInformation endpoint : AuctionHouseDiscovery.getInstance().getAuctionHouseDiscoveryList()) { + subscriber.subscribeToAuctionHouseEndpoint(endpoint.getWebSubUri().getValue()); + } + //subscriber.subscribeToAuctionHouseEndpoint("https://websub.rocks/blog/100/v7wVgkzRrZXTadY3pXjx"); } /** @@ -83,17 +76,20 @@ public class TapasAuctionHouseApplication { private static void discoverAuctionHouseEndpoints() { AuctionHouseResourceDirectory rd = new AuctionHouseResourceDirectory( - URI.create(RESOURCE_DIRECTORY) + URI.create(ENVIRONMENT.getProperty("discovery.endpoint.uri")) ); AuctionHouseDiscovery.getInstance().addAuctionHouseDiscoveryInformation(rd.retrieveAuctionHouseEndpoints()); + + ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); + executor.scheduleAtFixedRate(crawlerRunnable, 300, 300, TimeUnit.SECONDS); } private static Runnable crawlerRunnable = new Runnable() { public void run() { AuctionHouseResourceDirectory rd = new AuctionHouseResourceDirectory( - URI.create(RESOURCE_DIRECTORY) + URI.create(ENVIRONMENT.getProperty("discovery.endpoint.uri")) ); AuctionHouseDiscovery.getInstance().addAuctionHouseDiscoveryInformation(rd.retrieveAuctionHouseEndpoints()); diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/common/clients/WebSubSubscriber.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/common/clients/WebSubSubscriber.java index 5b3fc32..bd0ffb9 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/common/clients/WebSubSubscriber.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/common/clients/WebSubSubscriber.java @@ -2,9 +2,11 @@ package ch.unisg.tapas.auctionhouse.adapter.common.clients; import java.io.IOException; import java.net.URI; +import java.net.URISyntaxException; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; +import java.util.HashMap; import java.util.logging.Level; import java.util.logging.Logger; @@ -18,22 +20,23 @@ import org.springframework.http.HttpStatus; */ public class WebSubSubscriber { - // TODO get this somehow from properties file. But on clue how to do this with static variables - static String WEBSUB_HUB_ENDPOINT = "http://localhost:3000"; - static String AUCTION_HOUSE_ENDPOINT = "http://localhost:8086"; - Logger logger = Logger.getLogger(WebSubSubscriber.class.getName()); - public void subscribeToAuctionHouseEndpoint(URI endpoint) { - // TODO decide with other groups about auction house endpoint uri to discover websub topics - // and replace the hardcoded one with it - String topic = discoverWebSubTopic("http://localhost:3100/websub"); + String AUCTION_HOUSE_ENDPOINT; - if (topic == null) { + public WebSubSubscriber(String AUCTION_HOUSE_ENDPOINT) { + this.AUCTION_HOUSE_ENDPOINT = AUCTION_HOUSE_ENDPOINT; + } + + public void subscribeToAuctionHouseEndpoint(URI endpoint) { + + HashMap links = discoverWebSubTopic(endpoint); + + if (links.isEmpty()) { return; } - subscribeToWebSub(topic); + subscribeToWebSub(links.get("hub"), links.get("self")); // Shoudl be done :D // TODO Subscribe to the auction house endpoint via WebSub: @@ -52,23 +55,30 @@ public class WebSubSubscriber { // - the implementation notes of the WebSub hub you are using to distribute events } - private String discoverWebSubTopic(String endpoint) { + private HashMap discoverWebSubTopic(URI endpoint) { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create(endpoint)) + .uri(endpoint) .header("Content-Type", "application/json") .GET() .build(); + HashMap links = new HashMap<>(); try { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); if (response.statusCode() == HttpStatus.OK.value()) { - // TODO decide with other groups about response structure and replace the hardcoded - // uri with response uri - JSONObject jsonObject = new JSONObject(response.body()); - System.out.println(jsonObject); - return jsonObject.getString("topic"); + for (String link : response.headers().allValues("link")) { + if (link.contains("rel=\"hub\"")) { + String hub = link.split(">")[0]; + links.put("hub", hub.substring(1)); + } else if(link.contains("rel=\"self\"")) { + String self = link.split(">")[0]; + links.put("self", self.substring(1)); + } + System.out.println(link); + } + // TODO check for HTML tags second if links are not present in headers } else { logger.log(Level.SEVERE, "Could not find a websub uri"); } @@ -78,24 +88,26 @@ public class WebSubSubscriber { } catch (IOException e) { logger.log(Level.SEVERE, e.getLocalizedMessage(), e); } - return null; + return links; } - private void subscribeToWebSub(String topic) { + private void subscribeToWebSub(String hub, String topic) { HttpClient client = HttpClient.newHttpClient(); - String body = new JSONObject() - .put("hub.callback", AUCTION_HOUSE_ENDPOINT + "/auction-started") - .put("hub.mode", "subscribe") - .put("hub.topic", topic) - .put("hub.ws", false) - .toString(); - + URI hubURI; + try { + hubURI = new URI(hub); + } catch (URISyntaxException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return; + } HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create(WEBSUB_HUB_ENDPOINT)) - .header("Content-Type", "application/json") - .POST(HttpRequest.BodyPublishers.ofString(body)) + .uri(hubURI) + .header("Content-Type", "application/x-www-form-urlencoded") + .POST(HttpRequest.BodyPublishers.ofString("hub.mode=subscribe&hub.callback=" + AUCTION_HOUSE_ENDPOINT + + "/auction-started/74c72c7f-2739-4124-aa35-a3225171a97c" + "&hub.topic=" + topic)) .build(); diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/AuctionStartedEventListenerWebSubAdapter.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/AuctionStartedEventListenerWebSubAdapter.java index 4f67dad..cec11b3 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/AuctionStartedEventListenerWebSubAdapter.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/AuctionStartedEventListenerWebSubAdapter.java @@ -34,9 +34,12 @@ public class AuctionStartedEventListenerWebSubAdapter { * @return 200 OK * @throws URISyntaxException **/ - @PostMapping(path = "/auction-started") + // TODO generate a new capability ID instead of using a hardcoded one. + @PostMapping(path = "/auction-started/74c72c7f-2739-4124-aa35-a3225171a97c") public ResponseEntity handleExecutorAddedEvent(@RequestBody Collection payload) throws URISyntaxException { + System.out.println("new auctions :O"); + for (AuctionJsonRepresentation auction : payload) { auctionStartedHandler.handleAuctionStartedEvent( new AuctionStartedEvent( diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/DiscoverWebSubAdapter.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/DiscoverWebSubAdapter.java new file mode 100644 index 0000000..0aea2c6 --- /dev/null +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/DiscoverWebSubAdapter.java @@ -0,0 +1,33 @@ +package ch.unisg.tapas.auctionhouse.adapter.in.messaging.websub; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +/** + * This class is a template for handling auction started events received via WebSub + */ +@RestController +public class DiscoverWebSubAdapter { + + @Value("${websub.hub.uri}") + private String webSubHubUri; + + @Value("${auctionhouse.uri}") + private String auctionHouseUri; + + /** + * Controller which listens to auction-started callbacks + * @return 200 OK + **/ + @GetMapping(path = "/websub/auctions") + public ResponseEntity handleDiscoverWebSubAuction() { + + HttpHeaders header = new HttpHeaders(); + header.add("link", "<" + auctionHouseUri + "/auctions/>; rel=\"self\""); + header.add("link", "<" + webSubHubUri + ">; rel=\"hub\""); + + return ResponseEntity.ok().headers(header).body(""); + } +} diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/ValidateIntentWebSubAdapter.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/ValidateIntentWebSubAdapter.java index 7bfb450..e3a9da9 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/ValidateIntentWebSubAdapter.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/ValidateIntentWebSubAdapter.java @@ -13,21 +13,9 @@ import org.springframework.web.bind.annotation.*; @RestController public class ValidateIntentWebSubAdapter { - @Value("${application.environment}") - private String environment; - - @GetMapping(path = "/auction-started") + // TODO generate a new capability ID instead of using a hardcoded one. + @GetMapping(path = "/auction-started/74c72c7f-2739-4124-aa35-a3225171a97c") public ResponseEntity validateIntent(@RequestParam("hub.challenge") String challenge) { - // Different implementation depending on local development or production - if (environment.equalsIgnoreCase("development")) { - HttpHeaders headers = new HttpHeaders(); - headers.add("Content-Type", "application/json"); - String body = new JSONObject() - .put("hub.challenge", challenge) - .toString(); - return new ResponseEntity<>(body, headers, HttpStatus.OK); - } else { - return new ResponseEntity<>(challenge, HttpStatus.OK); - } + return new ResponseEntity<>(challenge, HttpStatus.OK); } } diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/mqtt/PublishAuctionStartedEventMqttAdapter.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/mqtt/PublishAuctionStartedEventMqttAdapter.java index a041b4f..6cf39ce 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/mqtt/PublishAuctionStartedEventMqttAdapter.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/mqtt/PublishAuctionStartedEventMqttAdapter.java @@ -15,7 +15,6 @@ import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; @Component -@Primary public class PublishAuctionStartedEventMqttAdapter implements AuctionStartedEventPort { private static final Logger LOGGER = LogManager.getLogger(PublishAuctionStartedEventMqttAdapter.class); diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/websub/PublishAuctionStartedEventWebSubAdapter.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/websub/PublishAuctionStartedEventWebSubAdapter.java index 228f43b..140fade 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/websub/PublishAuctionStartedEventWebSubAdapter.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/websub/PublishAuctionStartedEventWebSubAdapter.java @@ -29,12 +29,8 @@ import java.util.stream.Collectors; * This class is a template for publishing auction started events via WebSub. */ @Component +@Primary public class PublishAuctionStartedEventWebSubAdapter implements AuctionStartedEventPort { - // You can use this object to retrieve properties from application.properties, e.g. the - // WebSub hub publish endpoint, etc. - @Autowired - private ConfigProperties config; - @Value("${auctionhouse.uri}") private String auctionHouseUri; @@ -47,15 +43,12 @@ public class PublishAuctionStartedEventWebSubAdapter implements AuctionStartedEv public void publishAuctionStartedEvent(AuctionStartedEvent event) { HttpClient client = HttpClient.newHttpClient(); - String body = new JSONObject() - .put("hub.url", auctionHouseUri + "/auctions") - .put("hub.mode", "publish") - .toString(); + String body = "hub.url=" + auctionHouseUri + "/auctions/&hub.mode=publish"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(webSubHubUri)) - .header("Content-Type", "application/json") + .header("Content-Type", "application/x-www-form-urlencoded") .POST(HttpRequest.BodyPublishers.ofString(body)) .build(); diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/domain/AuctionHouseDiscovery.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/domain/AuctionHouseDiscovery.java index 5088ff1..da3ff55 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/domain/AuctionHouseDiscovery.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/domain/AuctionHouseDiscovery.java @@ -20,6 +20,9 @@ public class AuctionHouseDiscovery { } }; + // TODO load from config + static String AUCTION_HOUSE_URI = "http://localhost:8086"; + @Getter private List auctionHouseDiscoveryList = new ArrayList<>() { }; @@ -28,8 +31,8 @@ public class AuctionHouseDiscovery { try { // Add our information to list auctionHouseDiscoveryList.add(new AuctionHouseDiscoveryInformation( - new AuctionHouseDiscoveryInformation.AuctionHouseUri(new URI("http://localhost:8086")), - new AuctionHouseDiscoveryInformation.WebSubUri(new URI("http://localhost:8086/websub")), + new AuctionHouseDiscoveryInformation.AuctionHouseUri(new URI(AUCTION_HOUSE_URI)), + new AuctionHouseDiscoveryInformation.WebSubUri(new URI(AUCTION_HOUSE_URI + "/websub/auctions")), new AuctionHouseDiscoveryInformation.TaskTypes(tasktypes), new AuctionHouseDiscoveryInformation.TimeStamp(new Timestamp(new Date().getTime())), new AuctionHouseDiscoveryInformation.GroupName("Group 1") diff --git a/tapas-auction-house/src/main/resources/application.properties b/tapas-auction-house/src/main/resources/application.properties index dd9735d..56da8b5 100644 --- a/tapas-auction-house/src/main/resources/application.properties +++ b/tapas-auction-house/src/main/resources/application.properties @@ -10,6 +10,8 @@ auction.house.uri=https://tapas-auction-house.86-119-35-40.nip.io tasks.list.uri=http://localhost:8081 application.environment=development -auctionhouse.uri=http://localhost:8086 -websub.hub.uri=http://localhost:3000 +auctionhouse.uri=http://fe10-77-59-152-182.eu.ngrok.io +websub.hub.uri=https://pubsubhubbub.appspot.com mqtt.broker.uri=tcp://localhost:1883 + +discovery.endpoint.uri=http://localhost:3500/discovery/ From 4593e5bddb62fce33cacc3dd73cc9bd910624f44 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 12 Dec 2021 20:24:04 +0100 Subject: [PATCH 2/3] uri updates --- .deployment/docker-compose.yml | 2 ++ .../ch/unisg/tapas/TapasAuctionHouseApplication.java | 2 +- .../in/messaging/websub/DiscoverWebSubAdapter.java | 2 +- .../PublishAuctionStartedEventWebSubAdapter.java | 12 +----------- .../src/main/resources/application.properties | 1 - 5 files changed, 5 insertions(+), 14 deletions(-) diff --git a/.deployment/docker-compose.yml b/.deployment/docker-compose.yml index ebe2b67..c6f1955 100644 --- a/.deployment/docker-compose.yml +++ b/.deployment/docker-compose.yml @@ -67,6 +67,8 @@ services: - ./:/data/ environment: mqtt.broker.uri: tcp://broker.hivemq.com:1883 + discovery.endpoint.uri: https://tapas-auction-house.86.119.35.213.nip.io/discovery/ + auction.house.uri: https://tapas-auction-house.86-119-35-40.nip.io labels: - "traefik.enable=true" - "traefik.http.routers.tapas-auction-house.rule=Host(`tapas-auction-house.${PUB_IP}.nip.io`)" diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/TapasAuctionHouseApplication.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/TapasAuctionHouseApplication.java index 5504e4f..103e3d6 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/TapasAuctionHouseApplication.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/TapasAuctionHouseApplication.java @@ -44,7 +44,7 @@ public class TapasAuctionHouseApplication { private static void bootstrapMarketplaceWithWebSub() { discoverAuctionHouseEndpoints(); - WebSubSubscriber subscriber = new WebSubSubscriber(ENVIRONMENT.getProperty("auctionhouse.uri")); + WebSubSubscriber subscriber = new WebSubSubscriber(ENVIRONMENT.getProperty("auction.house.uri")); for (AuctionHouseDiscoveryInformation endpoint : AuctionHouseDiscovery.getInstance().getAuctionHouseDiscoveryList()) { subscriber.subscribeToAuctionHouseEndpoint(endpoint.getWebSubUri().getValue()); diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/DiscoverWebSubAdapter.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/DiscoverWebSubAdapter.java index 0aea2c6..332d13e 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/DiscoverWebSubAdapter.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/DiscoverWebSubAdapter.java @@ -14,7 +14,7 @@ public class DiscoverWebSubAdapter { @Value("${websub.hub.uri}") private String webSubHubUri; - @Value("${auctionhouse.uri}") + @Value("${auction.house.uri}") private String auctionHouseUri; /** diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/websub/PublishAuctionStartedEventWebSubAdapter.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/websub/PublishAuctionStartedEventWebSubAdapter.java index 140fade..4a0be21 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/websub/PublishAuctionStartedEventWebSubAdapter.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/websub/PublishAuctionStartedEventWebSubAdapter.java @@ -1,29 +1,19 @@ package ch.unisg.tapas.auctionhouse.adapter.out.messaging.websub; import ch.unisg.tapas.auctionhouse.application.port.out.AuctionStartedEventPort; -import ch.unisg.tapas.auctionhouse.domain.Auction; import ch.unisg.tapas.auctionhouse.domain.AuctionStartedEvent; -import ch.unisg.tapas.common.ConfigProperties; -import org.json.JSONObject; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Primary; -import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; import java.io.IOException; import java.net.URI; -import java.net.URLEncoder; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; -import java.nio.charset.StandardCharsets; -import java.util.HashMap; -import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.stream.Collectors; /** * This class is a template for publishing auction started events via WebSub. @@ -31,7 +21,7 @@ import java.util.stream.Collectors; @Component @Primary public class PublishAuctionStartedEventWebSubAdapter implements AuctionStartedEventPort { - @Value("${auctionhouse.uri}") + @Value("${auction.house.uri}") private String auctionHouseUri; @Value("${websub.hub.uri}") diff --git a/tapas-auction-house/src/main/resources/application.properties b/tapas-auction-house/src/main/resources/application.properties index 56da8b5..7de99a6 100644 --- a/tapas-auction-house/src/main/resources/application.properties +++ b/tapas-auction-house/src/main/resources/application.properties @@ -10,7 +10,6 @@ auction.house.uri=https://tapas-auction-house.86-119-35-40.nip.io tasks.list.uri=http://localhost:8081 application.environment=development -auctionhouse.uri=http://fe10-77-59-152-182.eu.ngrok.io websub.hub.uri=https://pubsubhubbub.appspot.com mqtt.broker.uri=tcp://localhost:1883 From 467d7aa01577dcc2ecf5202fea8e67774d3466bd Mon Sep 17 00:00:00 2001 From: Marcel Date: Tue, 14 Dec 2021 21:59:24 +0100 Subject: [PATCH 3/3] updates --- docker-compose.yaml | 24 ++--- .../adapter/out/web/GetAssignmentAdapter.java | 8 +- .../ExecutorcomputationApplication.java | 2 +- .../src/main/resources/application.properties | 3 +- .../ch/unisg/roster/RosterApplication.java | 2 +- .../src/main/resources/application.properties | 3 +- .../tapas/TapasAuctionHouseApplication.java | 49 +++++---- .../common/clients/WebSubSubscriber.java | 2 - .../formats/AuctionJsonRepresentation.java | 28 ++++++ ...tionStartedEventListenerWebSubAdapter.java | 99 ++++++++++++++++--- .../websub/DiscoverWebSubAdapter.java | 2 +- ...PublishAuctionStartedEventMqttAdapter.java | 1 + ...blishAuctionStartedEventWebSubAdapter.java | 2 + .../out/web/AuctionWonEventHttpAdapter.java | 1 + .../domain/AuctionHouseDiscovery.java | 6 +- .../src/main/resources/application.properties | 5 +- 16 files changed, 178 insertions(+), 59 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index c53981f..8566c1b 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -72,15 +72,15 @@ services: volumes: - ./executor-computation/src:/opt/app/src - ./executor-computation/target:/opt/app/target - executor-robot: - container_name: executor-robot - build: - context: "." - dockerfile: "./executor-robot/Dockerfile" - target: development - ports: - - "8084:8084" - - "5009:5005" - volumes: - - ./executor-robot/src:/opt/app/src - - ./executor-robot/target:/opt/app/target + # executor-robot: + # container_name: executor-robot + # build: + # context: "." + # dockerfile: "./executor-robot/Dockerfile" + # target: development + # ports: + # - "8084:8084" + # - "5009:5005" + # volumes: + # - ./executor-robot/src:/opt/app/src + # - ./executor-robot/target:/opt/app/target diff --git a/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/out/web/GetAssignmentAdapter.java b/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/out/web/GetAssignmentAdapter.java index 4df08dd..5981121 100644 --- a/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/out/web/GetAssignmentAdapter.java +++ b/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/out/web/GetAssignmentAdapter.java @@ -10,6 +10,7 @@ import java.util.logging.Logger; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Primary; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; import ch.unisg.common.valueobject.ExecutorURI; @@ -49,12 +50,13 @@ public class GetAssignmentAdapter implements GetAssignmentPort { .build(); try { - logger.info("Sending getAssignment Request"); + logger.info("ExecutorBase | Sending getAssignment request"); HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); - logger.log(Level.INFO, "getAssignment request result:\n {0}", response.body()); - if (response.body().equals("")) { + if (response.statusCode() != HttpStatus.CREATED.value()) { + logger.info("ExecutorBase | No task assigned"); return null; } + logger.info("ExecutorBase | Task assigned"); JSONObject responseBody = new JSONObject(response.body()); String inputData = responseBody.getString("inputData"); diff --git a/executor-computation/src/main/java/ch/unisg/executorcomputation/ExecutorcomputationApplication.java b/executor-computation/src/main/java/ch/unisg/executorcomputation/ExecutorcomputationApplication.java index fe25430..7a22493 100644 --- a/executor-computation/src/main/java/ch/unisg/executorcomputation/ExecutorcomputationApplication.java +++ b/executor-computation/src/main/java/ch/unisg/executorcomputation/ExecutorcomputationApplication.java @@ -13,7 +13,7 @@ public class ExecutorcomputationApplication { public static void main(String[] args) { try { - TimeUnit.SECONDS.sleep(40); + TimeUnit.SECONDS.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); diff --git a/executor-pool/src/main/resources/application.properties b/executor-pool/src/main/resources/application.properties index c8f67f1..20953a7 100644 --- a/executor-pool/src/main/resources/application.properties +++ b/executor-pool/src/main/resources/application.properties @@ -1,6 +1,7 @@ server.port=8083 -mqtt.broker.uri=tcp://localhost:1883 +# mqtt.broker.uri=tcp://localhost:1883 +mqtt.broker.uri=tcp://broker.hivemq.com spring.data.mongodb.uri=mongodb://root:password@localhost:27017 spring.data.mongodb.database=tapas-executors diff --git a/roster/src/main/java/ch/unisg/roster/RosterApplication.java b/roster/src/main/java/ch/unisg/roster/RosterApplication.java index 973e8f1..7f31c91 100644 --- a/roster/src/main/java/ch/unisg/roster/RosterApplication.java +++ b/roster/src/main/java/ch/unisg/roster/RosterApplication.java @@ -33,7 +33,7 @@ public class RosterApplication { SpringApplication rosterApp = new SpringApplication(RosterApplication.class); ENVIRONMENT = rosterApp.run(args).getEnvironment(); bootstrapMarketplaceWithMqtt(); - initialiseRoster(); + // initialiseRoster(); } /** diff --git a/roster/src/main/resources/application.properties b/roster/src/main/resources/application.properties index ea6544a..d7c1dcb 100644 --- a/roster/src/main/resources/application.properties +++ b/roster/src/main/resources/application.properties @@ -2,7 +2,8 @@ server.port=8082 executor.robot.uri=http://127.0.0.1:8084 executor.computation.uri=http://127.0.0.1:8085 task.list.uri=http://127.0.0.1:8081 -mqtt.broker.uri=tcp://localhost:1883 +# mqtt.broker.uri=tcp://localhost:1883 +mqtt.broker.uri=tcp://broker.hivemq.com spring.data.mongodb.uri=mongodb://root:password@localhost:27017/ spring.data.mongodb.database=tapas-roster diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/TapasAuctionHouseApplication.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/TapasAuctionHouseApplication.java index 103e3d6..1d72579 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/TapasAuctionHouseApplication.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/TapasAuctionHouseApplication.java @@ -15,6 +15,7 @@ import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.Environment; import java.net.URI; +import java.net.URISyntaxException; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -36,20 +37,25 @@ public class TapasAuctionHouseApplication { // TODO Set start up of message services with config // We will use these bootstrap methods in Week 6: bootstrapMarketplaceWithWebSub(); - // bootstrapMarketplaceWithMqtt() + //bootstrapMarketplaceWithMqtt(); } /** * Discovers auction houses and subscribes to WebSub notifications */ private static void bootstrapMarketplaceWithWebSub() { - discoverAuctionHouseEndpoints(); + // discoverAuctionHouseEndpoints(); WebSubSubscriber subscriber = new WebSubSubscriber(ENVIRONMENT.getProperty("auction.house.uri")); - for (AuctionHouseDiscoveryInformation endpoint : AuctionHouseDiscovery.getInstance().getAuctionHouseDiscoveryList()) { - subscriber.subscribeToAuctionHouseEndpoint(endpoint.getWebSubUri().getValue()); + // for (AuctionHouseDiscoveryInformation endpoint : AuctionHouseDiscovery.getInstance().getAuctionHouseDiscoveryList()) { + // subscriber.subscribeToAuctionHouseEndpoint(endpoint.getWebSubUri().getValue()); + // } + try { + subscriber.subscribeToAuctionHouseEndpoint(new URI("http://6b4e-130-82-250-227.ngrok.io/websub-discovery")); + } catch (URISyntaxException e) { + // TODO Auto-generated catch block + e.printStackTrace(); } - //subscriber.subscribeToAuctionHouseEndpoint("https://websub.rocks/blog/100/v7wVgkzRrZXTadY3pXjx"); } /** @@ -74,25 +80,26 @@ public class TapasAuctionHouseApplication { } } - private static void discoverAuctionHouseEndpoints() { - AuctionHouseResourceDirectory rd = new AuctionHouseResourceDirectory( - URI.create(ENVIRONMENT.getProperty("discovery.endpoint.uri")) - ); + // private static void discoverAuctionHouseEndpoints() { - AuctionHouseDiscovery.getInstance().addAuctionHouseDiscoveryInformation(rd.retrieveAuctionHouseEndpoints()); + // AuctionHouseResourceDirectory rd = new AuctionHouseResourceDirectory( + // URI.create(ENVIRONMENT.getProperty("discovery.endpoint.uri")) + // ); - ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); - executor.scheduleAtFixedRate(crawlerRunnable, 300, 300, TimeUnit.SECONDS); - } + // AuctionHouseDiscovery.getInstance().addAuctionHouseDiscoveryInformation(rd.retrieveAuctionHouseEndpoints()); + + // ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); + // executor.scheduleAtFixedRate(crawlerRunnable, 300, 300, TimeUnit.SECONDS); + // } - private static Runnable crawlerRunnable = new Runnable() { - public void run() { - AuctionHouseResourceDirectory rd = new AuctionHouseResourceDirectory( - URI.create(ENVIRONMENT.getProperty("discovery.endpoint.uri")) - ); + // private static Runnable crawlerRunnable = new Runnable() { + // public void run() { + // AuctionHouseResourceDirectory rd = new AuctionHouseResourceDirectory( + // URI.create(ENVIRONMENT.getProperty("discovery.endpoint.uri")) + // ); - AuctionHouseDiscovery.getInstance().addAuctionHouseDiscoveryInformation(rd.retrieveAuctionHouseEndpoints()); - } - }; + // AuctionHouseDiscovery.getInstance().addAuctionHouseDiscoveryInformation(rd.retrieveAuctionHouseEndpoints()); + // } + // }; } diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/common/clients/WebSubSubscriber.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/common/clients/WebSubSubscriber.java index bd0ffb9..ea74603 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/common/clients/WebSubSubscriber.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/common/clients/WebSubSubscriber.java @@ -38,8 +38,6 @@ public class WebSubSubscriber { subscribeToWebSub(links.get("hub"), links.get("self")); - // Shoudl be done :D - // TODO Subscribe to the auction house endpoint via WebSub: // 1. Send a request to the auction house in order to discover the WebSub hub to subscribe to. // The request URI should depend on the design of the Auction House HTTP API. // 2. Send a subscription request to the discovered WebSub hub to subscribe to events relevant diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/common/formats/AuctionJsonRepresentation.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/common/formats/AuctionJsonRepresentation.java index 757c8c8..3004755 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/common/formats/AuctionJsonRepresentation.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/common/formats/AuctionJsonRepresentation.java @@ -3,12 +3,16 @@ package ch.unisg.tapas.auctionhouse.adapter.common.formats; import ch.unisg.tapas.auctionhouse.domain.Auction; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.Getter; import lombok.Setter; +import java.net.URI; import java.sql.Timestamp; +import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Date; /** * Used to expose a representation of the state of an auction through an interface. This class is @@ -60,4 +64,28 @@ public class AuctionJsonRepresentation { mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); return mapper.writeValueAsString(representation); } + + public static Auction deserialize(String auctionJson) throws JsonProcessingException { + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(auctionJson); + Auction.AuctionId auctionId = new Auction.AuctionId(jsonNode.get("auctionId").asText()); + Auction.AuctionHouseUri auctionHouseUri = new Auction.AuctionHouseUri(URI.create(jsonNode.get("auctionHouseUri").asText())); + Auction.AuctionedTaskUri taskUri = new Auction.AuctionedTaskUri(URI.create(jsonNode.get("taskUri").asText())); + Auction.AuctionedTaskType taskType = new Auction.AuctionedTaskType(jsonNode.get("taskType").asText()); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date parsedDate; + try { + parsedDate = dateFormat.parse(jsonNode.get("deadline").toString()); + Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime()); + Auction.AuctionDeadline deadline = new Auction.AuctionDeadline(timestamp); + + Auction auction = new Auction(auctionId, auctionHouseUri, taskUri, taskType, deadline); + return auction; + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + + } } diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/AuctionStartedEventListenerWebSubAdapter.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/AuctionStartedEventListenerWebSubAdapter.java index cec11b3..520e0a5 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/AuctionStartedEventListenerWebSubAdapter.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/AuctionStartedEventListenerWebSubAdapter.java @@ -1,20 +1,31 @@ package ch.unisg.tapas.auctionhouse.adapter.in.messaging.websub; import ch.unisg.tapas.auctionhouse.adapter.common.formats.AuctionJsonRepresentation; +import ch.unisg.tapas.auctionhouse.adapter.common.formats.BidJsonRepresentation; import ch.unisg.tapas.auctionhouse.application.handler.AuctionStartedHandler; import ch.unisg.tapas.auctionhouse.application.port.in.AuctionStartedEvent; import ch.unisg.tapas.auctionhouse.domain.Auction; +import ch.unisg.tapas.auctionhouse.domain.Bid; import ch.unisg.tapas.auctionhouse.domain.Auction.AuctionDeadline; import ch.unisg.tapas.auctionhouse.domain.Auction.AuctionHouseUri; import ch.unisg.tapas.auctionhouse.domain.Auction.AuctionId; import ch.unisg.tapas.auctionhouse.domain.Auction.AuctionedTaskType; import ch.unisg.tapas.auctionhouse.domain.Auction.AuctionedTaskUri; +import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.security.Timestamp; import java.util.Collection; +import java.util.Date; + +import com.fasterxml.jackson.core.JsonProcessingException; import org.json.JSONArray; +import org.json.JSONObject; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -36,20 +47,86 @@ public class AuctionStartedEventListenerWebSubAdapter { **/ // TODO generate a new capability ID instead of using a hardcoded one. @PostMapping(path = "/auction-started/74c72c7f-2739-4124-aa35-a3225171a97c") - public ResponseEntity handleExecutorAddedEvent(@RequestBody Collection payload) throws URISyntaxException { + public ResponseEntity handleExecutorAddedEvent(@RequestBody String payload) throws URISyntaxException { System.out.println("new auctions :O"); + System.out.println(payload); - for (AuctionJsonRepresentation auction : payload) { - auctionStartedHandler.handleAuctionStartedEvent( - new AuctionStartedEvent( - new Auction(new AuctionId(auction.getAuctionId()), - new AuctionHouseUri(new URI(auction.getAuctionHouseUri())), - new AuctionedTaskUri(new URI(auction.getTaskUri())), - new AuctionedTaskType(auction.getTaskType()), - new AuctionDeadline(auction.getDeadline())) - )); - } + + JSONArray auctions = new JSONArray(payload); + if (auctions.length() > 0) { + JSONObject auction = auctions.getJSONObject(0); + System.out.print(auction); + // try { + // System.out.println(auction.getString("deadline")); + // System.out.println(AuctionJsonRepresentation.deserialize(auction.toString())); + + // auctionStartedHandler.handleAuctionStartedEvent( + // new AuctionStartedEvent(AuctionJsonRepresentation.deserialize(auction.toString()))); + // } catch (JsonProcessingException e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + + + // String auctionHouseURI = "https://tapas-auction-house.86-119-35-40.nip.io/"; + String auctionHouseURI = "http://b311-130-82-247-153.eu.ngrok.io"; + + // String taskListURI = "https://tapas-tasks.86-119-35-40.nip.io"; + String taskListURI = "http://c64f-130-82-247-153.ngrok.io"; + + // TODO Sanitize URIs + String auctionId = auction.getString("auctionId"); + String auctionHouseUri = auction.getString("auctionHouseUri"); + String taskUri = auction.getString("taskUri"); + String taskType = auction.getString("taskType"); + String deadline = auction.getString("deadline"); + + var bid = new Bid( + new Auction.AuctionId(auctionId), + new Bid.BidderName("Group-1"), + new Bid.BidderAuctionHouseUri(URI.create(auctionHouseURI)), + new Bid.BidderTaskListUri(URI.create(taskListURI)) + ); + + String body; + try { + body = BidJsonRepresentation.serialize(bid); + //LOGGER.info(body); + var postURI = URI.create(auctionHouseUri + "/bid"); + HttpRequest postRequest = HttpRequest.newBuilder() + .uri(postURI) + .header("Content-Type", BidJsonRepresentation.MEDIA_TYPE) + .POST(HttpRequest.BodyPublishers.ofString(body)) + .build(); + + HttpClient client = HttpClient.newHttpClient(); + var postResponse = client.send(postRequest, HttpResponse.BodyHandlers.ofString()); + } catch (JsonProcessingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + //LOGGER.info(postResponse.statusCode()); + }; + + // for (JSONObject auction : auctions) { + // auctionStartedHandler.handleAuctionStartedEvent( + // new AuctionStartedEvent( + // new Auction(new AuctionId(auction.getAuctionId()), + // new AuctionHouseUri(new URI(auction.getAuctionHouseUri())), + // new AuctionedTaskUri(new URI(auction.getTaskUri())), + // new AuctionedTaskType(auction.getTaskType()), + // new AuctionDeadline(auction.getDeadline())) + // )); + // } return new ResponseEntity<>(HttpStatus.OK); } diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/DiscoverWebSubAdapter.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/DiscoverWebSubAdapter.java index 332d13e..f279c43 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/DiscoverWebSubAdapter.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/in/messaging/websub/DiscoverWebSubAdapter.java @@ -18,7 +18,7 @@ public class DiscoverWebSubAdapter { private String auctionHouseUri; /** - * Controller which listens to auction-started callbacks + * Controller to discover our websub topic * @return 200 OK **/ @GetMapping(path = "/websub/auctions") diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/mqtt/PublishAuctionStartedEventMqttAdapter.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/mqtt/PublishAuctionStartedEventMqttAdapter.java index 6cf39ce..4472519 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/mqtt/PublishAuctionStartedEventMqttAdapter.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/mqtt/PublishAuctionStartedEventMqttAdapter.java @@ -15,6 +15,7 @@ import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; @Component +// @Primary public class PublishAuctionStartedEventMqttAdapter implements AuctionStartedEventPort { private static final Logger LOGGER = LogManager.getLogger(PublishAuctionStartedEventMqttAdapter.class); diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/websub/PublishAuctionStartedEventWebSubAdapter.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/websub/PublishAuctionStartedEventWebSubAdapter.java index 4a0be21..02aeb75 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/websub/PublishAuctionStartedEventWebSubAdapter.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/messaging/websub/PublishAuctionStartedEventWebSubAdapter.java @@ -35,6 +35,7 @@ public class PublishAuctionStartedEventWebSubAdapter implements AuctionStartedEv String body = "hub.url=" + auctionHouseUri + "/auctions/&hub.mode=publish"; + logger.info("Auctions updated:" + body); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(webSubHubUri)) @@ -45,6 +46,7 @@ public class PublishAuctionStartedEventWebSubAdapter implements AuctionStartedEv try { client.send(request, HttpResponse.BodyHandlers.ofString()); + logger.info("WEBSUB send successfuly"); } catch (InterruptedException e) { logger.log(Level.SEVERE, e.getLocalizedMessage(), e); Thread.currentThread().interrupt(); diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/web/AuctionWonEventHttpAdapter.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/web/AuctionWonEventHttpAdapter.java index ec04b2b..066a246 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/web/AuctionWonEventHttpAdapter.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/adapter/out/web/AuctionWonEventHttpAdapter.java @@ -43,6 +43,7 @@ public class AuctionWonEventHttpAdapter implements AuctionWonEventPort { .uri(auction.get().getTaskUri().getValue()) .GET() .build(); + var response = client.send(request, HttpResponse.BodyHandlers.ofString()); LOGGER.info(response.body()); JSONObject responseBody = new JSONObject(response.body()); diff --git a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/domain/AuctionHouseDiscovery.java b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/domain/AuctionHouseDiscovery.java index da3ff55..c234b64 100644 --- a/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/domain/AuctionHouseDiscovery.java +++ b/tapas-auction-house/src/main/java/ch/unisg/tapas/auctionhouse/domain/AuctionHouseDiscovery.java @@ -21,7 +21,7 @@ public class AuctionHouseDiscovery { }; // TODO load from config - static String AUCTION_HOUSE_URI = "http://localhost:8086"; + // static String AUCTION_HOUSE_URI = "http://localhost:8086"; @Getter private List auctionHouseDiscoveryList = new ArrayList<>() { @@ -31,8 +31,8 @@ public class AuctionHouseDiscovery { try { // Add our information to list auctionHouseDiscoveryList.add(new AuctionHouseDiscoveryInformation( - new AuctionHouseDiscoveryInformation.AuctionHouseUri(new URI(AUCTION_HOUSE_URI)), - new AuctionHouseDiscoveryInformation.WebSubUri(new URI(AUCTION_HOUSE_URI + "/websub/auctions")), + new AuctionHouseDiscoveryInformation.AuctionHouseUri(new URI("http://localhost:8086")), + new AuctionHouseDiscoveryInformation.WebSubUri(new URI("http://localhost:8086/websub/auctions")), new AuctionHouseDiscoveryInformation.TaskTypes(tasktypes), new AuctionHouseDiscoveryInformation.TimeStamp(new Timestamp(new Date().getTime())), new AuctionHouseDiscoveryInformation.GroupName("Group 1") diff --git a/tapas-auction-house/src/main/resources/application.properties b/tapas-auction-house/src/main/resources/application.properties index 7de99a6..3546905 100644 --- a/tapas-auction-house/src/main/resources/application.properties +++ b/tapas-auction-house/src/main/resources/application.properties @@ -11,6 +11,7 @@ tasks.list.uri=http://localhost:8081 application.environment=development websub.hub.uri=https://pubsubhubbub.appspot.com -mqtt.broker.uri=tcp://localhost:1883 +mqtt.broker.uri=tcp://broker.hivemq.com +# mqtt.broker.uri=tcp://localhost:1883 -discovery.endpoint.uri=http://localhost:3500/discovery/ +discovery.endpoint.uri=http://localhost:3500