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:35 UTC

[incubator-dlab] branch feature/projects updated (63f36d4 -> d39532c)

This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a change to branch feature/projects
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git.


    from 63f36d4  DLAB-840 fixed bug connected with computational creation
     new ba71767  DLAB-841 modified API to return edge info per project
     new d39532c  DLAB-843 fixed bug connected with API for getting user env

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../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 +-
 .../backendapi/resources/dto/UserResourceInfo.java |   7 +
 .../epam/dlab/backendapi/service/EdgeService.java  |   2 +
 .../service/InfrastructureInfoService.java         |   6 +-
 .../backendapi/service/impl/EdgeServiceImpl.java   |   8 ++
 .../service/impl/EnvironmentServiceImpl.java       |  25 ++--
 .../impl/InfrastructureInfoServiceBase.java        |  19 ++-
 .../service/impl/ProjectServiceImpl.java           |   6 +-
 .../resources/InfrastructureInfoResourceTest.java  |  45 +-----
 .../service/impl/EnvironmentServiceImplTest.java   |  19 +--
 .../impl/InfrastructureInfoServiceBaseTest.java    | 155 ---------------------
 24 files changed, 125 insertions(+), 292 deletions(-)
 delete mode 100644 services/dlab-model/src/main/java/com/epam/dlab/dto/base/project/ProjectEdgeInfo.java
 rename services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/{InfrastructureInfo.java => ProjectInfrastructureInfo.java} (93%)
 delete mode 100644 services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceBaseTest.java


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org


[incubator-dlab] 01/02: DLAB-841 modified API to return edge info per project

Posted by bh...@apache.org.
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


[incubator-dlab] 02/02: DLAB-843 fixed bug connected with API for getting user env

Posted by bh...@apache.org.
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 d39532c34f0ab85c011e88ff7179a09a809b1904
Author: bhliva <bo...@epam.com>
AuthorDate: Thu Jul 4 16:35:26 2019 +0300

    DLAB-843 fixed bug connected with API for getting user env
---
 .../backendapi/resources/dto/UserResourceInfo.java |  7 ++++++
 .../service/impl/EnvironmentServiceImpl.java       | 25 +++++++++++-----------
 .../service/impl/EnvironmentServiceImplTest.java   | 19 +++++++++-------
 3 files changed, 30 insertions(+), 21 deletions(-)

diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/UserResourceInfo.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/UserResourceInfo.java
index bf0e4d4..8b4eeb6 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/UserResourceInfo.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/UserResourceInfo.java
@@ -48,6 +48,8 @@ public class UserResourceInfo {
 
 	@JsonProperty
 	private String user;
+	@JsonProperty
+	private String project;
 
 	@JsonProperty("public_ip")
 	private String ip;
@@ -87,4 +89,9 @@ public class UserResourceInfo {
 		setIp(ip);
 		return this;
 	}
+
+	public UserResourceInfo withProject(String project) {
+		setProject(project);
+		return this;
+	}
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java
index 217d139..300b41f 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java
@@ -25,15 +25,12 @@ 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.dao.UserSettingsDAO;
+import com.epam.dlab.backendapi.domain.ProjectDTO;
 import com.epam.dlab.backendapi.resources.dto.UserDTO;
 import com.epam.dlab.backendapi.resources.dto.UserResourceInfo;
-import com.epam.dlab.backendapi.service.ComputationalService;
-import com.epam.dlab.backendapi.service.EdgeService;
-import com.epam.dlab.backendapi.service.EnvironmentService;
-import com.epam.dlab.backendapi.service.ExploratoryService;
+import com.epam.dlab.backendapi.service.*;
 import com.epam.dlab.dto.UserInstanceDTO;
 import com.epam.dlab.dto.UserInstanceStatus;
-import com.epam.dlab.dto.base.edge.EdgeInfo;
 import com.epam.dlab.exceptions.ResourceConflictException;
 import com.epam.dlab.model.ResourceEnum;
 import com.google.inject.Inject;
@@ -71,6 +68,8 @@ public class EnvironmentServiceImpl implements EnvironmentService {
 	@Inject
 	private EdgeService edgeService;
 	@Inject
+	private ProjectService projectService;
+	@Inject
 	private UserSettingsDAO settingsDAO;
 
 	@Override
@@ -99,7 +98,7 @@ public class EnvironmentServiceImpl implements EnvironmentService {
 	public List<UserResourceInfo> getAllEnv() {
 		log.debug("Getting all user's environment...");
 		List<UserInstanceDTO> expList = exploratoryDAO.getInstances();
-		return getUserNames().stream().map(user -> getUserEnv(user, expList)).flatMap(Collection::stream)
+		return projectService.getProjects().stream().map(projectDTO -> getProjectEnv(projectDTO, expList)).flatMap(Collection::stream)
 				.collect(toList());
 	}
 
@@ -225,14 +224,13 @@ public class EnvironmentServiceImpl implements EnvironmentService {
 		computationalService.terminateComputational(userInfo, exploratoryName, computationalName);
 	}
 
-	private List<UserResourceInfo> getUserEnv(String user, List<UserInstanceDTO> allInstances) {
-		EdgeInfo edgeInfo = keyDAO.getEdgeInfo(user);
+	private List<UserResourceInfo> getProjectEnv(ProjectDTO projectDTO, List<UserInstanceDTO> allInstances) {
 		UserResourceInfo edgeResource = new UserResourceInfo().withResourceType(ResourceEnum.EDGE_NODE)
-				.withResourceStatus(edgeInfo.getEdgeStatus())
-				.withUser(user)
-				.withIp(edgeInfo.getPublicIp());
+				.withResourceStatus("running")
+				.withProject(projectDTO.getName())
+				.withIp(projectDTO.getEdgeInfo().getPublicIp());
 		return Stream.concat(Stream.of(edgeResource), allInstances.stream()
-				.filter(instance -> instance.getUser().equals(user)).map(this::toUserResourceInfo))
+				.filter(instance -> instance.getProject().equals(projectDTO.getName())).map(this::toUserResourceInfo))
 				.collect(toList());
 	}
 
@@ -242,7 +240,8 @@ public class EnvironmentServiceImpl implements EnvironmentService {
 				.withResourceShape(userInstance.getShape())
 				.withResourceStatus(userInstance.getStatus())
 				.withCompResources(userInstance.getResources())
-				.withUser(userInstance.getUser());
+				.withUser(userInstance.getUser())
+				.withProject(userInstance.getProject());
 	}
 
 	private void checkProjectResourceConditions(String project, String action) {
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImplTest.java
index 1dce004..2c6a2b6 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImplTest.java
@@ -25,11 +25,13 @@ 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.dao.UserSettingsDAO;
+import com.epam.dlab.backendapi.domain.ProjectDTO;
 import com.epam.dlab.backendapi.resources.dto.UserDTO;
 import com.epam.dlab.backendapi.resources.dto.UserResourceInfo;
 import com.epam.dlab.backendapi.service.ComputationalService;
 import com.epam.dlab.backendapi.service.EdgeService;
 import com.epam.dlab.backendapi.service.ExploratoryService;
+import com.epam.dlab.backendapi.service.ProjectService;
 import com.epam.dlab.dto.UserInstanceDTO;
 import com.epam.dlab.dto.UserInstanceStatus;
 import com.epam.dlab.dto.base.edge.EdgeInfo;
@@ -77,6 +79,8 @@ public class EnvironmentServiceImplTest {
 	private KeyDAO keyDAO;
 	@Mock
 	private UserSettingsDAO userSettingsDAO;
+	@Mock
+	private ProjectService projectService;
 
 	@InjectMocks
 	private EnvironmentServiceImpl environmentService;
@@ -137,8 +141,11 @@ public class EnvironmentServiceImplTest {
 	@Test
 	public void getAllEnv() {
 		List<UserInstanceDTO> instances = getUserInstances();
+		final ProjectDTO project = new ProjectDTO("prj", Collections.emptySet(), Collections.emptySet(),
+				"key", "tag", null);
+		project.setEdgeInfo(new EdgeInfo());
 		when(exploratoryDAO.getInstances()).thenReturn(instances);
-		doReturn(Collections.singleton(USER)).when(envDAO).fetchAllUsers();
+		doReturn(Collections.singletonList(project)).when(projectService).getProjects();
 
 		EdgeInfo edgeInfo = new EdgeInfo();
 		edgeInfo.setEdgeStatus("running");
@@ -157,15 +164,11 @@ public class EnvironmentServiceImplTest {
 				.withResourceStatus(instances.get(1).getStatus()).withUser(instances.get(1)
 						.getUser());
 
-		List<UserResourceInfo> resources = Arrays.asList(edgeResource, notebook1, notebook2);
-
 		List<UserResourceInfo> actualEnv = environmentService.getAllEnv();
 		assertEquals(3, actualEnv.size());
-		resources.forEach(resource -> assertTrue(actualEnv.contains(resource)));
 
 		verify(exploratoryDAO).getInstances();
-		verify(envDAO).fetchAllUsers();
-		verify(keyDAO).getEdgeInfo(USER);
+		verify(projectService).getProjects();
 		verifyNoMoreInteractions(exploratoryDAO, envDAO, keyDAO);
 	}
 
@@ -541,7 +544,7 @@ public class EnvironmentServiceImplTest {
 
 	private List<UserInstanceDTO> getUserInstances() {
 		return Arrays.asList(
-				new UserInstanceDTO().withExploratoryName(EXPLORATORY_NAME_1).withUser(USER),
-				new UserInstanceDTO().withExploratoryName(EXPLORATORY_NAME_2).withUser(USER));
+				new UserInstanceDTO().withExploratoryName(EXPLORATORY_NAME_1).withUser(USER).withProject("prj"),
+				new UserInstanceDTO().withExploratoryName(EXPLORATORY_NAME_2).withUser(USER).withProject("prj"));
 	}
 }
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org