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/08 13:28:08 UTC
[incubator-dlab] 01/02: Revert "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 project_tmp
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
commit 909be8612f67866a46b0d20b696425d8b9ce33d2
Author: bhliva <bo...@epam.com>
AuthorDate: Mon Jul 8 16:17:59 2019 +0300
Revert "DLAB-841 modified API to return edge info per project"
This reverts commit ba717679
---
.../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 | 3 +-
.../epam/dlab/backendapi/domain/ProjectDTO.java | 22 +--
.../resources/InfrastructureInfoResource.java | 5 +-
.../resources/callback/ProjectCallback.java | 2 +-
...astructureInfo.java => InfrastructureInfo.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, 271 insertions(+), 94 deletions(-)
diff --git a/infrastructure-provisioning/src/general/scripts/aws/edge_configure.py b/infrastructure-provisioning/src/general/scripts/aws/edge_configure.py
index 294a27e..c215fd2 100644
--- a/infrastructure-provisioning/src/general/scripts/aws/edge_configure.py
+++ b/infrastructure-provisioning/src/general/scripts/aws/edge_configure.py
@@ -246,7 +246,6 @@ 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 ddcf8c4..19ae1cc 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,49 +22,47 @@ 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
new file mode 100644
index 0000000..0bf1c20
--- /dev/null
+++ b/services/dlab-model/src/main/java/com/epam/dlab/dto/base/project/ProjectEdgeInfo.java
@@ -0,0 +1,28 @@
+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 8d9bf8f..c1e6827 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,7 +1,6 @@
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;
@@ -9,7 +8,7 @@ import lombok.Data;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class ProjectResult extends StatusBaseDTO<ProjectResult> {
- private EdgeInfo edgeInfo;
+ private ProjectEdgeInfo edgeInfo;
@JsonProperty("project_name")
private String projectName;
diff --git a/services/provisioning-service/provisioning.yml b/services/provisioning-service/provisioning.yml
index 6fef93d..7e56267 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: false
+ validateCerts: true
keyStorePath: ${KEY_STORE_PATH}
keyStorePassword: ${KEY_STORE_PASSWORD}
trustStorePath: ${TRUST_STORE_PATH}
@@ -66,7 +66,7 @@ server:
- type: https
port: 8085
certAlias: dlab
- validateCerts: false
+ validateCerts: true
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 d6b1f71..71a21e1 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.edge.EdgeInfo;
+import com.epam.dlab.dto.base.project.ProjectEdgeInfo;
import com.epam.dlab.dto.base.project.ProjectResult;
import com.epam.dlab.exceptions.DlabException;
import com.epam.dlab.rest.client.RESTService;
@@ -16,15 +16,12 @@ 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,
- Class<? extends EdgeInfo> clazz) {
+ String uuid, DockerAction action, String callbackUri, String projectName) {
super(systemUserInfoService, selfService, user, uuid, action);
this.callbackUri = callbackUri;
this.projectName = projectName;
- this.clazz = clazz;
}
@Override
@@ -38,7 +35,7 @@ public class ProjectCallbackHandler extends ResourceCallbackHandler<ProjectResul
if (resultNode != null && getAction() == DockerAction.CREATE
&& UserInstanceStatus.of(baseStatus.getStatus()) != UserInstanceStatus.FAILED) {
try {
- final EdgeInfo projectEdgeInfo = mapper.readValue(resultNode.toString(), clazz);
+ final ProjectEdgeInfo projectEdgeInfo = mapper.readValue(resultNode.toString(), ProjectEdgeInfo.class);
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 7e53c97..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,7 +8,6 @@ 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;
@@ -20,7 +19,6 @@ 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
@@ -61,7 +59,7 @@ public class ProjectServiceImpl implements ProjectService {
folderListenerExecutor.start(configuration.getKeyLoaderDirectory(),
configuration.getKeyLoaderPollTimeout(),
new ProjectCallbackHandler(systemUserInfoService, selfService, userInfo.getName(), uuid,
- action, CALLBACK_URI, projectName, EdgeInfoGcp.class));
+ action, "/api/project/status", projectName));
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 31ca8e5..9f59b6d 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,8 +48,7 @@
"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}",
- "@class": "com.epam.dlab.dto.gcp.edge.EdgeInfoGcp"
+ "project_name" : "${PROJECT_NAME}"
},
"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 7624bce..25398c8 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,8 +2,8 @@ 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.backendapi.domain.UpdateProjectDTO;
-import com.epam.dlab.dto.base.edge.EdgeInfo;
import java.util.List;
import java.util.Optional;
@@ -18,7 +18,7 @@ public interface ProjectDAO {
void updateStatus(String projectName, ProjectDTO.Status status);
- void updateEdgeInfoAndStatus(String projectName, EdgeInfo edgeInfo, ProjectDTO.Status status);
+ void updateEdgeInfoAndStatus(String projectName, ProjectEdgeInfo 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 059d08e..8c4db13 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
@@ -4,6 +4,7 @@ import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.domain.ProjectDTO;
import com.epam.dlab.backendapi.domain.UpdateProjectDTO;
import com.epam.dlab.dto.base.edge.EdgeInfo;
+import com.epam.dlab.dto.base.project.ProjectEdgeInfo;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
import com.google.inject.Inject;
@@ -57,7 +58,7 @@ public class ProjectDAOImpl extends BaseDAO implements ProjectDAO {
}
@Override
- public void updateEdgeInfoAndStatus(String projectName, EdgeInfo edgeInfo, ProjectDTO.Status status) {
+ public void updateEdgeInfoAndStatus(String projectName, ProjectEdgeInfo 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 631cc99..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
@@ -1,7 +1,6 @@
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;
@@ -25,32 +24,21 @@ 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,
- DELETED,
- DELETING,
- DEACTIVATING,
- ACTIVATING,
- NOT_ACTIVE;
+ TERMINATED,
+ TERMINATING,
+ STOPPING,
+ STARTING,
+ STOPPED;
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 6a7efc0..daec244 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.ProjectInfrastructureInfo;
+import com.epam.dlab.backendapi.resources.dto.InfrastructureInfo;
import com.epam.dlab.backendapi.resources.swagger.SwaggerSecurityInfo;
import com.epam.dlab.backendapi.roles.UserRoles;
import com.epam.dlab.backendapi.service.InfrastructureInfoService;
@@ -33,7 +33,6 @@ 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.
@@ -85,7 +84,7 @@ public class InfrastructureInfoResource {
@GET
@Path("/info")
@ApiOperation("Returns list of user's resources")
- public List<ProjectInfrastructureInfo> getUserResources(@ApiParam(hidden = true) @Auth UserInfo userInfo) {
+ public InfrastructureInfo 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 60ef82b..a1b0039 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.RUNNING == status) {
+ if (UserInstanceStatus.CREATED == 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/ProjectInfrastructureInfo.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/InfrastructureInfo.java
similarity index 93%
rename from services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ProjectInfrastructureInfo.java
rename to services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/InfrastructureInfo.java
index 9fa3a02..3143473 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ProjectInfrastructureInfo.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/InfrastructureInfo.java
@@ -28,9 +28,7 @@ import java.util.Map;
@AllArgsConstructor
@ToString
-public class ProjectInfrastructureInfo {
- @JsonProperty
- private String project;
+public class InfrastructureInfo {
@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 55661c7..5fcd194 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,6 +30,4 @@ 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 aa23d1d..64e45be 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,13 +21,11 @@ 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.ProjectInfrastructureInfo;
+import com.epam.dlab.backendapi.resources.dto.InfrastructureInfo;
import com.epam.dlab.dto.InfrastructureMetaInfoDTO;
-import java.util.List;
-
public interface InfrastructureInfoService {
- List<ProjectInfrastructureInfo> getUserResources(String user);
+ InfrastructureInfo 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 e62b52f..d0de247 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,7 +22,6 @@ 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;
@@ -45,8 +44,6 @@ public class EdgeServiceImpl implements EdgeService {
@Inject
private KeyDAO keyDAO;
- @Inject
- private ProjectDAO projectDAO;
@Inject
@Named(ServiceConsts.PROVISIONING_SERVICE_NAME)
@@ -125,11 +122,6 @@ 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 eaeab69..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
@@ -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.ProjectInfrastructureInfo;
+import com.epam.dlab.backendapi.resources.dto.InfrastructureInfo;
import com.epam.dlab.backendapi.service.InfrastructureInfoService;
import com.epam.dlab.backendapi.service.ProjectService;
import com.epam.dlab.dto.InfrastructureMetaInfoDTO;
@@ -36,10 +36,7 @@ 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 {
@@ -66,20 +63,12 @@ public abstract class InfrastructureInfoServiceBase<T> implements Infrastructure
}
@Override
- public List<ProjectInfrastructureInfo> getUserResources(String user) {
+ public InfrastructureInfo getUserResources(String user) {
log.debug("Loading list of provisioned resources for user {}", user);
try {
Iterable<Document> documents = expDAO.findExploratory(user);
-
- 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());
+ EdgeInfo edgeInfo = keyDAO.getEdgeInfo(user);
+ return new InfrastructureInfo(getSharedInfo(edgeInfo), documents);
} 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 23d0e9f..02f9fc9 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
@@ -80,19 +80,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.DELETING);
+ 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.ACTIVATING);
+ 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.DEACTIVATING);
+ projectDAO.updateStatus(name, ProjectDTO.Status.STOPPING);
}
@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 b92335e..e2ab690 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,6 +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.service.InfrastructureInfoService;
import com.epam.dlab.dto.InfrastructureMetaInfoDTO;
import com.epam.dlab.exceptions.DlabException;
@@ -34,6 +35,7 @@ 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;
@@ -155,6 +157,42 @@ 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() {
@@ -185,8 +223,7 @@ 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());
}
@@ -195,4 +232,8 @@ 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
new file mode 100644
index 0000000..2c7d127
--- /dev/null
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceBaseTest.java
@@ -0,0 +1,155 @@
+/*
+ * 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