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

ofuks pushed a commit to branch DLAB-1919
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit 9d5dbc55d61fa3eef8b2bcf86be0978ea4b3f106
Author: Oleh Fuks <olegfuk...@gmail.com>
AuthorDate: Mon Jul 6 17:38:33 2020 +0300

    [DLAB-1919]First part of audit changes
---
 .../dlab/backendapi/domain/AuditActionEnum.java    |  2 +-
 .../dlab/backendapi/domain/AuditCreateDTO.java     |  2 +
 .../backendapi/domain/AuditResourceTypeEnum.java   |  2 +-
 .../backendapi/service/ExploratoryService.java     |  2 +
 .../backendapi/service/impl/AuditServiceImpl.java  |  3 +-
 .../service/impl/ComputationalServiceImpl.java     | 41 ++++++++---------
 .../service/impl/EndpointServiceImpl.java          |  8 ++--
 .../service/impl/ExploratoryServiceImpl.java       | 38 ++++++++++++----
 .../service/impl/ProjectServiceImpl.java           | 53 +++++++++++-----------
 .../resources/ImageExploratoryResourceTest.java    |  2 +-
 .../service/impl/ExploratoryServiceImplTest.java   | 30 ++++++------
 11 files changed, 102 insertions(+), 81 deletions(-)

diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditActionEnum.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditActionEnum.java
index e7bc9a1..cd5eb7b 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditActionEnum.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditActionEnum.java
@@ -20,5 +20,5 @@
 package com.epam.dlab.backendapi.domain;
 
 public enum AuditActionEnum {
-    CREATE, START, STOP, TERMINATE, UPDATE, UPLOAD, DOWNLOAD, DELETE, INSTALL, 
FOLLOW_LINK, LOG_IN
+    CREATE, START, STOP, TERMINATE, RECONFIGURE, UPDATE, CONNECT, DISCONNECT, 
UPLOAD, DOWNLOAD, DELETE, INSTALL, FOLLOW_LINK, LOG_IN
 }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditCreateDTO.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditCreateDTO.java
index 1deb5ae..22d939d 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditCreateDTO.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditCreateDTO.java
@@ -31,5 +31,7 @@ public class AuditCreateDTO {
     @NotBlank(message = "field cannot be empty")
     @JsonProperty("resource_name")
     private final String resourceName;
+    @NotBlank(message = "field cannot be empty")
     private final String info;
+    private final AuditResourceTypeEnum type;
 }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditResourceTypeEnum.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditResourceTypeEnum.java
index cc9ebdf..dce8f06 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditResourceTypeEnum.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditResourceTypeEnum.java
@@ -20,6 +20,6 @@
 package com.epam.dlab.backendapi.domain;
 
 public enum AuditResourceTypeEnum {
-    PROJECT, EDGE_NODE, NOTEBOOK, NOTEBOOK_SCHEDULER, NOTEBOOK_CONFIG, 
COMPUTATIONAL, COMPUTATIONAL_LIBS, COMPUTATIONAL_SCHEDULER, 
COMPUTATIONAL_CONFIG,
+    PROJECT, EDGE_NODE, NOTEBOOK, NOTEBOOK_SCHEDULER, COMPUTE, 
COMPUTATIONAL_LIBS, COMPUTATIONAL_SCHEDULER,
     BUCKET, ENDPOINT, NOTEBOOK_LIBS, GROUP, IMAGE, GIT_ACCOUNT, LOG_IN
 }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ExploratoryService.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ExploratoryService.java
