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

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


The following commit(s) were added to refs/heads/audit by this push:
     new da7cdbe  Refactoring of project audit
da7cdbe is described below

commit da7cdbe76bb5dff9aa4b63a1dce7bf3d8e2375d8
Author: Oleh Fuks <olegfuk...@gmail.com>
AuthorDate: Thu Jun 11 13:28:12 2020 +0300

    Refactoring of project audit
---
 .../dlab/backendapi/domain/AuditActionEnum.java    |  2 +-
 .../dlab/backendapi/service/ProjectService.java    | 22 +++++-----
 .../service/impl/EnvironmentServiceImpl.java       |  8 ++--
 .../service/impl/ProjectServiceImpl.java           | 47 +++++++++++-----------
 .../service/impl/EnvironmentServiceImplTest.java   | 43 ++++++++++----------
 5 files changed, 60 insertions(+), 62 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 14686d7..a46f93d 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,7 +20,7 @@
 package com.epam.dlab.backendapi.domain;
 
 public enum AuditActionEnum {
-    CREATE_PROJECT, START_PROJECT, STOP_PROJECT, TERMINATE_PROJECT, 
UPDATE_PROJECT,
+    CREATE_EDGE_NODE, START_EDGE_NODE, STOP_EDGE_NODE, TERMINATE_EDGE_NODE, 
UPDATE_PROJECT,
     CREATE_NOTEBOOK, START_NOTEBOOK, STOP_NOTEBOOK, TERMINATE_NOTEBOOK, 
UPDATE_CLUSTER_CONFIG,
     CREATE_DATA_ENGINE, CREATE_DATA_ENGINE_SERVICE, START_COMPUTATIONAL, 
STOP_COMPUTATIONAL, TERMINATE_COMPUTATIONAL, UPDATE_DATA_ENGINE_CONFIG,
     CREATE_ENDPOINT, DELETE_ENDPOINT,
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
index 953caef..ad75f8a 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
@@ -18,25 +18,25 @@ public interface ProjectService {
 
        void create(UserInfo userInfo, ProjectDTO projectDTO, String 
resourceName);
 
-       ProjectDTO get(String name);
+    ProjectDTO get(String name);
 
-       void terminateEndpoint(UserInfo userInfo, String endpoint, String name);
+    void terminateEndpoint(UserInfo userInfo, String endpoint, String name);
 
-       void terminateEndpoint(UserInfo userInfo, List<String> endpoints, 
String name);
+    void terminateEndpoint(UserInfo userInfo, List<String> endpoints, String 
name);
 
-       void start(UserInfo userInfo, String endpoint, String name);
+    void start(UserInfo userInfo, String endpoint, String name);
 
-       void start(UserInfo userInfo, List<String> endpoints, String name);
+    void start(UserInfo userInfo, List<String> endpoints, String name);
 
-       void stop(UserInfo userInfo, String endpoint, String name);
+    void stop(UserInfo userInfo, String endpoint, String name, List<String> 
auditInfo);
 
-       void stopWithResources(UserInfo userInfo, List<String> endpoints, 
String projectName);
+    void stopWithResources(UserInfo userInfo, List<String> endpoints, String 
projectName);
 
-       void update(UserInfo userInfo, UpdateProjectDTO projectDTO, String 
projectName);
+    void update(UserInfo userInfo, UpdateProjectDTO projectDTO, String 
projectName);
 
-       void updateBudget(UserInfo userInfo, List<UpdateProjectBudgetDTO> 
projects);
+    void updateBudget(UserInfo userInfo, List<UpdateProjectBudgetDTO> 
projects);
 
-       boolean isAnyProjectAssigned(UserInfo userInfo);
+    boolean isAnyProjectAssigned(UserInfo userInfo);
 
-       boolean checkExploratoriesAndComputationalProgress(String projectName, 
List<String> endpoints);
+    boolean checkExploratoriesAndComputationalProgress(String projectName, 
List<String> endpoints);
 }
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 70c18e7..d7fdef1 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
@@ -134,10 +134,10 @@ public class EnvironmentServiceImpl implements 
EnvironmentService {
                                .forEach(this::stopNotebookWithServiceAccount);
 
                projectService.get(project).getEndpoints()
-                               .stream()
-                               .filter(e -> UserInstanceStatus.RUNNING == 
e.getStatus())
-                               .forEach(endpoint -> 
projectService.stop(securityService.getServiceAccountInfo("admin"),
-                                               endpoint.getName(), project));
+                .stream()
+                .filter(e -> UserInstanceStatus.RUNNING == e.getStatus())
+                .forEach(endpoint -> 
projectService.stop(securityService.getServiceAccountInfo(DLAB_SYSTEM_USER),
+                        endpoint.getName(), project, 
Collections.singletonList(AUDIT_QUOTA_MESSAGE)));
        }
 
        @ProjectAdmin
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 52a14fa..106c608 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
@@ -42,10 +42,10 @@ import java.util.Set;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE_PROJECT;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.START_PROJECT;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.STOP_PROJECT;
-import static 
com.epam.dlab.backendapi.domain.AuditActionEnum.TERMINATE_PROJECT;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE_EDGE_NODE;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.START_EDGE_NODE;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.STOP_EDGE_NODE;
+import static 
com.epam.dlab.backendapi.domain.AuditActionEnum.TERMINATE_EDGE_NODE;
 import static com.epam.dlab.backendapi.domain.AuditActionEnum.UPDATE_PROJECT;
 import static java.util.stream.Collectors.toSet;
 import static java.util.stream.Stream.concat;
@@ -116,9 +116,8 @@ public class ProjectServiceImpl implements ProjectService {
        }
 
        @BudgetLimited
-       @Audit(action = CREATE_PROJECT)
        @Override
-       public void create(@User UserInfo user, ProjectDTO projectDTO, @Project 
@ResourceName String resourceName) {
+       public void create(UserInfo user, ProjectDTO projectDTO, @Project 
String resourceName) {
                if (!projectDAO.get(projectDTO.getName()).isPresent()) {
                        projectDAO.create(projectDTO);
                        createProjectOnCloud(user, projectDTO);
@@ -133,42 +132,42 @@ public class ProjectServiceImpl implements ProjectService 
{
                                .orElseThrow(projectNotFound());
        }
 
+       @Audit(action = TERMINATE_EDGE_NODE)
        @Override
-       public void terminateEndpoint(UserInfo userInfo, String endpoint, 
String name) {
+       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);
        }
 
        @ProjectAdmin
-       @Audit(action = TERMINATE_PROJECT)
        @Override
        public void terminateEndpoint(@User UserInfo userInfo, List<String> 
endpoints, @ResourceName @Project String name) {
                endpoints.forEach(endpoint -> terminateEndpoint(userInfo, 
endpoint, name));
        }
 
        @BudgetLimited
+       @Audit(action = START_EDGE_NODE)
        @Override
-       public void start(UserInfo userInfo, String endpoint, @Project String 
name) {
+       public void start(@User UserInfo userInfo, @ResourceName String 
endpoint, @Project String name) {
                projectActionOnCloud(userInfo, name, START_PRJ_API, endpoint);
                projectDAO.updateEdgeStatus(name, endpoint, 
UserInstanceStatus.STARTING);
        }
 
        @ProjectAdmin
-       @Audit(action = START_PROJECT)
        @Override
-       public void start(@User UserInfo userInfo, List<String> endpoints, 
@ResourceName @Project String name) {
+       public void start(UserInfo userInfo, List<String> endpoints, @Project 
String name) {
                endpoints.forEach(endpoint -> start(userInfo, endpoint, name));
        }
 
+       @Audit(action = STOP_EDGE_NODE)
        @Override
-       public void stop(UserInfo userInfo, String endpoint, String name) {
+       public void stop(@User UserInfo userInfo, @ResourceName String 
endpoint, @Project String name, @Info List<String> auditInfo) {
                projectActionOnCloud(userInfo, name, STOP_PRJ_API, endpoint);
                projectDAO.updateEdgeStatus(name, endpoint, 
UserInstanceStatus.STOPPING);
        }
 
        @ProjectAdmin
-       @Audit(action = STOP_PROJECT)
        @Override
        public void stopWithResources(@User UserInfo userInfo, List<String> 
endpoints, @ResourceName @Project String projectName) {
                List<ProjectEndpointDTO> endpointDTOs = get(projectName)
@@ -178,18 +177,18 @@ public class ProjectServiceImpl implements ProjectService 
{
                                .collect(Collectors.toList());
                checkProjectRelatedResourcesInProgress(projectName, 
endpointDTOs, STOP_ACTION);
 
+               endpointDTOs
+                               .stream()
+                               .filter(e -> 
!Arrays.asList(UserInstanceStatus.TERMINATED, UserInstanceStatus.TERMINATING, 
UserInstanceStatus.STOPPED,
+                                               
UserInstanceStatus.FAILED).contains(e.getStatus()))
+                               .forEach(e -> stop(userInfo, e.getName(), 
projectName, null));
+
                
exploratoryDAO.fetchRunningExploratoryFieldsForProject(projectName,
                                endpointDTOs
                                                .stream()
                                                
.map(ProjectEndpointDTO::getName)
                                                .collect(Collectors.toList()))
                                .forEach(e -> exploratoryService.stop(userInfo, 
e.getUser(), projectName, e.getExploratoryName(), null));
-
-               endpointDTOs
-                               .stream()
-                               .filter(e -> 
!Arrays.asList(UserInstanceStatus.TERMINATED, UserInstanceStatus.TERMINATING, 
UserInstanceStatus.STOPPED,
-                                               
UserInstanceStatus.FAILED).contains(e.getStatus()))
-                               .forEach(e -> stop(userInfo, e.getName(), 
projectName));
        }
 
        @ProjectAdmin
@@ -216,7 +215,7 @@ public class ProjectServiceImpl implements ProjectService {
                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, 
project, e.getName()));
+               endpointsToBeCreated.forEach(e -> createEndpoint(userInfo, 
projectName, project, e.getName()));
        }
 
        @Override
@@ -256,18 +255,18 @@ public class ProjectServiceImpl implements ProjectService 
{
 
        private void createProjectOnCloud(UserInfo user, ProjectDTO projectDTO) 
{
                try {
-                       projectDTO.getEndpoints().forEach(endpoint -> 
createEndpoint(user, projectDTO,
-                                       endpoint.getName()));
+                       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 createEndpoint(UserInfo user, ProjectDTO projectDTO, 
String endpointName) {
+       @Audit(action = CREATE_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);
+                               requestBuilder.newProjectCreate(user, 
projectDTO, endpointDTO), String.class);
                requestId.put(user.getName(), uuid);
        }
 
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 c32bcf5..bf4753e 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
@@ -128,28 +128,27 @@ public class EnvironmentServiceImplTest {
 
        @Test
        public void stopProjectEnvironment() {
-               final UserInfo userInfo = getUserInfo();
-               final ProjectDTO projectDTO = getProjectDTO();
-               
when(exploratoryDAO.fetchRunningExploratoryFieldsForProject(anyString())).thenReturn(getUserInstances());
-               
when(securityService.getServiceAccountInfo(anyString())).thenReturn(userInfo);
-               when(exploratoryService.stop(any(UserInfo.class), anyString(), 
anyString(), anyString(), anyList())).thenReturn(UUID);
-               when(projectService.get(anyString())).thenReturn(projectDTO);
-               doNothing().when(projectService).stop(any(UserInfo.class), 
anyString(), anyString());
-
-               environmentService.stopProjectEnvironment(PROJECT_NAME);
-
-               
verify(exploratoryDAO).fetchRunningExploratoryFieldsForProject(PROJECT_NAME);
-               verify(exploratoryService).stop(refEq(userInfo), eq(USER), 
eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), 
eq(Collections.singletonList(AUDIT_QUOTA_MESSAGE)));
-               verify(exploratoryService).stop(refEq(userInfo), eq(USER), 
eq(PROJECT_NAME), eq(EXPLORATORY_NAME_2), 
eq(Collections.singletonList(AUDIT_QUOTA_MESSAGE)));
-               verify(securityService, 
times(2)).getServiceAccountInfo(DLAB_SYSTEM_USER);
-               verify(securityService).getServiceAccountInfo(ADMIN);
-               verify(projectService).get(eq(PROJECT_NAME));
-               verify(projectService).stop(refEq(userInfo), eq(ENDPOINT_NAME), 
eq(PROJECT_NAME));
-               
verify(exploratoryDAO).fetchProjectExploratoriesWhereStatusIn(PROJECT_NAME, 
Arrays.asList(UserInstanceStatus.CREATING,
-                               UserInstanceStatus.STARTING, 
UserInstanceStatus.CREATING_IMAGE),
-                               UserInstanceStatus.CREATING, 
UserInstanceStatus.STARTING, UserInstanceStatus.CREATING_IMAGE);
-               verifyNoMoreInteractions(exploratoryDAO, exploratoryService, 
projectService);
-       }
+        final UserInfo userInfo = getUserInfo();
+        final ProjectDTO projectDTO = getProjectDTO();
+        
when(exploratoryDAO.fetchRunningExploratoryFieldsForProject(anyString())).thenReturn(getUserInstances());
+        
when(securityService.getServiceAccountInfo(anyString())).thenReturn(userInfo);
+        when(exploratoryService.stop(any(UserInfo.class), anyString(), 
anyString(), anyString(), anyList())).thenReturn(UUID);
+        when(projectService.get(anyString())).thenReturn(projectDTO);
+        doNothing().when(projectService).stop(any(UserInfo.class), 
anyString(), anyString(), anyList());
+
+        environmentService.stopProjectEnvironment(PROJECT_NAME);
+
+        
verify(exploratoryDAO).fetchRunningExploratoryFieldsForProject(PROJECT_NAME);
+        verify(exploratoryService).stop(refEq(userInfo), eq(USER), 
eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), 
eq(Collections.singletonList(AUDIT_QUOTA_MESSAGE)));
+        verify(exploratoryService).stop(refEq(userInfo), eq(USER), 
eq(PROJECT_NAME), eq(EXPLORATORY_NAME_2), 
eq(Collections.singletonList(AUDIT_QUOTA_MESSAGE)));
+        verify(securityService, 
times(3)).getServiceAccountInfo(DLAB_SYSTEM_USER);
+        verify(projectService).get(eq(PROJECT_NAME));
+        verify(projectService).stop(refEq(userInfo), eq(ENDPOINT_NAME), 
eq(PROJECT_NAME), eq(Collections.singletonList(AUDIT_QUOTA_MESSAGE)));
+        
verify(exploratoryDAO).fetchProjectExploratoriesWhereStatusIn(PROJECT_NAME, 
Arrays.asList(UserInstanceStatus.CREATING,
+                UserInstanceStatus.STARTING, 
UserInstanceStatus.CREATING_IMAGE),
+                UserInstanceStatus.CREATING, UserInstanceStatus.STARTING, 
UserInstanceStatus.CREATING_IMAGE);
+        verifyNoMoreInteractions(exploratoryDAO, exploratoryService, 
projectService);
+    }
 
        @Test
        public void stopExploratory() {


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

Reply via email to