You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by of...@apache.org on 2020/06/11 10:29:15 UTC
[incubator-dlab] branch audit updated: Refactoring of project audit
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 <ol...@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-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org