diff --git a/.deployment/docker-compose.yml b/.deployment/docker-compose.yml index 01a5a77..5a1329f 100644 --- a/.deployment/docker-compose.yml +++ b/.deployment/docker-compose.yml @@ -56,20 +56,20 @@ services: - "traefik.http.routers.tapas-auction-house.entryPoints=web,websecure" - "traefik.http.routers.tapas-auction-house.tls.certresolver=le" - assignment: + roster: image: openjdk - command: "java -jar /data/assignment-0.0.1-SNAPSHOT.jar" + command: "java -jar /data/roster-0.0.1-SNAPSHOT.jar" restart: unless-stopped volumes: - ./:/data/ labels: - "traefik.enable=true" - - "traefik.http.routers.assignment.rule=Host(`assignment.${PUB_IP}.nip.io`)" - - "traefik.http.routers.assignment.service=assignment" - - "traefik.http.services.assignment.loadbalancer.server.port=8082" - - "traefik.http.routers.assignment.tls=true" - - "traefik.http.routers.assignment.entryPoints=web,websecure" - - "traefik.http.routers.assignment.tls.certresolver=le" + - "traefik.http.routers.roster.rule=Host(`roster.${PUB_IP}.nip.io`)" + - "traefik.http.routers.roster.service=roster" + - "traefik.http.services.roster.loadbalancer.server.port=8082" + - "traefik.http.routers.roster.tls=true" + - "traefik.http.routers.roster.entryPoints=web,websecure" + - "traefik.http.routers.roster.tls.certresolver=le" executor-pool: image: openjdk @@ -86,38 +86,38 @@ services: - "traefik.http.routers.executor-pool.entryPoints=web,websecure" - "traefik.http.routers.executor-pool.tls.certresolver=le" - executor1: + executor-computation: image: openjdk - command: "java -jar /data/executor1-0.0.1-SNAPSHOT.jar" + command: "java -jar /data/executor-computation-0.0.1-SNAPSHOT.jar" restart: unless-stopped depends_on: - executor-pool - - assignment + - roster volumes: - ./:/data/ labels: - "traefik.enable=true" - - "traefik.http.routers.executor1.rule=Host(`executor1.${PUB_IP}.nip.io`)" - - "traefik.http.routers.executor1.service=executor1" - - "traefik.http.services.executor1.loadbalancer.server.port=8084" - - "traefik.http.routers.executor1.tls=true" - - "traefik.http.routers.executor1.entryPoints=web,websecure" - - "traefik.http.routers.executor1.tls.certresolver=le" + - "traefik.http.routers.executor-computation.rule=Host(`executor-computation.${PUB_IP}.nip.io`)" + - "traefik.http.routers.executor-computation.service=executor-computation" + - "traefik.http.services.executor-computation.loadbalancer.server.port=8084" + - "traefik.http.routers.executor-computation.tls=true" + - "traefik.http.routers.executor-computation.entryPoints=web,websecure" + - "traefik.http.routers.executor-computation.tls.certresolver=le" - executor2: + executor-robot: image: openjdk - command: "java -jar /data/executor2-0.0.1-SNAPSHOT.jar" + command: "java -jar /data/executor-robot-0.0.1-SNAPSHOT.jar" restart: unless-stopped depends_on: - executor-pool - - assignment + - roster volumes: - ./:/data/ labels: - "traefik.enable=true" - - "traefik.http.routers.executor2.rule=Host(`executor2.${PUB_IP}.nip.io`)" - - "traefik.http.routers.executor2.service=executor2" - - "traefik.http.services.executor2.loadbalancer.server.port=8085" - - "traefik.http.routers.executor2.tls=true" - - "traefik.http.routers.executor2.entryPoints=web,websecure" - - "traefik.http.routers.executor2.tls.certresolver=le" + - "traefik.http.routers.executor-robot.rule=Host(`executor-robot.${PUB_IP}.nip.io`)" + - "traefik.http.routers.executor-robot.service=executor-robot" + - "traefik.http.services.executor-robot.loadbalancer.server.port=8085" + - "traefik.http.routers.executor-robot.tls=true" + - "traefik.http.routers.executor-robot.entryPoints=web,websecure" + - "traefik.http.routers.executor-robot.tls.certresolver=le" diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index d223887..7290452 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -33,30 +33,33 @@ jobs: key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} restore-keys: ${{ runner.os }}-m2 - - name: Build with Maven - run: mvn -f assignment/pom.xml --batch-mode --update-snapshots verify - - run: cp ./assignment/target/assignment-0.0.1-SNAPSHOT.jar ./target + - name: Build common library + run: mvn -f common/pom.xml --batch-mode --update-snapshots install - - name: Build with Maven + - name: Build roster service + run: mvn -f roster/pom.xml --batch-mode --update-snapshots verify + - run: cp ./roster/target/roster-0.0.1-SNAPSHOT.jar ./target + + - name: Build executor-pool service run: mvn -f executor-pool/pom.xml --batch-mode --update-snapshots verify - run: cp ./executor-pool/target/executor-pool-0.0.1-SNAPSHOT.jar ./target - - name: Build with Maven + - name: Build executor-base library run: mvn -f executor-base/pom.xml --batch-mode --update-snapshots install - - name: Build with Maven - run: mvn -f executor1/pom.xml --batch-mode --update-snapshots verify - - run: cp ./executor1/target/executor1-0.0.1-SNAPSHOT.jar ./target + - name: Build executor-computation service + run: mvn -f executor-computation/pom.xml --batch-mode --update-snapshots verify + - run: cp ./executor-computation/target/executor-computation-0.0.1-SNAPSHOT.jar ./target - - name: Build with Maven - run: mvn -f executor2/pom.xml --batch-mode --update-snapshots verify - - run: cp ./executor2/target/executor2-0.0.1-SNAPSHOT.jar ./target + - name: Build executor-robot service + run: mvn -f executor-robot/pom.xml --batch-mode --update-snapshots verify + - run: cp ./executor-robot/target/executor-robot-0.0.1-SNAPSHOT.jar ./target - - name: Build with Maven + - name: Build tapas-task service run: mvn -f tapas-tasks/pom.xml --batch-mode --update-snapshots verify - run: cp ./tapas-tasks/target/tapas-tasks-0.0.1-SNAPSHOT.jar ./target - - name: Build with Maven + - name: Build tapas-auction-house service run: mvn -f tapas-auction-house/pom.xml --batch-mode --update-snapshots verify - run: cp ./tapas-auction-house/target/tapas-auction-house-0.0.1-SNAPSHOT.jar ./target diff --git a/.github/workflows/ci.assignment.yml b/.github/workflows/ci.assignment.yml deleted file mode 100644 index 394fe54..0000000 --- a/.github/workflows/ci.assignment.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: CI Assignment -on: - push: - branches: [main, dev] - paths: - - "assignment/**" - pull_request: - branches: [main, dev] - paths: - - "assignment/**" - - workflow_dispatch: -jobs: - build: - name: Build - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - name: Set up JDK 11 - uses: actions/setup-java@v1 - with: - java-version: 11 - - name: Cache SonarCloud packages - uses: actions/cache@v1 - with: - path: ~/.sonar/cache - key: ${{ runner.os }}-sonar - restore-keys: ${{ runner.os }}-sonar - - name: Cache Maven packages - uses: actions/cache@v1 - with: - path: ~/.m2 - key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} - restore-keys: ${{ runner.os }}-m2 - - name: Build and analyze - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -f assignment/pom.xml -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=scs-asse-fs21-group1_tapas-assignment diff --git a/.github/workflows/ci.executor2.yml b/.github/workflows/ci.executor-computation.yml similarity index 75% rename from .github/workflows/ci.executor2.yml rename to .github/workflows/ci.executor-computation.yml index 5ae38f0..5832883 100644 --- a/.github/workflows/ci.executor2.yml +++ b/.github/workflows/ci.executor-computation.yml @@ -1,15 +1,17 @@ -name: CI Executor 2 +name: CI executor-computation on: push: branches: [main, dev] paths: - "executor-base/**" - - "executor2/**" + - "executor-computation/**" + - "common/**" pull_request: branches: [main, dev] paths: - "executor-base/**" - - "executor2/**" + - "executor-computation/**" + - "common/**" workflow_dispatch: jobs: @@ -36,10 +38,12 @@ jobs: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} restore-keys: ${{ runner.os }}-m2 + - name: Build common + run: mvn -f common/pom.xml -B install - name: Build executorBase run: mvn -f executor-base/pom.xml -B install - name: Build and analyze env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -f executor2/pom.xml -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=scs-asse-fs21-group1_tapas-executor2 + run: mvn -f executor-computation/pom.xml -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=scs-asse-fs21-group1_tapas-executor2 diff --git a/.github/workflows/ci.executor1.yml b/.github/workflows/ci.executor-robot.yml similarity index 76% rename from .github/workflows/ci.executor1.yml rename to .github/workflows/ci.executor-robot.yml index 708d7d4..7a216aa 100644 --- a/.github/workflows/ci.executor1.yml +++ b/.github/workflows/ci.executor-robot.yml @@ -1,15 +1,17 @@ -name: CI Executor 1 +name: CI executor-robot on: push: branches: [main, dev] paths: - "executor-base/**" - - "executor1/**" + - "executor-robot/**" + - "common/**" pull_request: branches: [main, dev] paths: - "executor-base/**" - - "executor1/**" + - "executor-robot/**" + - "common/**" workflow_dispatch: jobs: @@ -36,10 +38,12 @@ jobs: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} restore-keys: ${{ runner.os }}-m2 + - name: Build executorBase + run: mvn -f common/pom.xml -B install - name: Build executorBase run: mvn -f executor-base/pom.xml -B install - name: Build and analyze env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -f executor1/pom.xml -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=scs-asse-fs21-group1_tapas-executor1 + run: mvn -f executor-robot/pom.xml -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=scs-asse-fs21-group1_tapas-executor1 diff --git a/.github/workflows/ci.roster.yml b/.github/workflows/ci.roster.yml new file mode 100644 index 0000000..b38355e --- /dev/null +++ b/.github/workflows/ci.roster.yml @@ -0,0 +1,45 @@ +name: CI Roster +on: + push: + branches: [main, dev] + paths: + - "roster/**" + - "common/**" + pull_request: + branches: [main, dev] + paths: + - "roster/**" + - "common/**" + + workflow_dispatch: +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: Set up JDK 11 + uses: actions/setup-java@v1 + with: + java-version: 11 + - name: Cache SonarCloud packages + uses: actions/cache@v1 + with: + path: ~/.sonar/cache + key: ${{ runner.os }}-sonar + restore-keys: ${{ runner.os }}-sonar + - name: Cache Maven packages + uses: actions/cache@v1 + with: + path: ~/.m2 + key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-m2 + - name: Build common package + run: mvn -f common/pom.xml -B install + - name: Build and analyze + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + run: mvn -f roster/pom.xml -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=scs-asse-fs21-group1_tapas-assignment diff --git a/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/in/web/TaskAvailableController.java b/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/in/web/TaskAvailableController.java index 8fda5ac..66ef496 100644 --- a/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/in/web/TaskAvailableController.java +++ b/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/in/web/TaskAvailableController.java @@ -1,5 +1,7 @@ package ch.unisg.executorbase.executor.adapter.in.web; +import java.util.logging.Logger; + import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -19,6 +21,8 @@ public class TaskAvailableController { this.taskAvailableUseCase = taskAvailableUseCase; } + Logger logger = Logger.getLogger(TaskAvailableController.class.getName()); + /** * Controller for notification about new events. * @return 200 OK @@ -26,6 +30,8 @@ public class TaskAvailableController { @GetMapping(path = "/newtask/{taskType}", consumes = { "application/json" }) public ResponseEntity retrieveTaskFromTaskList(@PathVariable("taskType") String taskType) { + logger.info("New " + taskType + " available"); + if (ExecutorType.contains(taskType.toUpperCase())) { TaskAvailableCommand command = new TaskAvailableCommand( ExecutorType.valueOf(taskType.toUpperCase())); diff --git a/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/out/web/ExecutionFinishedEventAdapter.java b/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/out/web/ExecutionFinishedEventAdapter.java index a5ae910..58f6287 100644 --- a/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/out/web/ExecutionFinishedEventAdapter.java +++ b/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/out/web/ExecutionFinishedEventAdapter.java @@ -16,8 +16,9 @@ import ch.unisg.executorbase.executor.domain.ExecutionFinishedEvent; public class ExecutionFinishedEventAdapter implements ExecutionFinishedEventPort { + // TODO url doesn't get mapped bc no autowiring @Value("${roster.url}") - String server; + String server = "http://localhost:8082"; Logger logger = Logger.getLogger(ExecutionFinishedEventAdapter.class.getName()); @@ -28,6 +29,9 @@ public class ExecutionFinishedEventAdapter implements ExecutionFinishedEventPort @Override public void publishExecutionFinishedEvent(ExecutionFinishedEvent event) { + System.out.println("HI"); + System.out.println(server); + String body = new JSONObject() .put("taskID", event.getTaskID()) .put("result", event.getResult()) @@ -41,6 +45,9 @@ public class ExecutionFinishedEventAdapter implements ExecutionFinishedEventPort .POST(HttpRequest.BodyPublishers.ofString(body)) .build(); + + System.out.println(server); + try { client.send(request, HttpResponse.BodyHandlers.ofString()); } catch (InterruptedException e) { @@ -50,7 +57,7 @@ public class ExecutionFinishedEventAdapter implements ExecutionFinishedEventPort logger.log(Level.SEVERE, e.getLocalizedMessage(), e); } - logger.log(Level.INFO, "Finish execution event sent with result: {}", event.getResult()); + logger.log(Level.INFO, "Finish execution event sent with result: {0}", event.getResult()); } 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 3ed4e37..dd82c81 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 @@ -23,8 +23,9 @@ import org.json.JSONObject; @Primary public class GetAssignmentAdapter implements GetAssignmentPort { + // TODO Not working for now bc it doesn't get autowired @Value("${roster.url}") - String server; + String server = "http://127.0.0.1:8082"; Logger logger = Logger.getLogger(GetAssignmentAdapter.class.getName()); @@ -51,12 +52,15 @@ public class GetAssignmentAdapter implements GetAssignmentPort { try { logger.info("Sending getAssignment Request"); HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); - logger.log(Level.INFO, "getAssignment request result:\n {}", response.body()); + logger.log(Level.INFO, "getAssignment request result:\n {0}", response.body()); if (response.body().equals("")) { return null; } JSONObject responseBody = new JSONObject(response.body()); - return new Task(responseBody.getString("taskID"), responseBody.getString("input")); + + String[] input = { "1", "+", "2" }; + // TODO Add input in roster + tasklist + return new Task(responseBody.getString("taskID"), input); } catch (InterruptedException e) { logger.log(Level.SEVERE, e.getLocalizedMessage(), e); diff --git a/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/out/web/NotifyExecutorPoolAdapter.java b/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/out/web/NotifyExecutorPoolAdapter.java index 2dba64f..abc0cf5 100644 --- a/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/out/web/NotifyExecutorPoolAdapter.java +++ b/executor-base/src/main/java/ch/unisg/executorBase/executor/adapter/out/web/NotifyExecutorPoolAdapter.java @@ -22,8 +22,9 @@ import ch.unisg.executorbase.executor.domain.ExecutorType; @Primary public class NotifyExecutorPoolAdapter implements NotifyExecutorPoolPort { - @Value("${executor-pool.url}") - String server; + // TODO Not working for now bc it doesn't get autowired + @Value("${executor.pool.url}") + String server = "http://127.0.0.1:8083"; Logger logger = Logger.getLogger(NotifyExecutorPoolAdapter.class.getName()); @@ -36,7 +37,7 @@ public class NotifyExecutorPoolAdapter implements NotifyExecutorPoolPort { String body = new JSONObject() .put("executorTaskType", executorType) - .put("executorURI", executorURI.getValue()) + .put("executorUri", executorURI.getValue()) .toString(); HttpClient client = HttpClient.newHttpClient(); diff --git a/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorBase.java b/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorBase.java index 122ea4b..b8e8631 100644 --- a/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorBase.java +++ b/executor-base/src/main/java/ch/unisg/executorBase/executor/domain/ExecutorBase.java @@ -23,9 +23,8 @@ public abstract class ExecutorBase { @Getter private ExecutorStatus status; - // TODO Violation of the Dependency Inversion Principle?, but we havn't really got a better solutions to send a http request / access a service from a domain model - // TODO I guess we can implement the execution as a service but there still is the problem with the startup request. - // TODO I guess we can somehow autowire this but I don't know why it's not working :D + // TODO Violation of the Dependency Inversion Principle?, + // TODO do this with only services private final NotifyExecutorPoolPort notifyExecutorPoolPort = new NotifyExecutorPoolAdapter(); private final NotifyExecutorPoolService notifyExecutorPoolService = new NotifyExecutorPoolService(notifyExecutorPoolPort); private final GetAssignmentPort getAssignmentPort = new GetAssignmentAdapter(); @@ -38,8 +37,8 @@ public abstract class ExecutorBase { this.status = ExecutorStatus.STARTING_UP; this.executorType = executorType; // TODO set this automaticly - this.executorURI = new ExecutorURI("localhost:8084"); - + this.executorURI = new ExecutorURI("http://localhost:8084"); + // TODO do this in main // Notify executor-pool about existence. If executor-pools response is successfull start with getting an assignment, else shut down executor. if(!notifyExecutorPoolService.notifyExecutorPool(this.executorURI, this.executorType)) { System.exit(0); @@ -55,6 +54,8 @@ public abstract class ExecutorBase { **/ public void getAssignment() { Task newTask = getAssignmentPort.getAssignment(this.getExecutorType(), this.getExecutorURI()); + System.out.println("New assignment"); + System.out.println(newTask); if (newTask != null) { this.executeTask(newTask); } else { @@ -72,6 +73,8 @@ public abstract class ExecutorBase { task.setResult(execution(task.getInput())); + System.out.println(task.getResult()); + // TODO implement logic if execution was not successful executionFinishedEventPort.publishExecutionFinishedEvent( new ExecutionFinishedEvent(task.getTaskID(), task.getResult(), "SUCCESS")); diff --git a/executor-base/src/main/resources/application.properties b/executor-base/src/main/resources/application.properties index 3eee96a..4316ebf 100644 --- a/executor-base/src/main/resources/application.properties +++ b/executor-base/src/main/resources/application.properties @@ -1,6 +1,6 @@ server.port=8081 roster.url=http://127.0.0.1:8082 -executor-pool.url=http://127.0.0.1:8083 +executor.pool.url=http://127.0.0.1:8083 executor1.url=http://127.0.0.1:8084 executor2.url=http://127.0.0.1:8085 task-list.url=http://127.0.0.1:8081 diff --git a/executorcomputation/src/main/java/ch/unisg/executorcomputation/executor/domain/Executor.java b/executorcomputation/src/main/java/ch/unisg/executorcomputation/executor/domain/Executor.java index eb09699..c3fbb67 100644 --- a/executorcomputation/src/main/java/ch/unisg/executorcomputation/executor/domain/Executor.java +++ b/executorcomputation/src/main/java/ch/unisg/executorcomputation/executor/domain/Executor.java @@ -21,16 +21,18 @@ public class Executor extends ExecutorBase { protected String execution(String... input) { + System.out.println(input); + double result = Double.NaN; int a = Integer.parseInt(input[0]); int b = Integer.parseInt(input[2]); String operation = input[1]; - try { - TimeUnit.SECONDS.sleep(20); - } catch (InterruptedException e) { - e.printStackTrace(); - } + // try { + // TimeUnit.SECONDS.sleep(20); + // } catch (InterruptedException e) { + // e.printStackTrace(); + // } if (operation == "+") { result = a + b; @@ -40,7 +42,9 @@ public class Executor extends ExecutorBase { result = a - b; } + System.out.println("finish"); + return Double.toString(result); } -} \ No newline at end of file +} diff --git a/roster/src/main/java/ch/unisg/roster/RosterApplication.java b/roster/src/main/java/ch/unisg/roster/RosterApplication.java index dd57a5d..bc18c54 100644 --- a/roster/src/main/java/ch/unisg/roster/RosterApplication.java +++ b/roster/src/main/java/ch/unisg/roster/RosterApplication.java @@ -1,13 +1,41 @@ package ch.unisg.roster; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.eclipse.paho.client.mqttv3.MqttException; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import ch.unisg.roster.roster.adapter.common.clients.TapasMqttClient; +import ch.unisg.roster.roster.adapter.in.messaging.mqtt.ExecutorEventMqttListener; +import ch.unisg.roster.roster.adapter.in.messaging.mqtt.ExecutorEventsMqttDispatcher; + @SpringBootApplication public class RosterApplication { + static Logger logger = Logger.getLogger(RosterApplication.class.getName()); + + public static String MQTT_BROKER = "tcp://localhost:1883"; + public static void main(String[] args) { SpringApplication.run(RosterApplication.class, args); + + bootstrapMarketplaceWithMqtt(); } + /** + * Connects to an MQTT broker, presumably the one used by all TAPAS groups to communicate with + * one another + */ + private static void bootstrapMarketplaceWithMqtt() { + try { + ExecutorEventsMqttDispatcher dispatcher = new ExecutorEventsMqttDispatcher(); + TapasMqttClient client = TapasMqttClient.getInstance(MQTT_BROKER, dispatcher); + client.startReceivingMessages(); + } catch (MqttException e) { + logger.log(Level.SEVERE, e.getMessage(), e); + } + } + } diff --git a/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/ExecutorAddedEventListenerMqttAdapter.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/ExecutorAddedEventListenerMqttAdapter.java index 1c3cbcd..10e907e 100644 --- a/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/ExecutorAddedEventListenerMqttAdapter.java +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/ExecutorAddedEventListenerMqttAdapter.java @@ -17,6 +17,9 @@ public class ExecutorAddedEventListenerMqttAdapter extends ExecutorEventMqttList @Override public boolean handleEvent(MqttMessage message) { + + System.out.println("New Executor added!"); + String payload = new String(message.getPayload()); try { @@ -25,7 +28,7 @@ public class ExecutorAddedEventListenerMqttAdapter extends ExecutorEventMqttList JsonNode data = new ObjectMapper().readTree(payload); String taskType = data.get("executorTaskType").asText(); - String executorId = data.get("executorURI").asText(); + String executorId = data.get("executorUri").asText(); ExecutorAddedEvent executorAddedEvent = new ExecutorAddedEvent( new ExecutorURI(executorId), diff --git a/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/ExecutorEventsMqttDispatcher.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/ExecutorEventsMqttDispatcher.java index caa6202..c1b7649 100644 --- a/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/ExecutorEventsMqttDispatcher.java +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/messaging/mqtt/ExecutorEventsMqttDispatcher.java @@ -16,8 +16,8 @@ public class ExecutorEventsMqttDispatcher { // TODO: Register here your topics and event listener adapters private void initRouter() { - router.put("ch/unisg/tapas-group-tutors/executors/added", new ExecutorAddedEventListenerMqttAdapter()); - router.put("ch/unisg/tapas-group-tutors/executors/removed", new ExecutorRemovedEventListenerMqttAdapter()); + router.put("ch/unisg/tapas/executors/added", new ExecutorAddedEventListenerMqttAdapter()); + router.put("ch/unisg/tapas/executors/removed", new ExecutorRemovedEventListenerMqttAdapter()); } /** diff --git a/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/NewTaskController.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/NewTaskController.java index af01346..98b3ac7 100644 --- a/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/NewTaskController.java +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/in/web/NewTaskController.java @@ -1,5 +1,7 @@ package ch.unisg.roster.roster.adapter.in.web; +import java.util.logging.Logger; + import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; @@ -18,6 +20,8 @@ public class NewTaskController { this.newTaskUseCase = newTaskUseCase; } + Logger logger = Logger.getLogger(NewTaskController.class.getName()); + /** * Controller which handles the new task event from the tasklist * @return 201 Create or 409 Conflict @@ -25,10 +29,14 @@ public class NewTaskController { @PostMapping(path = "/task", consumes = {"application/task+json"}) public ResponseEntity newTaskController(@RequestBody Task task) { + logger.info("New task with id:" + task.getTaskID()); + NewTaskCommand command = new NewTaskCommand(task.getTaskID(), task.getTaskType()); boolean success = newTaskUseCase.addNewTaskToQueue(command); + logger.info("Could create task: " + success); + if (success) { return new ResponseEntity<>(HttpStatus.CREATED); } diff --git a/roster/src/main/java/ch/unisg/roster/roster/adapter/out/web/PublishNewTaskEventAdapter.java b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/web/PublishNewTaskEventAdapter.java index 6a6b7f7..0b16567 100644 --- a/roster/src/main/java/ch/unisg/roster/roster/adapter/out/web/PublishNewTaskEventAdapter.java +++ b/roster/src/main/java/ch/unisg/roster/roster/adapter/out/web/PublishNewTaskEventAdapter.java @@ -34,21 +34,23 @@ public class PublishNewTaskEventAdapter implements NewTaskEventPort { @Override public void publishNewTaskEvent(NewTaskEvent event) { - HttpClient client = HttpClient.newHttpClient(); - HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create(server + "/newtask/" + event.taskType.getValue())) - .GET() - .build(); + System.out.println(server2); + + // HttpClient client = HttpClient.newHttpClient(); + // HttpRequest request = HttpRequest.newBuilder() + // .uri(URI.create(server + "/newtask/" + event.taskType.getValue())) + // .GET() + // .build(); - try { - client.send(request, HttpResponse.BodyHandlers.ofString()); - } catch (InterruptedException e) { - logger.log(Level.SEVERE, e.getLocalizedMessage(), e); - Thread.currentThread().interrupt(); - } catch (IOException e) { - logger.log(Level.SEVERE, e.getLocalizedMessage(), e); - } + // try { + // client.send(request, HttpResponse.BodyHandlers.ofString()); + // } catch (InterruptedException e) { + // logger.log(Level.SEVERE, e.getLocalizedMessage(), e); + // Thread.currentThread().interrupt(); + // } catch (IOException e) { + // logger.log(Level.SEVERE, e.getLocalizedMessage(), e); + // } HttpClient client2 = HttpClient.newHttpClient(); HttpRequest request2 = HttpRequest.newBuilder() diff --git a/roster/src/main/java/ch/unisg/roster/roster/application/service/NewTaskService.java b/roster/src/main/java/ch/unisg/roster/roster/application/service/NewTaskService.java index 588ed04..c6e1685 100644 --- a/roster/src/main/java/ch/unisg/roster/roster/application/service/NewTaskService.java +++ b/roster/src/main/java/ch/unisg/roster/roster/application/service/NewTaskService.java @@ -29,6 +29,7 @@ public class NewTaskService implements NewTaskUseCase { public boolean addNewTaskToQueue(NewTaskCommand command) { ExecutorRegistry executorRegistry = ExecutorRegistry.getInstance(); + if (!executorRegistry.containsTaskType(command.getTaskType())) { return false; }