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