You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by bh...@apache.org on 2019/07/02 14:09:21 UTC
[incubator-dlab] branch feature/projects updated: DLAB-833 added
API for activating/deactivating project
This is an automated email from the ASF dual-hosted git repository.
bhliva pushed a commit to branch feature/projects
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
The following commit(s) were added to refs/heads/feature/projects by this push:
new 5fed1d4 DLAB-833 added API for activating/deactivating project
5fed1d4 is described below
commit 5fed1d452bf3259b20c0d2a080b355cc3162d82f
Author: bhliva <bo...@epam.com>
AuthorDate: Tue Jul 2 17:09:00 2019 +0300
DLAB-833 added API for activating/deactivating project
---
...jectTerminateDTO.java => ProjectActionDTO.java} | 2 +-
.../dlab/backendapi/resources/ProjectResource.java | 20 ++++++++++--
.../dlab/backendapi/service/ProjectService.java | 9 ++++--
.../service/impl/ProjectServiceImpl.java | 30 ++++++++++++------
.../epam/dlab/backendapi/domain/EndpointDTO.java | 2 ++
.../epam/dlab/backendapi/domain/ProjectDTO.java | 7 +++-
.../dlab/backendapi/resources/ProjectResource.java | 37 ++++++++++++++++++++++
.../resources/dto/ProjectActionFormDTO.java | 10 ++++++
.../dlab/backendapi/service/ProjectService.java | 2 ++
.../impl/InfrastructureInfoServiceBase.java | 6 ++--
.../service/impl/ProjectServiceImpl.java | 24 +++++++++++---
11 files changed, 126 insertions(+), 23 deletions(-)
diff --git a/services/dlab-model/src/main/java/com/epam/dlab/dto/project/ProjectTerminateDTO.java b/services/dlab-model/src/main/java/com/epam/dlab/dto/project/ProjectActionDTO.java
similarity index 77%
rename from services/dlab-model/src/main/java/com/epam/dlab/dto/project/ProjectTerminateDTO.java
rename to services/dlab-model/src/main/java/com/epam/dlab/dto/project/ProjectActionDTO.java
index 533e342..1634c11 100644
--- a/services/dlab-model/src/main/java/com/epam/dlab/dto/project/ProjectTerminateDTO.java
+++ b/services/dlab-model/src/main/java/com/epam/dlab/dto/project/ProjectActionDTO.java
@@ -7,7 +7,7 @@ import lombok.Data;
@Data
@AllArgsConstructor
-public class ProjectTerminateDTO extends ResourceBaseDTO<ProjectTerminateDTO> {
+public class ProjectActionDTO extends ResourceBaseDTO<ProjectActionDTO> {
@JsonProperty("project_name")
private final String name;
}
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java
index fa7aee1..005ad9f 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java
@@ -2,8 +2,8 @@ package com.epam.dlab.backendapi.resources;
import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.service.ProjectService;
+import com.epam.dlab.dto.project.ProjectActionDTO;
import com.epam.dlab.dto.project.ProjectCreateDTO;
-import com.epam.dlab.dto.project.ProjectTerminateDTO;
import com.google.inject.Inject;
import io.dropwizard.auth.Auth;
@@ -35,7 +35,23 @@ public class ProjectResource {
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
- public Response terminateProject(@Auth UserInfo userInfo, ProjectTerminateDTO dto) {
+ public Response terminateProject(@Auth UserInfo userInfo, ProjectActionDTO dto) {
return Response.ok(projectService.terminate(userInfo, dto)).build();
}
+
+ @Path("/start")
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response startProject(@Auth UserInfo userInfo, ProjectActionDTO dto) {
+ return Response.ok(projectService.start(userInfo, dto)).build();
+ }
+
+ @Path("/stop")
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response stopProject(@Auth UserInfo userInfo, ProjectActionDTO dto) {
+ return Response.ok(projectService.stop(userInfo, dto)).build();
+ }
}
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
index b18aa8c..65d4b70 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
@@ -1,11 +1,16 @@
package com.epam.dlab.backendapi.service;
import com.epam.dlab.auth.UserInfo;
+import com.epam.dlab.dto.project.ProjectActionDTO;
import com.epam.dlab.dto.project.ProjectCreateDTO;
-import com.epam.dlab.dto.project.ProjectTerminateDTO;
public interface ProjectService {
String create(UserInfo userInfo, ProjectCreateDTO projectCreateDTO);
- String terminate(UserInfo userInfo, ProjectTerminateDTO dto);
+
+ String terminate(UserInfo userInfo, ProjectActionDTO dto);
+
+ String start(UserInfo userInfo, ProjectActionDTO dto);
+
+ String stop(UserInfo userInfo, ProjectActionDTO dto);
}
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
index 4eebcfc..c0a1335 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
@@ -8,8 +8,8 @@ import com.epam.dlab.backendapi.core.response.folderlistener.FolderListenerExecu
import com.epam.dlab.backendapi.core.response.handlers.ProjectCallbackHandler;
import com.epam.dlab.backendapi.service.ProjectService;
import com.epam.dlab.dto.ResourceBaseDTO;
+import com.epam.dlab.dto.project.ProjectActionDTO;
import com.epam.dlab.dto.project.ProjectCreateDTO;
-import com.epam.dlab.dto.project.ProjectTerminateDTO;
import com.epam.dlab.rest.client.RESTService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.google.inject.Inject;
@@ -18,6 +18,7 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
public class ProjectServiceImpl implements ProjectService {
private static final String PROJECT_IMAGE = "docker.dlab-project";
+ private static final String EDGE_IMAGE = "docker.dlab-edge";
@Inject
protected RESTService selfService;
@Inject
@@ -33,15 +34,26 @@ public class ProjectServiceImpl implements ProjectService {
@Override
public String create(UserInfo userInfo, ProjectCreateDTO dto) {
- return executeDocker(userInfo, dto, DockerAction.CREATE, dto.getName());
+ return executeDocker(userInfo, dto, DockerAction.CREATE, dto.getName(), "project", PROJECT_IMAGE);
}
@Override
- public String terminate(UserInfo userInfo, ProjectTerminateDTO dto) {
- return executeDocker(userInfo, dto, DockerAction.TERMINATE, dto.getName());
+ public String terminate(UserInfo userInfo, ProjectActionDTO dto) {
+ return executeDocker(userInfo, dto, DockerAction.TERMINATE, dto.getName(), "project", PROJECT_IMAGE);
}
- private String executeDocker(UserInfo userInfo, ResourceBaseDTO dto, DockerAction action, String projectName) {
+ @Override
+ public String start(UserInfo userInfo, ProjectActionDTO dto) {
+ return executeDocker(userInfo, dto, DockerAction.START, dto.getName(), "edge", EDGE_IMAGE);
+ }
+
+ @Override
+ public String stop(UserInfo userInfo, ProjectActionDTO dto) {
+ return executeDocker(userInfo, dto, DockerAction.STOP, dto.getName(), "edge", EDGE_IMAGE);
+ }
+
+ private String executeDocker(UserInfo userInfo, ResourceBaseDTO dto, DockerAction action, String projectName,
+ String resourceType, String image) {
String uuid = DockerCommands.generateUUID();
folderListenerExecutor.start(configuration.getKeyLoaderDirectory(),
@@ -51,14 +63,14 @@ public class ProjectServiceImpl implements ProjectService {
RunDockerCommand runDockerCommand = new RunDockerCommand()
.withInteractive()
- .withName(String.join("_", projectName, "project"))
+ .withName(String.join("_", projectName, resourceType))
.withVolumeForRootKeys(configuration.getKeyDirectory())
.withVolumeForResponse(configuration.getKeyLoaderDirectory())
- .withVolumeForLog(configuration.getDockerLogDirectory(), "project")
- .withResource("project")
+ .withVolumeForLog(configuration.getDockerLogDirectory(), resourceType)
+ .withResource(resourceType)
.withRequestId(uuid)
.withConfKeyName(configuration.getAdminKey())
- .withImage(PROJECT_IMAGE)
+ .withImage(image)
.withAction(action);
try {
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/EndpointDTO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/EndpointDTO.java
index 15c2f18..e2cdfb3 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/EndpointDTO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/EndpointDTO.java
@@ -1,6 +1,7 @@
package com.epam.dlab.backendapi.domain;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@Data
@@ -10,5 +11,6 @@ public class EndpointDTO {
private final String name;
private final String url;
private final String account;
+ @JsonProperty("endpoint_tag")
private final String tag;
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java
index 2305774..2354857 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java
@@ -29,7 +29,12 @@ public class ProjectDTO {
public enum Status {
CREATING,
ACTIVE,
- FAILED, TERMINATED, TERMINATING;
+ FAILED,
+ TERMINATED,
+ TERMINATING,
+ STOPPING,
+ STARTING,
+ STOPPED;
public static Status from(UserInstanceStatus userInstanceStatus) {
if (userInstanceStatus == UserInstanceStatus.RUNNING) {
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java
index 3a2b3ff..d6986cd 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java
@@ -3,6 +3,7 @@ package com.epam.dlab.backendapi.resources;
import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.domain.ProjectDTO;
import com.epam.dlab.backendapi.domain.UpdateProjectBudgetDTO;
+import com.epam.dlab.backendapi.resources.dto.ProjectActionFormDTO;
import com.epam.dlab.backendapi.service.ProjectService;
import com.epam.dlab.rest.dto.ErrorDTO;
import com.google.inject.Inject;
@@ -61,6 +62,42 @@ public class ProjectResource {
.build();
}
+ @Operation(summary = "Start project", tags = "project")
+ @ApiResponses({
+ @ApiResponse(responseCode = "202", description = "Project is starting"),
+ @ApiResponse(responseCode = "400", description = "Validation error", content = @Content(mediaType =
+ MediaType.APPLICATION_JSON,
+ schema = @Schema(implementation = ErrorDTO.class)))
+ })
+ @Path("start")
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Response startProject(@Parameter(hidden = true) @Auth UserInfo userInfo,
+ @Valid ProjectActionFormDTO startProjectDto) {
+ projectService.start(userInfo, startProjectDto.getProjectName());
+ return Response
+ .accepted()
+ .build();
+ }
+
+ @Operation(summary = "Stop project", tags = "project")
+ @ApiResponses({
+ @ApiResponse(responseCode = "202", description = "Project is stopping"),
+ @ApiResponse(responseCode = "400", description = "Validation error", content = @Content(mediaType =
+ MediaType.APPLICATION_JSON,
+ schema = @Schema(implementation = ErrorDTO.class)))
+ })
+ @Path("stop")
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Response stopProject(@Parameter(hidden = true) @Auth UserInfo userInfo,
+ @Valid ProjectActionFormDTO startProjectDto) {
+ projectService.stop(userInfo, startProjectDto.getProjectName());
+ return Response
+ .accepted()
+ .build();
+ }
+
@Operation(summary = "Get project info", tags = "project")
@ApiResponses({
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ProjectActionFormDTO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ProjectActionFormDTO.java
new file mode 100644
index 0000000..ac3a561
--- /dev/null
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ProjectActionFormDTO.java
@@ -0,0 +1,10 @@
+package com.epam.dlab.backendapi.resources.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+@Data
+public class ProjectActionFormDTO {
+ @JsonProperty("project_name")
+ private final String projectName;
+}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
index 4c15d59..124e609 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
@@ -15,6 +15,8 @@ public interface ProjectService {
ProjectDTO get(String name);
void terminate(UserInfo userInfo, String name);
+ void start(UserInfo userInfo, String name);
+ void stop(UserInfo userInfo, String name);
void update(ProjectDTO projectDTO);
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceBase.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceBase.java
index 919a5fc..3ba548e 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceBase.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceBase.java
@@ -33,7 +33,6 @@ import com.epam.dlab.dto.InfrastructureMetaInfoDTO;
import com.epam.dlab.dto.base.edge.EdgeInfo;
import com.epam.dlab.exceptions.DlabException;
import com.google.inject.Inject;
-import com.jcabi.manifests.Manifests;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
@@ -96,13 +95,14 @@ public abstract class InfrastructureInfoServiceBase<T> implements Infrastructure
@Override
public InfrastructureMetaInfoDTO getInfrastructureMetaInfo() {
- final String branch = Manifests.read("GIT-Branch");
+ /*final String branch = Manifests.read("GIT-Branch");
return InfrastructureMetaInfoDTO.builder()
.branch(branch)
.commit(Manifests.read("GIT-Commit"))
.version(Manifests.read("DLab-Version"))
.releaseNotes(String.format(RELEASE_NOTES_FORMAT, branch))
- .build();
+ .build();*/
+ return InfrastructureMetaInfoDTO.builder().build();
}
protected abstract Map<String, String> getSharedInfo(T sharedInfo);
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
index 8970939..f401563 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
@@ -8,8 +8,8 @@ import com.epam.dlab.backendapi.domain.RequestId;
import com.epam.dlab.backendapi.service.EnvironmentService;
import com.epam.dlab.backendapi.service.ProjectService;
import com.epam.dlab.constants.ServiceConsts;
+import com.epam.dlab.dto.project.ProjectActionDTO;
import com.epam.dlab.dto.project.ProjectCreateDTO;
-import com.epam.dlab.dto.project.ProjectTerminateDTO;
import com.epam.dlab.exceptions.ResourceConflictException;
import com.epam.dlab.exceptions.ResourceNotFoundException;
import com.epam.dlab.rest.client.RESTService;
@@ -29,6 +29,8 @@ public class ProjectServiceImpl implements ProjectService {
private static final String CREATE_PRJ_API = "infrastructure/project/create";
private static final String TERMINATE_PRJ_API = "infrastructure/project/terminate";
+ private static final String START_PRJ_API = "infrastructure/project/start";
+ private static final String STOP_PRJ_API = "infrastructure/project/stop";
private final ProjectDAO projectDAO;
private final EnvironmentService environmentService;
private final UserGroupDao userGroupDao;
@@ -75,12 +77,24 @@ public class ProjectServiceImpl implements ProjectService {
@Override
public void terminate(UserInfo userInfo, String name) {
- terminateProjectOnCloud(userInfo, name);
+ projectActionOnCloud(userInfo, name, TERMINATE_PRJ_API);
environmentService.terminateProjectEnvironment(name);
projectDAO.updateStatus(name, ProjectDTO.Status.TERMINATING);
}
@Override
+ public void start(UserInfo userInfo, String name) {
+ projectActionOnCloud(userInfo, name, START_PRJ_API);
+ projectDAO.updateStatus(name, ProjectDTO.Status.STARTING);
+ }
+
+ @Override
+ public void stop(UserInfo userInfo, String name) {
+ projectActionOnCloud(userInfo, name, STOP_PRJ_API);
+ projectDAO.updateStatus(name, ProjectDTO.Status.STOPPING);
+ }
+
+ @Override
public void update(ProjectDTO projectDTO) {
if (!projectDAO.update(projectDTO)) {
throw projectNotFound().get();
@@ -116,10 +130,10 @@ public class ProjectServiceImpl implements ProjectService {
}
- private void terminateProjectOnCloud(UserInfo user, String projectName) {
+ private void projectActionOnCloud(UserInfo user, String projectName, String provisioningApiUri) {
try {
- String uuid = provisioningService.post(TERMINATE_PRJ_API, user.getAccessToken(),
- new ProjectTerminateDTO(projectName), String.class);
+ String uuid = provisioningService.post(provisioningApiUri, user.getAccessToken(),
+ new ProjectActionDTO(projectName), String.class);
requestId.put(user.getName(), uuid);
} catch (Exception e) {
log.error("Can not terminate project due to: {}", e.getMessage());
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org