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