diff --git a/.deployment/docker-compose.yml b/.deployment/docker-compose.yml index 6d8f256..b8397f3 100644 --- a/.deployment/docker-compose.yml +++ b/.deployment/docker-compose.yml @@ -1,57 +1,108 @@ version: "3.0" services: - reverse-proxy: - image: traefik:v2.1.3 - command: - - --entrypoints.web.address=:80 - - --entrypoints.websecure.address=:443 - - --providers.docker=true - - --certificatesResolvers.le.acme.httpChallenge.entryPoint=web - - --certificatesresolvers.le.acme.email=martin.eigenmann@unisg.ch - - --certificatesresolvers.le.acme.storage=/acme.json - - --providers.docker.exposedByDefault=false - - --serversTransport.insecureSkipVerify=true - ports: - - "80:80" - - "443:443" - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - ./acme.json:/acme.json - restart: unless-stopped - labels: - - "traefik.enable=true" - - "traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)" - - "traefik.http.routers.http-catchall.entrypoints=web" - - "traefik.http.routers.http-catchall.middlewares=redirect-to-https" - - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" - - tapas-tasks: - image: openjdk - command: "java -jar /data/tapas-tasks-0.0.1-SNAPSHOT.jar" - restart: unless-stopped - volumes: - - ./:/data/ - labels: - - "traefik.enable=true" - - "traefik.http.routers.tapas-tasks.rule=Host(`tapas-tasks.${PUB_IP}.nip.io`)" - - "traefik.http.routers.tapas-tasks.service=tapas-tasks" - - "traefik.http.services.tapas-tasks.loadbalancer.server.port=8081" - - "traefik.http.routers.tapas-tasks.tls=true" - - "traefik.http.routers.tapas-tasks.entryPoints=web,websecure" - - "traefik.http.routers.tapas-tasks.tls.certresolver=le" + reverse-proxy: + image: traefik:v2.1.3 + command: + - --entrypoints.web.address=:80 + - --entrypoints.websecure.address=:443 + - --providers.docker=true + - --certificatesResolvers.le.acme.httpChallenge.entryPoint=web + - --certificatesresolvers.le.acme.email=martin.eigenmann@unisg.ch + - --certificatesresolvers.le.acme.storage=/acme.json + - --providers.docker.exposedByDefault=false + - --serversTransport.insecureSkipVerify=true + ports: + - "80:80" + - "443:443" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./acme.json:/acme.json + restart: unless-stopped + labels: + - "traefik.enable=true" + - "traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)" + - "traefik.http.routers.http-catchall.entrypoints=web" + - "traefik.http.routers.http-catchall.middlewares=redirect-to-https" + - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" - app: - image: openjdk - command: "java -jar /data/app-0.1.0.jar" - restart: unless-stopped - volumes: - - ./:/data/ - labels: - - "traefik.enable=true" - - "traefik.http.routers.app.rule=Host(`app.${PUB_IP}.nip.io`)" - - "traefik.http.routers.app.service=app" - - "traefik.http.services.app.loadbalancer.server.port=8080" - - "traefik.http.routers.app.tls=true" - - "traefik.http.routers.app.entryPoints=web,websecure" - - "traefik.http.routers.app.tls.certresolver=le" + tapas-tasks: + image: openjdk + command: "java -jar /data/tapas-tasks-0.0.1-SNAPSHOT.jar" + restart: unless-stopped + volumes: + - ./:/data/ + labels: + - "traefik.enable=true" + - "traefik.http.routers.tapas-tasks.rule=Host(`tapas-tasks.${PUB_IP}.nip.io`)" + - "traefik.http.routers.tapas-tasks.service=tapas-tasks" + - "traefik.http.services.tapas-tasks.loadbalancer.server.port=8081" + - "traefik.http.routers.tapas-tasks.tls=true" + - "traefik.http.routers.tapas-tasks.entryPoints=web,websecure" + - "traefik.http.routers.tapas-tasks.tls.certresolver=le" + + assignment: + image: openjdk + command: "java -jar /data/assignment-0.0.1.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" + + executor-pool: + image: openjdk + command: "java -jar /data/executor-pool-0.0.1.jar" + restart: unless-stopped + volumes: + - ./:/data/ + labels: + - "traefik.enable=true" + - "traefik.http.routers.executor-pool.rule=Host(`executor-pool.${PUB_IP}.nip.io`)" + - "traefik.http.routers.executor-pool.service=executor-pool" + - "traefik.http.services.executor-pool.loadbalancer.server.port=8083" + - "traefik.http.routers.executor-pool.tls=true" + - "traefik.http.routers.executor-pool.entryPoints=web,websecure" + - "traefik.http.routers.executor-pool.tls.certresolver=le" + + executor1: + image: openjdk + command: "java -jar /data/executor1-0.0.1.jar" + restart: unless-stopped + depends_on: + - executor-pool + - assignment + 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" + + executor2: + image: openjdk + command: "java -jar /data/executor2-0.0.1.jar" + restart: unless-stopped + depends_on: + - executor-pool + - assignment + 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" diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index 42b93ad..0429aca 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -41,6 +41,9 @@ jobs: run: mvn -f executor-pool/pom.xml --batch-mode --update-snapshots verify - run: cp ./executor-pool/target/executor-pool-0.0.1.jar ./target + - name: Build with Maven + run: mvn -f executorBase/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.jar ./target diff --git a/app/pom.xml b/app/pom.xml deleted file mode 100644 index 5f4a1fe..0000000 --- a/app/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - 4.0.0 - - com.dockerforjavadevelopers - app - 0.1.0 - - - org.springframework.boot - spring-boot-starter-parent - 2.2.1.RELEASE - - - - - org.springframework.boot - spring-boot-starter-web - - - - junit - junit - 4.13.1 - test - - - - - - com.dockerforjavadevelopers.hello.Application - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git a/app/src/main/java/com/app/hello/Application.java b/app/src/main/java/com/app/hello/Application.java deleted file mode 100755 index 4c5e45f..0000000 --- a/app/src/main/java/com/app/hello/Application.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.app.hello; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@EnableAutoConfiguration -@ComponentScan -public class Application { - - public static void main(String[] args) { - ApplicationContext ctx = SpringApplication.run(Application.class, args); - - } - -} diff --git a/app/src/main/java/com/app/hello/HelloController.java b/app/src/main/java/com/app/hello/HelloController.java deleted file mode 100755 index d8f810b..0000000 --- a/app/src/main/java/com/app/hello/HelloController.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.app.hello; - -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.bind.annotation.RequestMapping; - -@RestController -public class HelloController { - - @RequestMapping("/") - public String index() { - return "Hello World! Nice to see you :-)\n"; - } - -} diff --git a/app/src/test/java/com/app/hello/DummyTest.java b/app/src/test/java/com/app/hello/DummyTest.java deleted file mode 100755 index 7447934..0000000 --- a/app/src/test/java/com/app/hello/DummyTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.app.hello; - -import static org.junit.Assert.*; - -import org.junit.Test; - -public class DummyTest { - - @Test - public void aTest() { - assertEquals(true, true); - } -} diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/TaskCompletedController.java b/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/TaskCompletedController.java index e8335ed..cde4c0a 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/TaskCompletedController.java +++ b/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/in/web/TaskCompletedController.java @@ -22,7 +22,7 @@ public class TaskCompletedController { @PostMapping(path = "/task/completed", consumes = {"application/json"}) public ResponseEntity addNewTaskTaskToTaskList(@RequestBody Task task) { - TaskCompletedCommand command = new TaskCompletedCommand(task.getTaskID(), task.getTaskType(), + TaskCompletedCommand command = new TaskCompletedCommand(task.getTaskID(), task.getStatus(), task.getResult()); taskCompletedUseCase.taskCompleted(command); diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/GetAllExecutorInExecutorPoolByTypeAdapter.java b/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/GetAllExecutorInExecutorPoolByTypeAdapter.java new file mode 100644 index 0000000..4163a53 --- /dev/null +++ b/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/GetAllExecutorInExecutorPoolByTypeAdapter.java @@ -0,0 +1,55 @@ +package ch.unisg.assignment.assignment.adapter.out.web; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.springframework.context.annotation.Primary; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; + +import ch.unisg.assignment.assignment.application.port.out.GetAllExecutorInExecutorPoolByTypePort; +import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType; + +@Component +@Primary +public class GetAllExecutorInExecutorPoolByTypeAdapter implements GetAllExecutorInExecutorPoolByTypePort { + + @Override + public boolean doesExecutorTypeExist(ExecutorType type) { + String server = "http://127.0.0.1:8083"; + + Logger logger = Logger.getLogger(PublishNewTaskEventAdapter.class.getName()); + + + HttpClient client = HttpClient.newHttpClient(); + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(server + "/executor-pool/GetAllExecutorInExecutorPoolByType/" + type.getValue())) + .header("Content-Type", "application/json") + .GET() + .build(); + + + try { + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + if (response.statusCode() == HttpStatus.OK.value()) { + JSONArray jsonArray = new JSONArray(response.body().toString()); + if (jsonArray.length() > 0) { + return true; + } + } + } catch (IOException | InterruptedException e) { + logger.log(Level.SEVERE, e.getLocalizedMessage(), e); + // Restore interrupted state... + Thread.currentThread().interrupt(); + } + return false; + } + +} diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/PublishNewTaskEventAdapter.java b/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/PublishNewTaskEventAdapter.java index 1db2b84..5007c1c 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/PublishNewTaskEventAdapter.java +++ b/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/PublishNewTaskEventAdapter.java @@ -18,7 +18,8 @@ import ch.unisg.assignment.assignment.domain.event.NewTaskEvent; @Primary public class PublishNewTaskEventAdapter implements NewTaskEventPort { - String server = "http://127.0.0.1:8085"; + String server = "http://127.0.0.1:8084"; + String server2 = "http://127.0.0.1:8085"; Logger logger = Logger.getLogger(PublishNewTaskEventAdapter.class.getName()); @@ -32,6 +33,21 @@ public class PublishNewTaskEventAdapter implements NewTaskEventPort { .build(); + try { + client.send(request, HttpResponse.BodyHandlers.ofString()); + } catch (IOException | InterruptedException e) { + logger.log(Level.SEVERE, e.getLocalizedMessage(), e); + // Restore interrupted state... + Thread.currentThread().interrupt(); + } + + HttpClient client2 = HttpClient.newHttpClient(); + HttpRequest request2 = HttpRequest.newBuilder() + .uri(URI.create(server2 + "/newtask/" + event.taskType.getValue())) + .GET() + .build(); + + try { client.send(request, HttpResponse.BodyHandlers.ofString()); } catch (IOException | InterruptedException e) { diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/PublishTaskAssignedEventAdapter.java b/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/PublishTaskAssignedEventAdapter.java index 85bb9ab..56cb803 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/PublishTaskAssignedEventAdapter.java +++ b/assignment/src/main/java/ch/unisg/assignment/assignment/adapter/out/web/PublishTaskAssignedEventAdapter.java @@ -19,7 +19,7 @@ import ch.unisg.assignment.assignment.domain.event.TaskAssignedEvent; @Primary public class PublishTaskAssignedEventAdapter implements TaskAssignedEventPort { - String server = "http://127.0.0.1:8085"; + String server = "http://127.0.0.1:8081"; Logger logger = Logger.getLogger(PublishTaskAssignedEventAdapter.class.getName()); @@ -32,7 +32,7 @@ public class PublishTaskAssignedEventAdapter implements TaskAssignedEventPort { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create(server + "/tasks/completeTask")) + .uri(URI.create(server + "/tasks/assignTask")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(body)) .build(); diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/TaskCompletedCommand.java b/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/TaskCompletedCommand.java index e324e89..b0af2b4 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/TaskCompletedCommand.java +++ b/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/in/TaskCompletedCommand.java @@ -2,7 +2,6 @@ package ch.unisg.assignment.assignment.application.port.in; import javax.validation.constraints.NotNull; -import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType; import ch.unisg.assignment.common.SelfValidating; import lombok.EqualsAndHashCode; import lombok.Value; @@ -14,18 +13,14 @@ public class TaskCompletedCommand extends SelfValidating{ @NotNull private final String taskID; - @NotNull - private final ExecutorType taskType; - @NotNull private final String taskStatus; @NotNull private final String taskResult; - public TaskCompletedCommand(String taskID, ExecutorType taskType, String taskStatus, String taskResult) { + public TaskCompletedCommand(String taskID, String taskStatus, String taskResult) { this.taskID = taskID; - this.taskType = taskType; this.taskStatus = taskStatus; this.taskResult = taskResult; this.validateSelf(); diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/out/GetAllExecutorInExecutorPoolByTypePort.java b/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/out/GetAllExecutorInExecutorPoolByTypePort.java new file mode 100644 index 0000000..e751727 --- /dev/null +++ b/assignment/src/main/java/ch/unisg/assignment/assignment/application/port/out/GetAllExecutorInExecutorPoolByTypePort.java @@ -0,0 +1,9 @@ +package ch.unisg.assignment.assignment.application.port.out; + +import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType; + +public interface GetAllExecutorInExecutorPoolByTypePort { + boolean doesExecutorTypeExist(ExecutorType type); +} + + diff --git a/assignment/src/main/java/ch/unisg/assignment/assignment/application/service/NewTaskService.java b/assignment/src/main/java/ch/unisg/assignment/assignment/application/service/NewTaskService.java index 069ee29..7d7de5c 100644 --- a/assignment/src/main/java/ch/unisg/assignment/assignment/application/service/NewTaskService.java +++ b/assignment/src/main/java/ch/unisg/assignment/assignment/application/service/NewTaskService.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Component; import ch.unisg.assignment.assignment.application.port.in.NewTaskCommand; import ch.unisg.assignment.assignment.application.port.in.NewTaskUseCase; +import ch.unisg.assignment.assignment.application.port.out.GetAllExecutorInExecutorPoolByTypePort; import ch.unisg.assignment.assignment.application.port.out.NewTaskEventPort; import ch.unisg.assignment.assignment.domain.Roster; import ch.unisg.assignment.assignment.domain.Task; @@ -21,14 +22,13 @@ import lombok.RequiredArgsConstructor; public class NewTaskService implements NewTaskUseCase { private final NewTaskEventPort newTaskEventPort; + private final GetAllExecutorInExecutorPoolByTypePort getAllExecutorInExecutorPoolByTypePort; @Override public boolean addNewTaskToQueue(NewTaskCommand command) { // TODO Get availableTaskTypes from executor pool - List availableTaskTypes = Arrays.asList("ADDITION", "ROBOT"); - - if (!availableTaskTypes.contains(command.getTaskType().getValue())) { + if (!getAllExecutorInExecutorPoolByTypePort.doesExecutorTypeExist(command.getTaskType())) { return false; } 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 fd26d47..971e583 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 @@ -30,9 +30,9 @@ public class ExecutionFinishedEventAdapter implements ExecutionFinishedEventPort HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create(server+"/task/"+event.getTaskID())) + .uri(URI.create(server+"/task/completed")) .header("Content-Type", "application/json") - .PUT(HttpRequest.BodyPublishers.ofString(body)) + .POST(HttpRequest.BodyPublishers.ofString(body)) .build(); try { 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 bf465f7..720b015 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 @@ -1,11 +1,16 @@ package ch.unisg.executorBase.executor.adapter.out.web; +import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.util.logging.Level; +import java.util.logging.Logger; import org.json.JSONObject; import org.springframework.context.annotation.Primary; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; import ch.unisg.executorBase.executor.application.port.out.NotifyExecutorPoolPort; @@ -17,34 +22,36 @@ public class NotifyExecutorPoolAdapter implements NotifyExecutorPoolPort { String server = "http://127.0.0.1:8083"; + Logger logger = Logger.getLogger(NotifyExecutorPoolAdapter.class.getName()); + @Override public boolean notifyExecutorPool(String ip, int port, ExecutorType executorType) { String body = new JSONObject() - .put("executorType", executorType) - .put("ip", ip) - .put("port", port) + .put("executorTaskType", executorType) + .put("executorIp", ip) + .put("executorPort", Integer.toString(port)) .toString(); HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create(server+"/executor/new/")) + .uri(URI.create(server+"/executor-pool/AddExecutor")) + .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(body)) .build(); - /** Needs the other service running try { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); - } catch (IOException e) { - e.printStackTrace(); - } catch (InterruptedException e) { - e.printStackTrace(); + if (response.statusCode() == HttpStatus.CREATED.value()) { + return true; + } + } catch (IOException | InterruptedException e) { + logger.log(Level.SEVERE, e.getLocalizedMessage(), e); + // Restore interrupted state... + Thread.currentThread().interrupt(); } - **/ - // TODO return true or false depending on result of http request; - - return true; + return false; } } diff --git a/executor-pool/src/main/java/ch/unisg/executorpool/adapter/in/web/ExecutorMediaType.java b/executor-pool/src/main/java/ch/unisg/executorpool/adapter/in/web/ExecutorMediaType.java index cbbc33b..0ca4e1f 100644 --- a/executor-pool/src/main/java/ch/unisg/executorpool/adapter/in/web/ExecutorMediaType.java +++ b/executor-pool/src/main/java/ch/unisg/executorpool/adapter/in/web/ExecutorMediaType.java @@ -23,10 +23,15 @@ final public class ExecutorMediaType { String serializedList = "[ \n"; for (ExecutorClass executor: listOfExecutors) { - serializedList += serialize(executor) + ",\n"; + serializedList += serialize(executor) + "\n"; } - return serializedList + "\n ]"; + // return serializedList + "\n ]"; + JSONArray jsonArray = new JSONArray(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("executorIp", "localhost"); + jsonArray.put(jsonObject); + return jsonArray.toString(); } private ExecutorMediaType() { } diff --git a/executor-pool/src/main/java/ch/unisg/executorpool/adapter/in/web/GetAllExecutorsInExecutorPoolWebController.java b/executor-pool/src/main/java/ch/unisg/executorpool/adapter/in/web/GetAllExecutorsInExecutorPoolWebController.java index ada219c..70a5fd2 100644 --- a/executor-pool/src/main/java/ch/unisg/executorpool/adapter/in/web/GetAllExecutorsInExecutorPoolWebController.java +++ b/executor-pool/src/main/java/ch/unisg/executorpool/adapter/in/web/GetAllExecutorsInExecutorPoolWebController.java @@ -2,7 +2,6 @@ package ch.unisg.executorpool.adapter.in.web; import ch.unisg.executorpool.application.port.in.GetAllExecutorsInExecutorPoolUseCase; import ch.unisg.executorpool.domain.ExecutorClass; -import ch.unisg.tapastasks.tasks.adapter.in.web.TaskMediaType; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; diff --git a/executor-pool/src/main/resources/application.properties b/executor-pool/src/main/resources/application.properties index 4d360de..8f91ca7 100644 --- a/executor-pool/src/main/resources/application.properties +++ b/executor-pool/src/main/resources/application.properties @@ -1 +1 @@ -server.port=8081 +server.port=8083 diff --git a/executor1/src/main/java/ch/unisg/executor1/executor/adapter/in/web/TaskAvailableController.java b/executor1/src/main/java/ch/unisg/executor1/executor/adapter/in/web/TaskAvailableController.java index 5501885..1f08545 100644 --- a/executor1/src/main/java/ch/unisg/executor1/executor/adapter/in/web/TaskAvailableController.java +++ b/executor1/src/main/java/ch/unisg/executor1/executor/adapter/in/web/TaskAvailableController.java @@ -1,5 +1,7 @@ package ch.unisg.executor1.executor.adapter.in.web; +import java.util.concurrent.CompletableFuture; + import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -25,7 +27,7 @@ public class TaskAvailableController { if (ExecutorType.contains(taskType.toUpperCase())) { TaskAvailableCommand command = new TaskAvailableCommand( ExecutorType.valueOf(taskType.toUpperCase())); - taskAvailableUseCase.newTaskAvailable(command); + CompletableFuture.runAsync(() -> taskAvailableUseCase.newTaskAvailable(command)); } // Add the content type as a response header diff --git a/executor1/src/main/java/ch/unisg/executor1/executor/domain/Executor.java b/executor1/src/main/java/ch/unisg/executor1/executor/domain/Executor.java index 4a7734c..cc11e64 100644 --- a/executor1/src/main/java/ch/unisg/executor1/executor/domain/Executor.java +++ b/executor1/src/main/java/ch/unisg/executor1/executor/domain/Executor.java @@ -14,7 +14,7 @@ import ch.unisg.executorBase.executor.domain.ExecutorBase; import ch.unisg.executorBase.executor.domain.ExecutorType; public class Executor extends ExecutorBase { - + private static final Executor executor = new Executor(ExecutorType.ROBOT); private final UserToRobotPort userToRobotPort = new UserToRobotAdapter(); private final InstructionToRobotPort instructionToRobotPort = new InstructionToRobotAdapter(); @@ -31,12 +31,24 @@ public class Executor extends ExecutorBase { @Override protected String execution() { - + String key = userToRobotPort.userToRobot(); + try { + TimeUnit.MILLISECONDS.sleep(1500); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } boolean result1 = instructionToRobotPort.instructionToRobot(key); + try { + TimeUnit.MILLISECONDS.sleep(10000); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } deleteUserFromRobotPort.deleteUserFromRobot(key); return Boolean.toString(result1); } -} \ No newline at end of file +} diff --git a/executor2/src/main/java/ch/unisg/executor2/executor/domain/Executor.java b/executor2/src/main/java/ch/unisg/executor2/executor/domain/Executor.java index 6aa1656..4d022b5 100644 --- a/executor2/src/main/java/ch/unisg/executor2/executor/domain/Executor.java +++ b/executor2/src/main/java/ch/unisg/executor2/executor/domain/Executor.java @@ -23,7 +23,7 @@ public class Executor extends ExecutorBase { int a = 20; int b = 20; try { - TimeUnit.SECONDS.sleep(10); + TimeUnit.SECONDS.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); } diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/CompleteTaskWebController.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/CompleteTaskWebController.java index e160c2b..536b72c 100644 --- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/CompleteTaskWebController.java +++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/in/web/CompleteTaskWebController.java @@ -23,6 +23,7 @@ public class CompleteTaskWebController { @PostMapping(path = "/tasks/completeTask", consumes = {TaskMediaType.TASK_MEDIA_TYPE}) public ResponseEntity completeTask (@RequestBody Task task){ + try { CompleteTaskCommand command = new CompleteTaskCommand( task.getTaskId(), task.getTaskResult() diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/out/web/PublishNewTaskAddedEventWebAdapter.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/out/web/PublishNewTaskAddedEventWebAdapter.java index 7ae8e90..d642eca 100644 --- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/out/web/PublishNewTaskAddedEventWebAdapter.java +++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/adapter/out/web/PublishNewTaskAddedEventWebAdapter.java @@ -27,9 +27,7 @@ public class PublishNewTaskAddedEventWebAdapter implements NewTaskAddedEventPort //Here we would need to work with DTOs in case the payload of calls becomes more complex var values = new HashMap() {{ - put("taskname",event.taskName); - put("tasklist",event.taskListName); - put("taskId", event.taskId); + put("taskID", event.taskId); put("taskType", event.taskType); }}; @@ -43,11 +41,11 @@ public class PublishNewTaskAddedEventWebAdapter implements NewTaskAddedEventPort HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create(server+"/roster/newtask/")) + .uri(URI.create(server+"/task")) + .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(requestBody)) .build(); - /** Needs the other service running try { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); } catch (IOException e) { @@ -55,6 +53,5 @@ public class PublishNewTaskAddedEventWebAdapter implements NewTaskAddedEventPort } catch (InterruptedException e) { e.printStackTrace(); } - **/ } } diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/AddNewTaskToTaskListService.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/AddNewTaskToTaskListService.java index 2aa360c..24f68d0 100644 --- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/AddNewTaskToTaskListService.java +++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/AddNewTaskToTaskListService.java @@ -30,6 +30,7 @@ public class AddNewTaskToTaskListService implements AddNewTaskToTaskListUseCase //the core and then the integration event in the application layer. if (newTask != null) { NewTaskAddedEvent newTaskAdded = new NewTaskAddedEvent(newTask.getTaskName().getValue(), + taskList.getTaskListName().getValue(), newTask.getTaskId().getValue(), newTask.getTaskType().getValue()); newTaskAddedEventPort.publishNewTaskAddedEvent(newTaskAdded); } diff --git a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/DeleteTaskService.java b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/DeleteTaskService.java index 05d1da5..cfebcd6 100644 --- a/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/DeleteTaskService.java +++ b/tapas-tasks/src/main/java/ch/unisg/tapastasks/tasks/application/service/DeleteTaskService.java @@ -18,6 +18,9 @@ public class DeleteTaskService implements DeleteTaskUseCase { @Override public Optional deleteTask(DeleteTaskCommand command){ + + // TODO check with assignment service if we can delte + TaskList taskList = TaskList.getTapasTaskList(); return taskList.deleteTaskById(command.getTaskId());