index 6b54473..af49313 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ExploratoryService.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ExploratoryService.java
@@ -42,6 +42,8 @@ public interface ExploratoryService {
 
     String create(UserInfo userInfo, Exploratory exploratory, String project, 
String exploratoryName);
 
+    void updateProjectExploratoryStatuses(UserInfo userInfo, String project, 
String endpoint, UserInstanceStatus status);
+
     void updateProjectExploratoryStatuses(String project, String endpoint, 
UserInstanceStatus status);
 
     void updateClusterConfig(UserInfo userInfo, String project, String 
exploratoryName, List<ClusterConfig> config);
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/AuditServiceImpl.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/AuditServiceImpl.java
index 0e7aebc..94d6a82 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/AuditServiceImpl.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/AuditServiceImpl.java
@@ -29,7 +29,6 @@ import com.google.inject.Inject;
 import java.util.List;
 
 import static com.epam.dlab.backendapi.domain.AuditActionEnum.FOLLOW_LINK;
-import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.NOTEBOOK;
 
 public class AuditServiceImpl implements AuditService {
     private final AuditDAO auditDAO;
@@ -50,7 +49,7 @@ public class AuditServiceImpl implements AuditService {
                 .user(user)
                 .resourceName(audit.getResourceName())
                 .action(FOLLOW_LINK)
-                .type(NOTEBOOK)
+                .type(audit.getType())
                 .info(audit.getInfo())
                 .build();
         auditDAO.save(auditDTO);
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImpl.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImpl.java
index 232883c..1bfd0b7 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImpl.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImpl.java
@@ -70,12 +70,11 @@ import java.util.Optional;
 import java.util.stream.Collectors;
 
 import static com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.RECONFIGURE;
 import static com.epam.dlab.backendapi.domain.AuditActionEnum.START;
 import static com.epam.dlab.backendapi.domain.AuditActionEnum.STOP;
 import static com.epam.dlab.backendapi.domain.AuditActionEnum.TERMINATE;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.UPDATE;
-import static 
com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.COMPUTATIONAL;
-import static 
com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.COMPUTATIONAL_CONFIG;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.COMPUTE;
 import static com.epam.dlab.dto.UserInstanceStatus.CREATING;
 import static com.epam.dlab.dto.UserInstanceStatus.FAILED;
 import static com.epam.dlab.dto.UserInstanceStatus.RECONFIGURING;
@@ -153,7 +152,7 @@ public class ComputationalServiceImpl implements 
ComputationalService {
        }
 
        @BudgetLimited
-       @Audit(action = CREATE, type = COMPUTATIONAL)
+       @Audit(action = CREATE, type = COMPUTE)
        @Override
        public boolean createSparkCluster(@User UserInfo userInfo, 
@ResourceName String resourceName, SparkStandaloneClusterCreateForm form, 
@Project String project,
                                       @Info String auditInfo) {
@@ -179,19 +178,19 @@ public class ComputationalServiceImpl implements 
ComputationalService {
                                } catch (DlabException d) {
                                        
log.error(COULD_NOT_UPDATE_THE_STATUS_MSG_FORMAT, form.getName(), 
userInfo.getName(), d);
                                }
-                               throw e;
-                       }
-               } else {
-                       log.debug("Computational with name {} is already 
existing for user {}", form.getName(),
-                                       userInfo.getName());
-                       return false;
-               }
+                   throw e;
+            }
+        } else {
+               log.debug("Computational with name {} is already existing for 
user {}", form.getName(),
+                               userInfo.getName());
+               return false;
+        }
        }
 
