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/04 13:35:36 UTC
[incubator-dlab] 01/02: DLAB-841 modified API to return edge info
per 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
commit ba717679e6dc810fd137c2dc93e21a9328c44fb2
Author: bhliva <bo...@epam.com>
AuthorDate: Thu Jul 4 15:48:09 2019 +0300
DLAB-841 modified API to return edge info per project
---
.../src/general/scripts/aws/edge_configure.py | 1 +
.../java/com/epam/dlab/dto/base/edge/EdgeInfo.java | 32 +++--
.../dlab/dto/base/project/ProjectEdgeInfo.java | 28 ----
.../epam/dlab/dto/base/project/ProjectResult.java | 3 +-
services/provisioning-service/provisioning.yml | 4 +-
.../response/handlers/ProjectCallbackHandler.java | 9 +-
.../service/impl/ProjectServiceImpl.java | 4 +-
.../mock_response/gcp/project_create.json | 3 +-
.../com/epam/dlab/backendapi/dao/ProjectDAO.java | 4 +-
.../epam/dlab/backendapi/dao/ProjectDAOImpl.java | 4 +-
.../epam/dlab/backendapi/domain/ProjectDTO.java | 22 ++-
.../resources/InfrastructureInfoResource.java | 5 +-
.../resources/callback/ProjectCallback.java | 2 +-
...ureInfo.java => ProjectInfrastructureInfo.java} | 4 +-
.../epam/dlab/backendapi/service/EdgeService.java | 2 +
.../service/InfrastructureInfoService.java | 6 +-
.../backendapi/service/impl/EdgeServiceImpl.java | 8 ++
.../impl/InfrastructureInfoServiceBase.java | 19 ++-
.../service/impl/ProjectServiceImpl.java | 6 +-
.../resources/InfrastructureInfoResourceTest.java | 45 +-----
.../impl/InfrastructureInfoServiceBaseTest.java | 155 ---------------------
21 files changed, 95 insertions(+), 271 deletions(-)
diff --git a/infrastructure-provisioning/src/general/scripts/aws/edge_configure.py b/infrastructure-provisioning/src/general/scripts/aws/edge_configure.py
index c215fd2..294a27e 100644
--- a/infrastructure-provisioning/src/general/scripts/aws/edge_configure.py
+++ b/infrastructure-provisioning/src/general/scripts/aws/edge_configure.py
@@ -246,6 +246,7 @@ if __name__ == "__main__":
"notebook_subnet": edge_conf['private_subnet_cidr'],
"full_edge_conf": edge_conf,
"project_name": os.environ['project_name'],
+ "@class": "com.epam.dlab.dto.gcp.edge.EdgeInfoGcp"
"Action": "Create new EDGE server"}
print(json.dumps(res))
result.write(json.dumps(res))
diff --git a/services/dlab-model/src/main/java/com/epam/dlab/dto/base/edge/EdgeInfo.java b/services/dlab-model/src/main/java/com/epam/dlab/dto/base/edge/EdgeInfo.java
index 19ae1cc..ddcf8c4 100644
--- a/services/dlab-model/src/main/java/com/epam/dlab/dto/base/edge/EdgeInfo.java
+++ b/services/dlab-model/src/main/java/com/epam/dlab/dto/base/edge/EdgeInfo.java
@@ -22,47 +22,49 @@ package com.epam.dlab.dto.base.edge;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
import lombok.Data;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS)
public class EdgeInfo {
- @JsonProperty("_id")
- @JsonInclude(JsonInclude.Include.NON_EMPTY)
- private String id;
+ @JsonProperty("_id")
+ @JsonInclude(JsonInclude.Include.NON_EMPTY)
+ private String id;
- @JsonProperty("instance_id")
- private String instanceId;
+ @JsonProperty("instance_id")
+ private String instanceId;
@JsonProperty
- private String hostname;
+ private String hostname;
@JsonProperty("public_ip")
- private String publicIp;
+ private String publicIp;
@JsonProperty
- private String ip;
+ private String ip;
@JsonProperty("key_name")
- private String keyName;
+ private String keyName;
@JsonProperty("tunnel_port")
- private String tunnelPort;
+ private String tunnelPort;
@JsonProperty("socks_port")
- private String socksPort;
+ private String socksPort;
@JsonProperty("notebook_sg")
- private String notebookSg;
+ private String notebookSg;
@JsonProperty("edge_sg")
- private String edgeSg;
+ private String edgeSg;
@JsonProperty("notebook_subnet")
- private String notebookSubnet;
+ private String notebookSubnet;
@JsonProperty("edge_status")
- private String edgeStatus;
+ private String edgeStatus;
@JsonProperty("reupload_key_required")
private boolean reuploadKeyRequired = false;
diff --git a/services/dlab-model/src/main/java/com/epam/dlab/dto/base/project/ProjectEdgeInfo.java b/services/dlab-model/src/main/java/com/epam/dlab/dto/base/project/ProjectEdgeInfo.java
deleted file mode 100644
index 0bf1c20..0000000
--- a/services/dlab-model/src/main/java/com/epam/dlab/dto/base/project/ProjectEdgeInfo.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.epam.dlab.dto.base.project;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-
-@Data
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class ProjectEdgeInfo {
- @JsonInclude(JsonInclude.Include.NON_EMPTY)
- private String id;
-
- @JsonProperty("instance_id")
- private String instanceId;
-
- @JsonProperty
- private String hostname;
-
- @JsonProperty("public_ip")
- private String publicIp;
-
- @JsonProperty
- private String ip;
-
- @JsonProperty("key_name")
- private String keyName;
-}
diff --git a/services/dlab-model/src/main/java/com/epam/dlab/dto/base/project/ProjectResult.java b/services/dlab-model/src/main/java/com/epam/dlab/dto/base/project/ProjectResult.java
index c1e6827..8d9bf8f 100644
--- a/services/dlab-model/src/main/java/com/epam/dlab/dto/base/project/ProjectResult.java
+++ b/services/dlab-model/src/main/java/com/epam/dlab/dto/base/project/ProjectResult.java
@@ -1,6 +1,7 @@
package com.epam.dlab.dto.base.project;
import com.epam.dlab.dto.StatusBaseDTO;
+import com.epam.dlab.dto.base.edge.EdgeInfo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@@ -8,7 +9,7 @@ import lombok.Data;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class ProjectResult extends StatusBaseDTO<ProjectResult> {
- private ProjectEdgeInfo edgeInfo;
+ private EdgeInfo edgeInfo;
@JsonProperty("project_name")
private String projectName;
diff --git a/services/provisioning-service/provisioning.yml b/services/provisioning-service/provisioning.yml
index 7e56267..6fef93d 100644
--- a/services/provisioning-service/provisioning.yml
+++ b/services/provisioning-service/provisioning.yml
@@ -56,7 +56,7 @@ server:
- type: https
port: 8084
certAlias: dlab
- validateCerts: true
+ validateCerts: false
keyStorePath: ${KEY_STORE_PATH}
keyStorePassword: ${KEY_STORE_PASSWORD}
trustStorePath: ${TRUST_STORE_PATH}
@@ -66,7 +66,7 @@ server:
- type: https
port: 8085
certAlias: dlab
- validateCerts: true
+ validateCerts: false
keyStorePath: ${KEY_STORE_PATH}
keyStorePassword: ${KEY_STORE_PASSWORD}
trustStorePath: ${TRUST_STORE_PATH}
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ProjectCallbackHandler.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ProjectCallbackHandler.java
index 71a21e1..d6b1f71 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ProjectCallbackHandler.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ProjectCallbackHandler.java
@@ -3,7 +3,7 @@ package com.epam.dlab.backendapi.core.response.handlers;
import com.epam.dlab.auth.SystemUserInfoService;
import com.epam.dlab.backendapi.core.commands.DockerAction;
import com.epam.dlab.dto.UserInstanceStatus;
-import com.epam.dlab.dto.base.project.ProjectEdgeInfo;
+import com.epam.dlab.dto.base.edge.EdgeInfo;
import com.epam.dlab.dto.base.project.ProjectResult;
import com.epam.dlab.exceptions.DlabException;
import com.epam.dlab.rest.client.RESTService;
@@ -16,12 +16,15 @@ public class ProjectCallbackHandler extends ResourceCallbackHandler<ProjectResul
private final String callbackUri;
private final String projectName;
+ private final Class<? extends EdgeInfo> clazz;
public ProjectCallbackHandler(SystemUserInfoService systemUserInfoService, RESTService selfService, String user,
- String uuid, DockerAction action, String callbackUri, String projectName) {
+ String uuid, DockerAction action, String callbackUri, String projectName,
+ Class<? extends EdgeInfo> clazz) {
super(systemUserInfoService, selfService, user, uuid, action);
this.callbackUri = callbackUri;
this.projectName = projectName;
+ this.clazz = clazz;
}
@Override
@@ -35,7 +38,7 @@ public class ProjectCallbackHandler extends ResourceCallbackHandler<ProjectResul
if (resultNode != null && getAction() == DockerAction.CREATE
&& UserInstanceStatus.of(baseStatus.getStatus()) != UserInstanceStatus.FAILED) {
try {
- final ProjectEdgeInfo projectEdgeInfo = mapper.readValue(resultNode.toString(), ProjectEdgeInfo.class);
+ final EdgeInfo projectEdgeInfo = mapper.readValue(resultNode.toString(), clazz);
baseStatus.setEdgeInfo(projectEdgeInfo);
} catch (IOException e) {
throw new DlabException("Cannot parse the EDGE info in JSON: " + e.getLocalizedMessage(), e);
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 c0a1335..7e53c97 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,6 +8,7 @@ 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.gcp.edge.EdgeInfoGcp;
import com.epam.dlab.dto.project.ProjectActionDTO;
import com.epam.dlab.dto.project.ProjectCreateDTO;
import com.epam.dlab.rest.client.RESTService;
@@ -19,6 +20,7 @@ import lombok.extern.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";
+ private static final String CALLBACK_URI = "/api/project/status";
@Inject
protected RESTService selfService;
@Inject
@@ -59,7 +61,7 @@ public class ProjectServiceImpl implements ProjectService {
folderListenerExecutor.start(configuration.getKeyLoaderDirectory(),
configuration.getKeyLoaderPollTimeout(),
new ProjectCallbackHandler(systemUserInfoService, selfService, userInfo.getName(), uuid,
- action, "/api/project/status", projectName));
+ action, CALLBACK_URI, projectName, EdgeInfoGcp.class));
RunDockerCommand runDockerCommand = new RunDockerCommand()
.withInteractive()
diff --git a/services/provisioning-service/src/main/resources/mock_response/gcp/project_create.json b/services/provisioning-service/src/main/resources/mock_response/gcp/project_create.json
index 9f59b6d..31ca8e5 100644
--- a/services/provisioning-service/src/main/resources/mock_response/gcp/project_create.json
+++ b/services/provisioning-service/src/main/resources/mock_response/gcp/project_create.json
@@ -48,7 +48,8 @@
"user_own_bucket_name": "${CONF_SERVICE_BASE_NAME}-${EDGE_USER_NAME}-bucket",
"socks_port": "1080",
"notebook_subnet": "10.10.16.0/24",
- "project_name" : "${PROJECT_NAME}"
+ "project_name": "${PROJECT_NAME}",
+ "@class": "com.epam.dlab.dto.gcp.edge.EdgeInfoGcp"
},
"log": "/var/log/dlab/edge/edge_${EDGE_USER_NAME}_${REQUEST_ID}.log"
},
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAO.java
index 0532f17..e8f428b 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAO.java
@@ -2,7 +2,7 @@ package com.epam.dlab.backendapi.dao;
import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.domain.ProjectDTO;
-import com.epam.dlab.dto.base.project.ProjectEdgeInfo;
+import com.epam.dlab.dto.base.edge.EdgeInfo;
import java.util.List;
import java.util.Optional;
@@ -17,7 +17,7 @@ public interface ProjectDAO {
void updateStatus(String projectName, ProjectDTO.Status status);
- void updateEdgeInfoAndStatus(String projectName, ProjectEdgeInfo edgeInfo, ProjectDTO.Status status);
+ void updateEdgeInfoAndStatus(String projectName, EdgeInfo edgeInfo, ProjectDTO.Status status);
Optional<ProjectDTO> get(String name);
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java
index 484438d..f54cbc6 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java
@@ -2,7 +2,7 @@ package com.epam.dlab.backendapi.dao;
import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.domain.ProjectDTO;
-import com.epam.dlab.dto.base.project.ProjectEdgeInfo;
+import com.epam.dlab.dto.base.edge.EdgeInfo;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
import com.google.inject.Inject;
@@ -55,7 +55,7 @@ public class ProjectDAOImpl extends BaseDAO implements ProjectDAO {
}
@Override
- public void updateEdgeInfoAndStatus(String projectName, ProjectEdgeInfo edgeInfo, ProjectDTO.Status status) {
+ public void updateEdgeInfoAndStatus(String projectName, EdgeInfo edgeInfo, ProjectDTO.Status status) {
BasicDBObject dbObject = new BasicDBObject();
dbObject.put(STATUS_FIELD, status.toString());
dbObject.put(EDGE_INFO_FIELD, convertToBson(edgeInfo));
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 2354857..631cc99 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
@@ -1,6 +1,7 @@
package com.epam.dlab.backendapi.domain;
import com.epam.dlab.dto.UserInstanceStatus;
+import com.epam.dlab.dto.base.edge.EdgeInfo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
@@ -24,21 +25,32 @@ public class ProjectDTO {
private final String tag;
private final Integer budget;
private final Status status = Status.CREATING;
+ private EdgeInfo edgeInfo;
public enum Status {
CREATING,
ACTIVE,
FAILED,
- TERMINATED,
- TERMINATING,
- STOPPING,
- STARTING,
- STOPPED;
+ DELETED,
+ DELETING,
+ DEACTIVATING,
+ ACTIVATING,
+ NOT_ACTIVE;
public static Status from(UserInstanceStatus userInstanceStatus) {
if (userInstanceStatus == UserInstanceStatus.RUNNING) {
return ACTIVE;
+ } else if (userInstanceStatus == UserInstanceStatus.TERMINATED) {
+ return DELETED;
+ } else if (userInstanceStatus == UserInstanceStatus.TERMINATING) {
+ return DELETING;
+ } else if (userInstanceStatus == UserInstanceStatus.STOPPING) {
+ return DEACTIVATING;
+ } else if (userInstanceStatus == UserInstanceStatus.STOPPED) {
+ return NOT_ACTIVE;
+ } else if (userInstanceStatus == UserInstanceStatus.STARTING) {
+ return ACTIVATING;
}
return Status.valueOf(userInstanceStatus.name());
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/InfrastructureInfoResource.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/InfrastructureInfoResource.java
index daec244..6a7efc0 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/InfrastructureInfoResource.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/InfrastructureInfoResource.java
@@ -21,7 +21,7 @@ package com.epam.dlab.backendapi.resources;
import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.resources.dto.HealthStatusPageDTO;
-import com.epam.dlab.backendapi.resources.dto.InfrastructureInfo;
+import com.epam.dlab.backendapi.resources.dto.ProjectInfrastructureInfo;
import com.epam.dlab.backendapi.resources.swagger.SwaggerSecurityInfo;
import com.epam.dlab.backendapi.roles.UserRoles;
import com.epam.dlab.backendapi.service.InfrastructureInfoService;
@@ -33,6 +33,7 @@ import lombok.extern.slf4j.Slf4j;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import java.util.List;
/**
* Provides the REST API for the basic information about infrastructure.
@@ -84,7 +85,7 @@ public class InfrastructureInfoResource {
@GET
@Path("/info")
@ApiOperation("Returns list of user's resources")
- public InfrastructureInfo getUserResources(@ApiParam(hidden = true) @Auth UserInfo userInfo) {
+ public List<ProjectInfrastructureInfo> getUserResources(@ApiParam(hidden = true) @Auth UserInfo userInfo) {
return infrastructureInfoService.getUserResources(userInfo.getName());
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ProjectCallback.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ProjectCallback.java
index a1b0039..60ef82b 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ProjectCallback.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ProjectCallback.java
@@ -36,7 +36,7 @@ public class ProjectCallback {
requestId.checkAndRemove(projectResult.getRequestId());
final String projectName = projectResult.getProjectName();
final UserInstanceStatus status = UserInstanceStatus.of(projectResult.getStatus());
- if (UserInstanceStatus.CREATED == status) {
+ if (UserInstanceStatus.RUNNING == status) {
projectDAO.updateEdgeInfoAndStatus(projectName, projectResult.getEdgeInfo(), ProjectDTO.Status.ACTIVE);
} else {
projectDAO.updateStatus(projectName, ProjectDTO.Status.from(status));
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/InfrastructureInfo.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ProjectInfrastructureInfo.java
similarity index 93%
rename from services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/InfrastructureInfo.java
rename to services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ProjectInfrastructureInfo.java
index 3143473..9fa3a02 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/InfrastructureInfo.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ProjectInfrastructureInfo.java
@@ -28,7 +28,9 @@ import java.util.Map;
@AllArgsConstructor
@ToString
-public class InfrastructureInfo {
+public class ProjectInfrastructureInfo {
+ @JsonProperty
+ private String project;
@JsonProperty
private Map<String, String> shared;
@JsonProperty
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/EdgeService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/EdgeService.java
index 5fcd194..55661c7 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/EdgeService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/EdgeService.java
@@ -30,4 +30,6 @@ public interface EdgeService {
String terminate(UserInfo userInfo);
void updateReuploadKeyFlag(String user, boolean reuploadKeyRequired, UserInstanceStatus... edgeStatuses);
+
+ String getEdgeInfo(UserInfo userInfo, String projectName);
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/InfrastructureInfoService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/InfrastructureInfoService.java
index 64e45be..aa23d1d 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/InfrastructureInfoService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/InfrastructureInfoService.java
@@ -21,11 +21,13 @@ package com.epam.dlab.backendapi.service;
import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.resources.dto.HealthStatusPageDTO;
-import com.epam.dlab.backendapi.resources.dto.InfrastructureInfo;
+import com.epam.dlab.backendapi.resources.dto.ProjectInfrastructureInfo;
import com.epam.dlab.dto.InfrastructureMetaInfoDTO;
+import java.util.List;
+
public interface InfrastructureInfoService {
- InfrastructureInfo getUserResources(String user);
+ List<ProjectInfrastructureInfo> getUserResources(String user);
HealthStatusPageDTO getHeathStatus(UserInfo user, boolean fullReport, boolean isAdmin);
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EdgeServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EdgeServiceImpl.java
index d0de247..e62b52f 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EdgeServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EdgeServiceImpl.java
@@ -22,6 +22,7 @@ package com.epam.dlab.backendapi.service.impl;
import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.annotation.BudgetLimited;
import com.epam.dlab.backendapi.dao.KeyDAO;
+import com.epam.dlab.backendapi.dao.ProjectDAO;
import com.epam.dlab.backendapi.domain.RequestId;
import com.epam.dlab.backendapi.service.EdgeService;
import com.epam.dlab.backendapi.util.RequestBuilder;
@@ -44,6 +45,8 @@ public class EdgeServiceImpl implements EdgeService {
@Inject
private KeyDAO keyDAO;
+ @Inject
+ private ProjectDAO projectDAO;
@Inject
@Named(ServiceConsts.PROVISIONING_SERVICE_NAME)
@@ -122,6 +125,11 @@ public class EdgeServiceImpl implements EdgeService {
keyDAO.updateEdgeReuploadKey(user, reuploadKeyRequired, edgeStatuses);
}
+ @Override
+ public String getEdgeInfo(UserInfo userInfo, String projectName) {
+ return null;
+ }
+
/**
* Sends the post request to the provisioning service and update the status of EDGE node.
*
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 3ba548e..eaeab69 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
@@ -26,7 +26,7 @@ import com.epam.dlab.backendapi.dao.EnvDAO;
import com.epam.dlab.backendapi.dao.ExploratoryDAO;
import com.epam.dlab.backendapi.dao.KeyDAO;
import com.epam.dlab.backendapi.resources.dto.HealthStatusPageDTO;
-import com.epam.dlab.backendapi.resources.dto.InfrastructureInfo;
+import com.epam.dlab.backendapi.resources.dto.ProjectInfrastructureInfo;
import com.epam.dlab.backendapi.service.InfrastructureInfoService;
import com.epam.dlab.backendapi.service.ProjectService;
import com.epam.dlab.dto.InfrastructureMetaInfoDTO;
@@ -36,7 +36,10 @@ import com.google.inject.Inject;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
+import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
@Slf4j
public abstract class InfrastructureInfoServiceBase<T> implements InfrastructureInfoService {
@@ -63,12 +66,20 @@ public abstract class InfrastructureInfoServiceBase<T> implements Infrastructure
}
@Override
- public InfrastructureInfo getUserResources(String user) {
+ public List<ProjectInfrastructureInfo> getUserResources(String user) {
log.debug("Loading list of provisioned resources for user {}", user);
try {
Iterable<Document> documents = expDAO.findExploratory(user);
- EdgeInfo edgeInfo = keyDAO.getEdgeInfo(user);
- return new InfrastructureInfo(getSharedInfo(edgeInfo), documents);
+
+ return StreamSupport.stream(documents.spliterator(),
+ false)
+ .collect(Collectors.groupingBy(d -> d.getString("project")))
+ .entrySet()
+ .stream()
+ .map(e -> new ProjectInfrastructureInfo(e.getKey(),
+ getSharedInfo(projectService.get(e.getKey()).getEdgeInfo()),
+ e.getValue()))
+ .collect(Collectors.toList());
} catch (Exception e) {
log.error("Could not load list of provisioned resources for user: {}", user, e);
throw new DlabException("Could not load list of provisioned resources for user: ");
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 f401563..9de3dea 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
@@ -79,19 +79,19 @@ public class ProjectServiceImpl implements ProjectService {
public void terminate(UserInfo userInfo, String name) {
projectActionOnCloud(userInfo, name, TERMINATE_PRJ_API);
environmentService.terminateProjectEnvironment(name);
- projectDAO.updateStatus(name, ProjectDTO.Status.TERMINATING);
+ projectDAO.updateStatus(name, ProjectDTO.Status.DELETING);
}
@Override
public void start(UserInfo userInfo, String name) {
projectActionOnCloud(userInfo, name, START_PRJ_API);
- projectDAO.updateStatus(name, ProjectDTO.Status.STARTING);
+ projectDAO.updateStatus(name, ProjectDTO.Status.ACTIVATING);
}
@Override
public void stop(UserInfo userInfo, String name) {
projectActionOnCloud(userInfo, name, STOP_PRJ_API);
- projectDAO.updateStatus(name, ProjectDTO.Status.STOPPING);
+ projectDAO.updateStatus(name, ProjectDTO.Status.DEACTIVATING);
}
@Override
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/InfrastructureInfoResourceTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/InfrastructureInfoResourceTest.java
index e2ab690..b92335e 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/InfrastructureInfoResourceTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/InfrastructureInfoResourceTest.java
@@ -21,7 +21,6 @@ package com.epam.dlab.backendapi.resources;
import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.resources.dto.HealthStatusPageDTO;
-import com.epam.dlab.backendapi.resources.dto.InfrastructureInfo;
import com.epam.dlab.backendapi.service.InfrastructureInfoService;
import com.epam.dlab.dto.InfrastructureMetaInfoDTO;
import com.epam.dlab.exceptions.DlabException;
@@ -35,7 +34,6 @@ import org.junit.Test;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-import java.util.Collections;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
@@ -157,42 +155,6 @@ public class InfrastructureInfoResourceTest extends TestBase {
verifyNoMoreInteractions(infrastructureInfoService);
}
- @Test
- public void getUserResources() {
- InfrastructureInfo info = getInfrastructureInfo();
- when(infrastructureInfoService.getUserResources(anyString())).thenReturn(info);
- final Response response = resources.getJerseyTest()
- .target("/infrastructure/info")
- .request()
- .header("Authorization", "Bearer " + TOKEN)
- .get();
-
- assertEquals(HttpStatus.SC_OK, response.getStatus());
- assertEquals(info.toString(), response.readEntity(InfrastructureInfo.class).toString());
- assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
-
- verify(infrastructureInfoService).getUserResources(USER.toLowerCase());
- verifyNoMoreInteractions(infrastructureInfoService);
- }
-
- @Test
- public void getUserResourcesWithFailedAuth() throws AuthenticationException {
- authFailSetup();
- InfrastructureInfo info = getInfrastructureInfo();
- when(infrastructureInfoService.getUserResources(anyString())).thenReturn(info);
- final Response response = resources.getJerseyTest()
- .target("/infrastructure/info")
- .request()
- .header("Authorization", "Bearer " + TOKEN)
- .get();
-
- assertEquals(HttpStatus.SC_OK, response.getStatus());
- assertEquals(info.toString(), response.readEntity(InfrastructureInfo.class).toString());
- assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
-
- verify(infrastructureInfoService).getUserResources(USER.toLowerCase());
- verifyNoMoreInteractions(infrastructureInfoService);
- }
@Test
public void getUserResourcesWithException() {
@@ -223,7 +185,8 @@ public class InfrastructureInfoResourceTest extends TestBase {
.header("Authorization", "Bearer " + TOKEN)
.get();
- final InfrastructureMetaInfoDTO infrastructureMetaInfoDTO = response.readEntity(InfrastructureMetaInfoDTO.class);
+ final InfrastructureMetaInfoDTO infrastructureMetaInfoDTO =
+ response.readEntity(InfrastructureMetaInfoDTO.class);
assertEquals("1.0", infrastructureMetaInfoDTO.getVersion());
}
@@ -232,8 +195,4 @@ public class InfrastructureInfoResourceTest extends TestBase {
hspdto.setStatus("someStatus");
return hspdto;
}
-
- private InfrastructureInfo getInfrastructureInfo() {
- return new InfrastructureInfo(Collections.emptyMap(), Collections.emptyList());
- }
}
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceBaseTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceBaseTest.java
deleted file mode 100644
index 2c7d127..0000000
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceBaseTest.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package com.epam.dlab.backendapi.service.impl;
-
-import com.epam.dlab.auth.UserInfo;
-import com.epam.dlab.backendapi.SelfServiceApplicationConfiguration;
-import com.epam.dlab.backendapi.dao.BillingDAO;
-import com.epam.dlab.backendapi.dao.EnvDAO;
-import com.epam.dlab.backendapi.dao.ExploratoryDAO;
-import com.epam.dlab.backendapi.dao.KeyDAO;
-import com.epam.dlab.backendapi.resources.dto.HealthStatusEnum;
-import com.epam.dlab.backendapi.resources.dto.HealthStatusPageDTO;
-import com.epam.dlab.backendapi.resources.dto.InfrastructureInfo;
-import com.epam.dlab.backendapi.service.ProjectService;
-import com.epam.dlab.dto.base.edge.EdgeInfo;
-import com.epam.dlab.exceptions.DlabException;
-import org.bson.Document;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import java.lang.reflect.Field;
-import java.util.Collections;
-
-import static org.junit.Assert.*;
-import static org.mockito.Mockito.*;
-
-@RunWith(MockitoJUnitRunner.class)
-public class InfrastructureInfoServiceBaseTest {
-
- private final String USER = "test";
-
- @Mock
- private EnvDAO envDAO;
- @Mock
- private ExploratoryDAO expDAO;
- @Mock
- private KeyDAO keyDAO;
- @Mock
- private SelfServiceApplicationConfiguration configuration;
- @Mock
- private BillingDAO billingDAO;
- @Mock
- private ProjectService projectService;
-
- @InjectMocks
- private InfrastructureInfoServiceBase infrastructureInfoServiceBase = spy(InfrastructureInfoServiceBase.class);
-
- @Test
- public void getUserResources() throws NoSuchFieldException, IllegalAccessException {
- Iterable<Document> documents = Collections.singletonList(new Document());
- when(expDAO.findExploratory(anyString())).thenReturn(documents);
-
- EdgeInfo edgeInfo = new EdgeInfo();
- edgeInfo.setInstanceId("someId");
- edgeInfo.setEdgeStatus("someStatus");
- when(keyDAO.getEdgeInfo(anyString())).thenReturn(edgeInfo);
-
- InfrastructureInfo expectedInfrastructureInfo = new InfrastructureInfo(Collections.emptyMap(), documents);
- InfrastructureInfo actualInfrastructureInfo = infrastructureInfoServiceBase.getUserResources(USER);
- assertNotNull(actualInfrastructureInfo);
- assertTrue(areInfrastructureInfoObjectsEqual(actualInfrastructureInfo, expectedInfrastructureInfo));
-
- verify(expDAO).findExploratory(USER);
- verify(keyDAO).getEdgeInfo(USER);
- verifyNoMoreInteractions(expDAO, keyDAO);
- }
-
- @Test
- public void getUserResourcesWhenMethodGetEdgeInfoThrowsException() {
- Iterable<Document> documents = Collections.singletonList(new Document());
- when(expDAO.findExploratory(anyString())).thenReturn(documents);
-
- EdgeInfo edgeInfo = new EdgeInfo();
- edgeInfo.setInstanceId("someId");
- edgeInfo.setEdgeStatus("someStatus");
- doThrow(new DlabException("Edge info not found")).when(keyDAO).getEdgeInfo(anyString());
-
- try {
- infrastructureInfoServiceBase.getUserResources(USER);
- } catch (DlabException e) {
- assertEquals("Could not load list of provisioned resources for user: ", e.getMessage());
- }
- verify(expDAO).findExploratory(USER);
- verify(keyDAO).getEdgeInfo(USER);
- verifyNoMoreInteractions(expDAO, keyDAO);
- }
-
- @Test
- public void getHeathStatus() {
- when(envDAO.getHealthStatusPageDTO(anyString(), anyBoolean())).thenReturn(new HealthStatusPageDTO()
- .withStatus(HealthStatusEnum.OK));
- when(configuration.isBillingSchedulerEnabled()).thenReturn(false);
- when(billingDAO.getBillingQuoteUsed()).thenReturn(10);
-
- HealthStatusPageDTO actualHealthStatusPageDTO =
- infrastructureInfoServiceBase.getHeathStatus(new UserInfo(USER, "token"), false, true);
- assertNotNull(actualHealthStatusPageDTO);
- assertEquals(HealthStatusEnum.OK.toString(), actualHealthStatusPageDTO.getStatus());
- assertFalse(actualHealthStatusPageDTO.isBillingEnabled());
- assertTrue(actualHealthStatusPageDTO.isAdmin());
- assertFalse(actualHealthStatusPageDTO.isProjectAssigned());
- assertEquals(10, actualHealthStatusPageDTO.getBillingQuoteUsed());
-
- verify(envDAO).getHealthStatusPageDTO(USER, false);
- verify(configuration).isBillingSchedulerEnabled();
- verifyNoMoreInteractions(envDAO, configuration);
- }
-
- @Test
- public void getHeathStatusWhenMethodGetHealthStatusPageDTOThrowsException() {
- doThrow(new DlabException("Cannot fetch health status!"))
- .when(envDAO).getHealthStatusPageDTO(anyString(), anyBoolean());
- try {
- infrastructureInfoServiceBase.getHeathStatus(new UserInfo(USER, null), false, false);
- } catch (DlabException e) {
- assertEquals("Cannot fetch health status!", e.getMessage());
- }
- verify(envDAO).getHealthStatusPageDTO(USER, false);
- verifyNoMoreInteractions(envDAO);
- }
-
- private boolean areInfrastructureInfoObjectsEqual(InfrastructureInfo object1, InfrastructureInfo object2) throws
- NoSuchFieldException, IllegalAccessException {
- Field shared1 = object1.getClass().getDeclaredField("shared");
- shared1.setAccessible(true);
- Field shared2 = object2.getClass().getDeclaredField("shared");
- shared2.setAccessible(true);
- Field exploratory1 = object1.getClass().getDeclaredField("exploratory");
- exploratory1.setAccessible(true);
- Field exploratory2 = object2.getClass().getDeclaredField("exploratory");
- exploratory2.setAccessible(true);
- return shared1.get(object1).equals(shared2.get(object2))
- && exploratory1.get(object1).equals(exploratory2.get(object2));
- }
-}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org