diff --git a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/DatabaseContainerBriefDto.java b/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/DatabaseContainerBriefDto.java index ea5fa9d84679db807b44f63c6db3b2fc776bfc7a..e8afd33ce8c35a4d9972df8f6d39ea600afcebde 100644 --- a/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/DatabaseContainerBriefDto.java +++ b/fda-container-managing-service/api/src/main/java/at/tuwien/api/dto/container/DatabaseContainerBriefDto.java @@ -1,15 +1,14 @@ package at.tuwien.api.dto.container; +import lombok.Builder; import lombok.Getter; import lombok.Setter; -import java.time.Instant; - @Getter @Setter +@Builder public class DatabaseContainerBriefDto { private String id; - private Instant created; } diff --git a/fda-container-managing-service/pom.xml b/fda-container-managing-service/pom.xml index 84e9db36dcf820977c2ca039fef408833c380a48..42dd5905b8c8578b3e64cf8fc9af612e798c9768 100644 --- a/fda-container-managing-service/pom.xml +++ b/fda-container-managing-service/pom.xml @@ -27,6 +27,7 @@ <mapstruct.version>1.4.2.Final</mapstruct.version> <docker.version>3.2.7</docker.version> <testcontainers.version>1.15.2</testcontainers.version> + <swagger.version>2.8.0</swagger.version> </properties> <dependencies> diff --git a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/FdaContainerManagingApplication.java b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/FdaContainerManagingApplication.java index ee3720f419be849d035744ba4ad20f0268bbe9e7..274eae94c9d8dc2fca8368843a8138e5c2794f6e 100644 --- a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/FdaContainerManagingApplication.java +++ b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/FdaContainerManagingApplication.java @@ -10,7 +10,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; @SpringBootApplication @EnableJpaAuditing @EnableJpaRepositories(basePackages = {"at.tuwien.repository"}) -@EntityScan(basePackages = {"at.tuwien.entities"}) +@EntityScan(basePackages = {"at.tuwien.entity"}) @EnableSwagger2 public class FdaContainerManagingApplication { diff --git a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java index 0af2a36d7c49ffb6225e51defa95fd4dfb8f3311..336ba48dec6cee9678dd26f4284e2dc18a42e9ad 100644 --- a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java +++ b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/config/SwaggerConfig.java @@ -8,10 +8,12 @@ import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; import java.util.Collections; @Configuration +@EnableSwagger2 public class SwaggerConfig { @Bean public Docket swaggerConfiguration() { @@ -19,7 +21,7 @@ public class SwaggerConfig { return new Docket(DocumentationType.SWAGGER_2) .select() .paths(PathSelectors.ant("/api/*")) - .apis(RequestHandlerSelectors.basePackage("at.tuwien.controller")) + .apis(RequestHandlerSelectors.basePackage("at.tuwien.endpoints")) .build() .apiInfo(apiInfo()); } diff --git a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseContainerController.java b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseContainerController.java index 5b731531a14058b364adfd13c79578560059193d..8997e697deb7b5dc31f692d2a606203fb84f1fb9 100644 --- a/fda-container-managing-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseContainerController.java +++ b/fda-container-managing-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseContainerController.java @@ -1,12 +1,13 @@ package at.tuwien.endpoints; -import at.tuwien.api.dto.container.ContainerActionTypeDto; +import at.tuwien.api.dto.container.ContainerChangeDto; import at.tuwien.api.dto.container.DatabaseContainerBriefDto; import at.tuwien.api.dto.container.DatabaseContainerDto; import at.tuwien.api.dto.database.DatabaseContainerCreateResponseDto; import at.tuwien.api.dto.database.DatabaseContainerCreateRequestDto; import at.tuwien.entity.DatabaseContainer; import at.tuwien.exception.ContainerNotFoundException; +import at.tuwien.exception.DockerClientException; import at.tuwien.exception.ImageNotFoundException; import at.tuwien.mapper.DatabaseContainerMapper; import at.tuwien.service.ContainerService; @@ -20,6 +21,8 @@ import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.stream.Collectors; +import static at.tuwien.api.dto.container.ContainerActionTypeDto.*; + @Log4j2 @RestController @RequestMapping("/api") @@ -27,14 +30,11 @@ public class DatabaseContainerController { private final ContainerService containerService; private final DatabaseContainerMapper containerMapper; - private final DatabaseContainerMapper databaseContaineMapper; @Autowired - public DatabaseContainerController(ContainerService containerService, DatabaseContainerMapper containerMapper, - DatabaseContainerMapper databaseContaineMapper) { + public DatabaseContainerController(ContainerService containerService, DatabaseContainerMapper containerMapper) { this.containerMapper = containerMapper; this.containerService = containerService; - this.databaseContaineMapper = databaseContaineMapper; } @GetMapping("/database") @@ -43,7 +43,7 @@ public class DatabaseContainerController { final List<DatabaseContainer> containers = containerService.getAll(); return ResponseEntity.ok() .body(containers.stream() - .map(databaseContaineMapper::databaseContainerToDataBaseContainerBriefDto) + .map(containerMapper::databaseContainerToDataBaseContainerBriefDto) .collect(Collectors.toList())); } @@ -62,13 +62,25 @@ public class DatabaseContainerController { public ResponseEntity<DatabaseContainerDto> findById(@RequestParam String id) throws ContainerNotFoundException { final DatabaseContainer container = containerService.getById(id); return ResponseEntity.ok() - .body(databaseContaineMapper.databaseContainerToDataBaseContainerDto(container)); + .body(containerMapper.databaseContainerToDataBaseContainerDto(container)); } @PutMapping("/database/{id}") @ApiOperation("Update a database container") - public ResponseEntity<DatabaseContainerBriefDto> change(@RequestParam String id, @RequestBody ContainerActionTypeDto data) { - return ResponseEntity.status(HttpStatus.ACCEPTED).build(); + public ResponseEntity<DatabaseContainerBriefDto> change(@RequestParam String id, @RequestBody ContainerChangeDto changeDto) throws ContainerNotFoundException, DockerClientException { + final DatabaseContainer container; + if (changeDto.getAction().equals(START)) { + container = containerService.start(id); + } else if (changeDto.getAction().equals(STOP)) { + container = containerService.stop(id); + } else if (changeDto.getAction().equals(REMOVE)) { + container = containerService.remove(id); + } else { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .build(); + } + return ResponseEntity.status(HttpStatus.ACCEPTED) + .body(containerMapper.databaseContainerToDataBaseContainerBriefDto(container)); } @DeleteMapping("/database/{id}") diff --git a/fda-container-managing-service/rest-service/src/main/resources/application-noeureka.yml b/fda-container-managing-service/rest-service/src/main/resources/application-noeureka.yml new file mode 100644 index 0000000000000000000000000000000000000000..0549de84827e4255b882874e0a2b9dc209176593 --- /dev/null +++ b/fda-container-managing-service/rest-service/src/main/resources/application-noeureka.yml @@ -0,0 +1,27 @@ +spring: + main.banner-mode: off + datasource: + url: jdbc:postgresql://localhost:5432/fda + driver-class-name: org.postgresql.Driver + username: postgres + password: postgres + jpa: + show-sql: true + properties: + hibernate: + ddl-auto: create-drop + dialect: org.hibernate.dialect.PostgreSQLDialect + hibernate.ddl-auto: none + hibernate.show-sql: true + application: + name: fda-container-managing +server.port: 9091 +logging: + pattern.console: "%d %highlight(%-5level) %msg%n" + level: + root: warn + at.: debug +eureka: + client: + registerWithEureka: false + fetchRegistry: false \ No newline at end of file diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/config/DockerConfig.java b/fda-container-managing-service/services/src/main/java/at/tuwien/config/DockerConfig.java index 364a01268f75925d091096652091ac57b25fedca..e06cdb90adac645a90aa42b018704129ea8b34ec 100644 --- a/fda-container-managing-service/services/src/main/java/at/tuwien/config/DockerConfig.java +++ b/fda-container-managing-service/services/src/main/java/at/tuwien/config/DockerConfig.java @@ -3,7 +3,9 @@ package at.tuwien.config; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.model.HostConfig; import com.github.dockerjava.api.model.RestartPolicy; +import com.github.dockerjava.core.DefaultDockerClientConfig; import com.github.dockerjava.core.DockerClientBuilder; +import com.github.dockerjava.core.DockerClientConfig; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -18,6 +20,10 @@ public class DockerConfig { @Bean public DockerClient dockerClientConfiguration() { - return DockerClientBuilder.getInstance("unix:///var/run/docker.sock").build(); + final DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder() + .withDockerHost("unix:///var/run/docker.sock") + .build(); + return DockerClientBuilder.getInstance(config) + .build(); } } diff --git a/fda-container-managing-service/services/src/main/java/at/tuwien/service/ContainerService.java b/fda-container-managing-service/services/src/main/java/at/tuwien/service/ContainerService.java index 8bce941caa2a738c1c8a4ed6a7cc432aff1765af..cd248e60cb17ca4dc0731e0422831f18069329fc 100644 --- a/fda-container-managing-service/services/src/main/java/at/tuwien/service/ContainerService.java +++ b/fda-container-managing-service/services/src/main/java/at/tuwien/service/ContainerService.java @@ -122,16 +122,16 @@ public class ContainerService { * Starts a database container by given container ID * * @param containerId The container ID - * @return True if state changed + * @return The container */ - public boolean start(String containerId) throws ContainerNotFoundException, DockerClientException { + public DatabaseContainer start(String containerId) throws ContainerNotFoundException, DockerClientException { final DatabaseContainer container = getById(containerId); try { dockerClient.startContainerCmd(container.getContainerId()).exec(); } catch (NotFoundException | NotModifiedException e) { throw new DockerClientException("docker client failed", e); } - return true; + return container; } }