-       @Audit(action = TERMINATE, type = COMPUTATIONAL)
+       @Audit(action = TERMINATE, type = COMPUTE)
        @Override
        public void terminateComputational(@User UserInfo userInfo, String 
resourceCreator, @Project String project, String exploratoryName, @ResourceName 
String computationalName,
-                                                                          
@Info String auditInfo) {
+                                          @Info String auditInfo) {
                try {
                        updateComputationalStatus(resourceCreator, project, 
exploratoryName, computationalName, TERMINATING);
 
@@ -217,7 +216,7 @@ public class ComputationalServiceImpl implements 
ComputationalService {
        }
 
        @BudgetLimited
-       @Audit(action = CREATE, type = COMPUTATIONAL)
+       @Audit(action = CREATE, type = COMPUTE)
        @Override
        public boolean createDataEngineService(@User UserInfo userInfo, 
@ResourceName String resourceName, ComputationalCreateFormDTO formDTO,
                                                                                
   UserComputationalResource computationalResource, @Project String project, 
@Info String auditInfo) {
@@ -250,13 +249,13 @@ public class ComputationalServiceImpl implements 
ComputationalService {
                                throw new DlabException("Could not send request 
for creation the computational resource " + formDTO
                                                .getName() + ": " + 
t.getLocalizedMessage(), t);
                        }
-               } else {
-                       log.debug("Used existing computational resource {} for 
user {}", formDTO.getName(), userInfo.getName());
-                       return false;
-               }
+        } else {
+               log.debug("Used existing computational resource {} for user 
{}", formDTO.getName(), userInfo.getName());
+               return false;
+        }
        }
 
-       @Audit(action = STOP, type = COMPUTATIONAL)
+       @Audit(action = STOP, type = COMPUTE)
        @Override
        public void stopSparkCluster(@User UserInfo userInfo, String 
resourceCreator, @Project String project, String expName, @ResourceName String 
compName, @Info String auditInfo) {
                final UserInstanceDTO userInstance = 
exploratoryDAO.fetchExploratoryFields(resourceCreator, project, expName, true);
@@ -277,7 +276,7 @@ public class ComputationalServiceImpl implements 
ComputationalService {
        }
 
        @BudgetLimited
-       @Audit(action = START, type = COMPUTATIONAL)
+       @Audit(action = START, type = COMPUTE)
        @Override
        public void startSparkCluster(@User UserInfo userInfo, String expName, 
@ResourceName String compName, @Project String project, @Info String auditInfo) 
{
                final UserInstanceDTO userInstance = 
exploratoryDAO.fetchExploratoryFields(userInfo.getName(), project, expName, 
true);
@@ -296,7 +295,7 @@ public class ComputationalServiceImpl implements 
ComputationalService {
                }
        }
 
-       @Audit(action = UPDATE, type = COMPUTATIONAL_CONFIG)
+       @Audit(action = RECONFIGURE, type = COMPUTE)
        @Override
        public void updateSparkClusterConfig(@User UserInfo userInfo, @Project 
String project, String exploratoryName, @ResourceName String computationalName, 
List<ClusterConfig> config) {
                final String userName = userInfo.getName();
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java
index a21fdd5..e3ad62c 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java
@@ -31,8 +31,8 @@ import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.DELETE;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.CONNECT;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.DISCONNECT;
 import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.ENDPOINT;
 
 
@@ -92,7 +92,7 @@ public class EndpointServiceImpl implements EndpointService {
      * @param resourceName name of the endpoint
      * @param endpointDTO  object with endpoint fields
      */
-    @Audit(action = CREATE, type = ENDPOINT)
+    @Audit(action = CONNECT, type = ENDPOINT)
     @Override
     public void create(@User UserInfo userInfo, @ResourceName String 
resourceName, EndpointDTO endpointDTO) {
         if (endpointDAO.get(endpointDTO.getName()).isPresent()) {
@@ -124,7 +124,7 @@ public class EndpointServiceImpl implements EndpointService 
{
         removeEndpoint(userInfo, name, cloudProvider, projects);
     }
 
-    @Audit(action = DELETE, type = ENDPOINT)
+       @Audit(action = DISCONNECT, type = ENDPOINT)
     public void removeEndpoint(@User UserInfo userInfo, @ResourceName String 
name, CloudProvider cloudProvider, List<ProjectDTO> projects) {
         removeEndpointInAllProjects(userInfo, name, projects);
         endpointDAO.remove(name);
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
index 1c914bf..39f7ec0 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
@@ -67,7 +67,7 @@ import com.google.inject.name.Named;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -75,13 +75,11 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import static com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.RECONFIGURE;
 import static com.epam.dlab.backendapi.domain.AuditActionEnum.START;
 import static com.epam.dlab.backendapi.domain.AuditActionEnum.STOP;
 import static com.epam.dlab.backendapi.domain.AuditActionEnum.TERMINATE;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.UPDATE;
-import static 
com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.COMPUTATIONAL;
 import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.NOTEBOOK;
-import static 
com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.NOTEBOOK_CONFIG;
 import static com.epam.dlab.dto.UserInstanceStatus.CREATING;
 import static com.epam.dlab.dto.UserInstanceStatus.FAILED;
 import static com.epam.dlab.dto.UserInstanceStatus.RUNNING;
@@ -183,12 +181,18 @@ public class ExploratoryServiceImpl implements 
ExploratoryService {
        }
 
        @Override
+       public void updateProjectExploratoryStatuses(UserInfo userInfo, String 
project, String endpoint, UserInstanceStatus status) {
+               
exploratoryDAO.fetchProjectExploratoriesWhereStatusNotIn(project, endpoint, 
TERMINATED, FAILED)
+                               .forEach(ui -> 
updateExploratoryStatus(userInfo, project, ui.getExploratoryName(), status, 
ui.getUser()));
+       }
+
+       @Override
        public void updateProjectExploratoryStatuses(String project, String 
endpoint, UserInstanceStatus status) {
                
exploratoryDAO.fetchProjectExploratoriesWhereStatusNotIn(project, endpoint, 
TERMINATED, FAILED)
                                .forEach(ui -> updateExploratoryStatus(project, 
ui.getExploratoryName(), status, ui.getUser()));
        }
 
-       @Audit(action = UPDATE, type = NOTEBOOK_CONFIG)
+       @Audit(action = RECONFIGURE, type = NOTEBOOK)
        @Override
        public void updateClusterConfig(@User UserInfo userInfo, @Project 
String project, @ResourceName String exploratoryName, List<ClusterConfig> 
config) {
                final String userName = userInfo.getName();
@@ -303,17 +307,26 @@ public class ExploratoryServiceImpl implements 
ExploratoryService {
                }
        }
 
+       @Audit(action = TERMINATE, type = NOTEBOOK)
+       public void updateExploratoryStatus(@User UserInfo userInfo, @Project 
String project, @ResourceName String exploratoryName, UserInstanceStatus 
status, String user) {
+               updateExploratoryStatus(user, project, exploratoryName, status);
+               updateComputationalStatuses(project, exploratoryName, status, 
user);
+       }
+
        private void updateExploratoryStatus(String project, String 
exploratoryName, UserInstanceStatus status, String user) {
                updateExploratoryStatus(user, project, exploratoryName, status);
+               updateComputationalStatuses(project, exploratoryName, status, 
user);
+       }
 
+       private void updateComputationalStatuses(String project, String 
exploratoryName, UserInstanceStatus status, String user) {
                if (status == STOPPING) {
                        if (configuration.isAuditEnabled()) {
-                               saveAudit(project, exploratoryName, user, STOP, 
COMPUTATIONAL);
+                               saveAudit(project, exploratoryName, user, STOP);
                        }
                        updateComputationalStatuses(user, project, 
exploratoryName, STOPPING, TERMINATING, FAILED, TERMINATED, STOPPED);
                } else if (status == TERMINATING) {
                        if (configuration.isAuditEnabled()) {
-                               saveAudit(project, exploratoryName, user, 
TERMINATE, COMPUTATIONAL);
+                               saveAudit(project, exploratoryName, user, 
TERMINATE);
                        }
                        updateComputationalStatuses(user, project, 
exploratoryName, TERMINATING, TERMINATING, TERMINATED, FAILED);
                } else if (status == TERMINATED) {
@@ -321,8 +334,13 @@ public class ExploratoryServiceImpl implements 
ExploratoryService {
                }
        }
 
-       private void saveAudit(String project, String exploratoryName, String 
user, AuditActionEnum action, AuditResourceTypeEnum type) {
-               computationalDAO.getComputationalResourcesWhereStatusIn(user, 
project, Arrays.asList(DataEngineType.SPARK_STANDALONE, 
DataEngineType.CLOUD_SERVICE),
+       private void saveAudit(String project, String exploratoryName, String 
user, AuditActionEnum action) {
+               saveAuditForComputational(project, exploratoryName, user, 
action, DataEngineType.SPARK_STANDALONE);
+               saveAuditForComputational(project, exploratoryName, user, 
TERMINATE, DataEngineType.CLOUD_SERVICE);
+       }
+
+       private void saveAuditForComputational(String project, String 
exploratoryName, String user, AuditActionEnum action, DataEngineType 
cloudService) {
+               computationalDAO.getComputationalResourcesWhereStatusIn(user, 
project, Collections.singletonList(cloudService),
                                exploratoryName, RUNNING)
                                .forEach(comp -> auditService.save(
                                                AuditDTO.builder()
@@ -330,7 +348,7 @@ public class ExploratoryServiceImpl implements 
ExploratoryService {
                                                                
.resourceName(comp)
                                                                
.project(project)
                                                                .action(action)
-                                                               .type(type)
+                                                               
.type(AuditResourceTypeEnum.COMPUTE)
                                                                .build())
                                );
        }
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 76fa48d..b4d635d 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
@@ -66,6 +66,7 @@ public class ProjectServiceImpl implements ProjectService {
        private static final String AUDIT_ADD_GROUP = "Added group(s) %s";
        private static final String AUDIT_REMOVE_GROUP = "Removed group(s) %s";
        private static final String AUDIT_UPDATE_BUDGET = "Update budget 
%d->%d";
+       private static final String AUDIT_ADD_EDGE_NODE = "Create edge node for 
endpoint %s, requested in project %s";
 
        private final ProjectDAO projectDAO;
        private final ExploratoryService exploratoryService;
@@ -138,9 +139,9 @@ public class ProjectServiceImpl implements ProjectService {
     @Audit(action = TERMINATE, type = EDGE_NODE)
     @Override
     public void terminateEndpoint(@User UserInfo userInfo, @ResourceName 
String endpoint, @Project String name) {
-        projectActionOnCloud(userInfo, name, TERMINATE_PRJ_API, endpoint);
-        projectDAO.updateEdgeStatus(name, endpoint, 
UserInstanceStatus.TERMINATING);
-        exploratoryService.updateProjectExploratoryStatuses(name, endpoint, 
UserInstanceStatus.TERMINATING);
+           projectActionOnCloud(userInfo, name, TERMINATE_PRJ_API, endpoint);
+           projectDAO.updateEdgeStatus(name, endpoint, 
UserInstanceStatus.TERMINATING);
+           exploratoryService.updateProjectExploratoryStatuses(userInfo, name, 
endpoint, UserInstanceStatus.TERMINATING);
     }
 
        @ProjectAdmin
@@ -209,14 +210,14 @@ public class ProjectServiceImpl implements ProjectService 
{
     @Audit(action = UPDATE, type = PROJECT)
     public void updateProject(@User UserInfo userInfo, @Project @ResourceName 
String projectName, UpdateProjectDTO projectDTO, ProjectDTO project, 
Set<String> newEndpoints,
                               @Info String projectAudit) {
-        final List<ProjectEndpointDTO> endpointsToBeCreated = newEndpoints
-                .stream()
-                .map(e -> new ProjectEndpointDTO(e, 
UserInstanceStatus.CREATING, null))
-                .collect(Collectors.toList());
-        project.getEndpoints().addAll(endpointsToBeCreated);
-        projectDAO.update(new ProjectDTO(project.getName(), 
projectDTO.getGroups(), project.getKey(),
-                project.getTag(), project.getBudget(), project.getEndpoints(), 
projectDTO.isSharedImageEnabled()));
-        endpointsToBeCreated.forEach(e -> createEndpoint(userInfo, 
projectName, project, e.getName()));
+           final List<ProjectEndpointDTO> endpointsToBeCreated = newEndpoints
+                           .stream()
+                           .map(e -> new ProjectEndpointDTO(e, 
UserInstanceStatus.CREATING, null))
+                           .collect(Collectors.toList());
+           project.getEndpoints().addAll(endpointsToBeCreated);
+           projectDAO.update(new ProjectDTO(project.getName(), 
projectDTO.getGroups(), project.getKey(),
+                           project.getTag(), project.getBudget(), 
project.getEndpoints(), projectDTO.isSharedImageEnabled()));
+           endpointsToBeCreated.forEach(e -> createEndpoint(userInfo, 
projectName, project, e.getName(), String.format(AUDIT_ADD_EDGE_NODE, 
e.getName(), project.getName())));
     }
 
     @Override
@@ -254,22 +255,22 @@ public class ProjectServiceImpl implements ProjectService 
{
                                UserInstanceStatus.TERMINATING).isEmpty();
        }
 
-    private void createProjectOnCloud(UserInfo user, ProjectDTO projectDTO) {
-        try {
-            projectDTO.getEndpoints().forEach(endpoint -> createEndpoint(user, 
projectDTO.getName(), projectDTO, endpoint.getName()));
-        } catch (Exception e) {
-            log.error("Can not create project due to: {}", e.getMessage());
-            projectDAO.updateStatus(projectDTO.getName(), 
ProjectDTO.Status.FAILED);
-        }
-    }
+       private void createProjectOnCloud(UserInfo user, ProjectDTO project) {
+               try {
+                       project.getEndpoints().forEach(e -> 
createEndpoint(user, project.getName(), project, e.getName(), 
String.format(AUDIT_ADD_EDGE_NODE, e.getName(), project.getName())));
+               } catch (Exception e) {
+                       log.error("Can not create project due to: {}", 
e.getMessage());
+                       projectDAO.updateStatus(project.getName(), 
ProjectDTO.Status.FAILED);
+               }
+       }
 
-    @Audit(action = CREATE, type = EDGE_NODE)
-    public void createEndpoint(@User UserInfo user, @Project String 
projectName, ProjectDTO projectDTO, @ResourceName String endpointName) {
-        EndpointDTO endpointDTO = endpointService.get(endpointName);
-        String uuid = provisioningService.post(endpointDTO.getUrl() + 
CREATE_PRJ_API, user.getAccessToken(),
-                requestBuilder.newProjectCreate(user, projectDTO, 
endpointDTO), String.class);
-        requestId.put(user.getName(), uuid);
-    }
+       @Audit(action = CREATE, type = EDGE_NODE)
+       public void createEndpoint(@User UserInfo user, @Project String 
projectName, ProjectDTO projectDTO, @ResourceName String endpointName, @Info 
String auditInfo) {
+               EndpointDTO endpointDTO = endpointService.get(endpointName);
+               String uuid = provisioningService.post(endpointDTO.getUrl() + 
CREATE_PRJ_API, user.getAccessToken(),
+                               requestBuilder.newProjectCreate(user, 
projectDTO, endpointDTO), String.class);
+               requestId.put(user.getName(), uuid);
+       }
 
        private void projectActionOnCloud(UserInfo user, String projectName, 
String provisioningApiUri, String endpoint) {
                try {
diff --git 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ImageExploratoryResourceTest.java
 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ImageExploratoryResourceTest.java
index 3eeb856..7c065dc 100644
--- 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ImageExploratoryResourceTest.java
+++ 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ImageExploratoryResourceTest.java
@@ -54,7 +54,7 @@ import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
 public class ImageExploratoryResourceTest extends TestBase {
-       private final static String AUDIT_MESSAGE = "Image name: %s";
+       private final static String AUDIT_MESSAGE = "Create image: %s";
        private static final String PROJECT = "projectName";
        private ImageExploratoryService imageExploratoryService = 
mock(ImageExploratoryService.class);
        private RequestId requestId = mock(RequestId.class);
diff --git 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImplTest.java
 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImplTest.java
index a821e7c..04b4c01 100644
--- 
a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImplTest.java
+++ 
b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImplTest.java
@@ -392,24 +392,24 @@ public class ExploratoryServiceImplTest {
 
        @Test
        public void updateProjectExploratoryStatuses() {
-        
when(exploratoryDAO.fetchProjectExploratoriesWhereStatusNotIn(anyString(), 
anyString(), anyVararg()))
-                .thenReturn(singletonList(userInstance));
-        
when(exploratoryDAO.updateExploratoryStatus(any(StatusEnvBaseDTO.class))).thenReturn(mock(UpdateResult.class));
-        
doNothing().when(computationalDAO).updateComputationalStatusesForExploratory(anyString(),
 anyString(),
-                anyString(), any(UserInstanceStatus.class), 
any(UserInstanceStatus.class), anyVararg());
+               
when(exploratoryDAO.fetchProjectExploratoriesWhereStatusNotIn(anyString(), 
anyString(), anyVararg()))
+                               .thenReturn(singletonList(userInstance));
+               
when(exploratoryDAO.updateExploratoryStatus(any(StatusEnvBaseDTO.class))).thenReturn(mock(UpdateResult.class));
+               
doNothing().when(computationalDAO).updateComputationalStatusesForExploratory(anyString(),
 anyString(),
+                               anyString(), any(UserInstanceStatus.class), 
any(UserInstanceStatus.class), anyVararg());
 
-        exploratoryService.updateProjectExploratoryStatuses("project", 
"endpoint",
-                UserInstanceStatus.TERMINATED);
-        statusEnvBaseDTO = getStatusEnvBaseDTOWithStatus("terminated");
+               exploratoryService.updateProjectExploratoryStatuses(userInfo, 
"project",
+                               "endpoint", UserInstanceStatus.TERMINATED);
+               statusEnvBaseDTO = getStatusEnvBaseDTOWithStatus("terminated");
 
-        
verify(exploratoryDAO).fetchProjectExploratoriesWhereStatusNotIn("project", 
"endpoint",
-                UserInstanceStatus.TERMINATED, UserInstanceStatus.FAILED);
-        verify(exploratoryDAO).updateExploratoryStatus(refEq(statusEnvBaseDTO, 
"self"));
-        
verify(computationalDAO).updateComputationalStatusesForExploratory(USER, 
PROJECT,
-                EXPLORATORY_NAME, UserInstanceStatus.TERMINATED, 
UserInstanceStatus.TERMINATED,
-                UserInstanceStatus.TERMINATED, UserInstanceStatus.FAILED);
+               
verify(exploratoryDAO).fetchProjectExploratoriesWhereStatusNotIn("project", 
"endpoint",
+                               UserInstanceStatus.TERMINATED, 
UserInstanceStatus.FAILED);
+               
verify(exploratoryDAO).updateExploratoryStatus(refEq(statusEnvBaseDTO, "self"));
+               
verify(computationalDAO).updateComputationalStatusesForExploratory(USER, 
PROJECT,
+                               EXPLORATORY_NAME, 
UserInstanceStatus.TERMINATED, UserInstanceStatus.TERMINATED,
+                               UserInstanceStatus.TERMINATED, 
UserInstanceStatus.FAILED);
 
-        verifyNoMoreInteractions(exploratoryDAO, computationalDAO);
+               verifyNoMoreInteractions(exploratoryDAO, computationalDAO);
     }
 
        @Test


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

Reply via email to