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 15:12:32 UTC

[incubator-dlab] branch audit updated: Added audit for installing libs

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 1eeffc2  Added audit for installing libs
1eeffc2 is described below

commit 1eeffc2baf2d0404682e6c856c2acdf122757f3f
Author: Oleh Fuks <ol...@gmail.com>
AuthorDate: Thu Jun 11 18:12:17 2020 +0300

    Added audit for installing libs
---
 .../dlab/backendapi/domain/AuditActionEnum.java    |  3 +-
 .../resources/LibExploratoryResource.java          | 22 ++++--
 .../dlab/backendapi/service/LibraryService.java    |  4 +-
 .../service/impl/LibraryServiceImpl.java           | 79 ++++++++++++----------
 .../resources/LibExploratoryResourceTest.java      | 46 ++++++++-----
 .../service/impl/LibraryServiceImplTest.java       | 15 ++--
 6 files changed, 97 insertions(+), 72 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 16e9e7e..45ae492 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
@@ -23,8 +23,9 @@ public enum AuditActionEnum {
     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,
     BUCKET_UPLOAD_OBJECT, BUCKET_DOWNLOAD_OBJECT, BUCKET_DELETE_OBJECT,
+    CREATE_ENDPOINT, DELETE_ENDPOINT,
+    INSTALL_NOTEBOOK_LIBS, INSTALL_COMPUTATIONAL_LIBS,
     CREATE_IMAGE,
     MANAGE_GIT_ACCOUNT,
     FOLLOW_NOTEBOOK_LINK,
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/LibExploratoryResource.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/LibExploratoryResource.java
index 841ed73..c6c13ac 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/LibExploratoryResource.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/LibExploratoryResource.java
@@ -60,12 +60,12 @@ import java.util.stream.Collectors;
 @Produces(MediaType.APPLICATION_JSON)
 @Slf4j
 public class LibExploratoryResource {
-
-
 	private static final String DROPWIZARD_ARTIFACT = "io.dropwizard:dropwizard-core:1.3.5";
+	private static final String AUDIT_MESSAGE = "Installed libs: %s";
+
 	private final ExternalLibraryService externalLibraryService;
-	private ExploratoryDAO exploratoryDAO;
-	private LibraryService libraryService;
+	private final ExploratoryDAO exploratoryDAO;
+	private final LibraryService libraryService;
 
 	@Inject
 	public LibExploratoryResource(ExploratoryDAO exploratoryDAO, LibraryService libraryService,
@@ -186,12 +186,13 @@ public class LibExploratoryResource {
 		final String exploratoryName = formDTO.getNotebookName();
 		final List<LibInstallDTO> libs = formDTO.getLibs();
 		final String computationalName = formDTO.getComputationalName();
+		final String auditInfo = getAuditInfo(libs);
 		String uuid = StringUtils.isEmpty(computationalName) ?
-				libraryService.installExploratoryLibs(userInfo, project, exploratoryName, libs) :
-				libraryService.installComputationalLibs(userInfo, project, exploratoryName, computationalName, libs);
+				libraryService.installExploratoryLibs(userInfo, project, exploratoryName, libs, auditInfo) :
+				libraryService.installComputationalLibs(userInfo, project, exploratoryName, computationalName, libs, auditInfo);
 		return Response.ok(uuid)
 				.build();
-    }
+	}
 
 	/**
 	 * Returns the list of available libraries for exploratory basing on search conditions provided in @formDTO.
@@ -240,4 +241,11 @@ public class LibExploratoryResource {
 		final String[] libNameParts = artifact.split(":");
 		return Response.ok(externalLibraryService.getLibrary(libNameParts[0], libNameParts[1], libNameParts[2])).build();
 	}
+
+	private String getAuditInfo(List<LibInstallDTO> libs) {
+		return String.format(AUDIT_MESSAGE, libs
+				.stream()
+				.map(LibInstallDTO::getName)
+				.collect(Collectors.joining(", ")));
+	}
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/LibraryService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/LibraryService.java
index bdd22f1..adf53e3 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/LibraryService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/LibraryService.java
@@ -32,7 +32,7 @@ public interface LibraryService {
     List<LibInfoRecord> getLibInfo(String user, String project, String exploratoryName);
 
     String installComputationalLibs(UserInfo userInfo, String project, String exploratoryName, String computationalName,
-                                    List<LibInstallDTO> libs);
+                                    List<LibInstallDTO> libs, String auditInfo);
 
-    String installExploratoryLibs(UserInfo userInfo, String project, String exploratoryName, List<LibInstallDTO> libs);
+    String installExploratoryLibs(UserInfo userInfo, String project, String exploratoryName, List<LibInstallDTO> libs, String auditInfo);
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImpl.java
index 3fbb170..e8ca45a 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImpl.java
@@ -20,6 +20,11 @@
 package com.epam.dlab.backendapi.service.impl;
 
 import com.epam.dlab.auth.UserInfo;
+import com.epam.dlab.backendapi.annotation.Audit;
+import com.epam.dlab.backendapi.annotation.Info;
+import com.epam.dlab.backendapi.annotation.Project;
+import com.epam.dlab.backendapi.annotation.ResourceName;
+import com.epam.dlab.backendapi.annotation.User;
 import com.epam.dlab.backendapi.dao.BaseDAO;
 import com.epam.dlab.backendapi.dao.ExploratoryDAO;
 import com.epam.dlab.backendapi.dao.ExploratoryLibDAO;
@@ -59,6 +64,9 @@ import java.util.Set;
 import java.util.TreeMap;
 import java.util.stream.Collectors;
 
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.INSTALL_COMPUTATIONAL_LIBS;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.INSTALL_NOTEBOOK_LIBS;
+
 @Slf4j
 @Singleton
 public class LibraryServiceImpl implements LibraryService {
@@ -80,6 +88,7 @@ public class LibraryServiceImpl implements LibraryService {
 
 	@Inject
 	private RequestId requestId;
+
 	@Inject
 	private EndpointService endpointService;
 
@@ -119,42 +128,40 @@ public class LibraryServiceImpl implements LibraryService {
 			populateComputational(computationalLibs, model, "cluster");
 		}
 
-		List<LibInfoRecord> libInfoRecords = new ArrayList<>();
-
-		for (Map.Entry<LibKey, List<LibraryStatus>> entry : model.entrySet()) {
-			libInfoRecords.add(new LibInfoRecord(entry.getKey(), entry.getValue()));
-
-		}
-
-		return libInfoRecords;
-	}
-
-	@Override
-	public String installComputationalLibs(UserInfo ui, String project, String expName, String compName,
-										   List<LibInstallDTO> libs) {
-
-		final UserInstanceDTO userInstance = exploratoryDAO.fetchExploratoryFields(ui.getName(), project, expName, compName);
-		EndpointDTO endpointDTO = endpointService.get(userInstance.getEndpoint());
-		final String uuid =
-				provisioningService.post(endpointDTO.getUrl() + ComputationalAPI.COMPUTATIONAL_LIB_INSTALL,
-						ui.getAccessToken(),
-						toComputationalLibraryInstallDto(ui, project, expName, compName, libs, userInstance, endpointDTO),
-						String.class);
-		requestId.put(ui.getName(), uuid);
-		return uuid;
-	}
-
-	@Override
-	public String installExploratoryLibs(UserInfo ui, String project, String expName, List<LibInstallDTO> libs) {
-		final UserInstanceDTO userInstance = exploratoryDAO.fetchRunningExploratoryFields(ui.getName(), project, expName);
-		EndpointDTO endpointDTO = endpointService.get(userInstance.getEndpoint());
-		final String uuid =
-				provisioningService.post(endpointDTO.getUrl() + ExploratoryAPI.EXPLORATORY_LIB_INSTALL,
-						ui.getAccessToken(), toExploratoryLibraryInstallDto(ui, project, expName, libs, userInstance, endpointDTO),
-						String.class);
-		requestId.put(ui.getName(), uuid);
-		return uuid;
-	}
+        List<LibInfoRecord> libInfoRecords = new ArrayList<>();
+
+        for (Map.Entry<LibKey, List<LibraryStatus>> entry : model.entrySet()) {
+            libInfoRecords.add(new LibInfoRecord(entry.getKey(), entry.getValue()));
+
+        }
+
+        return libInfoRecords;
+    }
+
+    @Audit(action = INSTALL_COMPUTATIONAL_LIBS)
+    @Override
+    public String installComputationalLibs(@User UserInfo ui, @Project String project, String expName, @ResourceName String compName, List<LibInstallDTO> libs, @Info String auditInfo) {
+        final UserInstanceDTO userInstance = exploratoryDAO.fetchExploratoryFields(ui.getName(), project, expName, compName);
+        EndpointDTO endpointDTO = endpointService.get(userInstance.getEndpoint());
+        final String uuid = provisioningService.post(endpointDTO.getUrl() + ComputationalAPI.COMPUTATIONAL_LIB_INSTALL,
+                ui.getAccessToken(),
+                toComputationalLibraryInstallDto(ui, project, expName, compName, libs, userInstance, endpointDTO),
+                String.class);
+        requestId.put(ui.getName(), uuid);
+        return uuid;
+    }
+
+    @Audit(action = INSTALL_NOTEBOOK_LIBS)
+    @Override
+    public String installExploratoryLibs(@User UserInfo ui, @Project String project, @ResourceName String expName, List<LibInstallDTO> libs, @Info String auditInfo) {
+        final UserInstanceDTO userInstance = exploratoryDAO.fetchRunningExploratoryFields(ui.getName(), project, expName);
+        EndpointDTO endpointDTO = endpointService.get(userInstance.getEndpoint());
+        final String uuid = provisioningService.post(endpointDTO.getUrl() + ExploratoryAPI.EXPLORATORY_LIB_INSTALL,
+                ui.getAccessToken(), toExploratoryLibraryInstallDto(ui, project, expName, libs, userInstance, endpointDTO),
+                String.class);
+        requestId.put(ui.getName(), uuid);
+        return uuid;
+    }
 
 	private LibraryInstallDTO toExploratoryLibraryInstallDto(UserInfo userInfo, String project, String exploratoryName,
 															 List<LibInstallDTO> libs, UserInstanceDTO userInstance, EndpointDTO endpointDTO) {
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/LibExploratoryResourceTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/LibExploratoryResourceTest.java
index c7f5ced..1d43d8e 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/LibExploratoryResourceTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/LibExploratoryResourceTest.java
@@ -50,6 +50,7 @@ import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import static java.util.Collections.singletonList;
 import static org.junit.Assert.assertEquals;
@@ -66,7 +67,7 @@ import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
 public class LibExploratoryResourceTest extends TestBase {
-
+    private static final String AUDIT_MESSAGE = "Installed libs: %s";
     private static final String LIB_GROUP = "group";
     private static final String LIB_NAME = "name";
     private static final String LIB_VERSION = "version";
@@ -288,13 +289,14 @@ public class LibExploratoryResourceTest extends TestBase {
 
 	@Test
 	public void libInstall() {
+        List<LibInstallDTO> libInstallDTOS = singletonList(new LibInstallDTO(LIB_GROUP, LIB_NAME, LIB_VERSION));
         when(libraryService.installComputationalLibs(any(UserInfo.class), anyString(), anyString(),
-                anyString(), anyListOf(LibInstallDTO.class))).thenReturn(UUID);
+                anyString(), anyListOf(LibInstallDTO.class), anyString())).thenReturn(UUID);
         LibInstallFormDTO libInstallFormDTO = new LibInstallFormDTO();
         libInstallFormDTO.setComputationalName(COMPUTATIONAL_NAME);
         libInstallFormDTO.setNotebookName(EXPLORATORY_NAME);
         libInstallFormDTO.setProject(PROJECT);
-        libInstallFormDTO.setLibs(singletonList(new LibInstallDTO(LIB_GROUP, LIB_NAME, LIB_VERSION)));
+        libInstallFormDTO.setLibs(libInstallDTOS);
         final Response response = resources.getJerseyTest()
                 .target("/infrastructure_provision/exploratory_environment/lib_install")
                 .request()
@@ -306,7 +308,7 @@ public class LibExploratoryResourceTest extends TestBase {
         assertEquals(UUID, response.readEntity(String.class));
 
         verify(libraryService).installComputationalLibs(refEq(getUserInfo()), eq(PROJECT),
-                eq(EXPLORATORY_NAME), eq(COMPUTATIONAL_NAME), eq(singletonList(new LibInstallDTO(LIB_GROUP, LIB_NAME, LIB_VERSION))));
+                eq(EXPLORATORY_NAME), eq(COMPUTATIONAL_NAME), eq(libInstallDTOS), eq(getAuditInfo(libInstallDTOS)));
         verifyNoMoreInteractions(libraryService);
         verifyZeroInteractions(provisioningService, requestId);
     }
@@ -314,10 +316,11 @@ public class LibExploratoryResourceTest extends TestBase {
 
 	@Test
 	public void libInstallWithoutComputational() {
-        when(libraryService.installExploratoryLibs(any(UserInfo.class), anyString(), anyString(), anyListOf(LibInstallDTO.class))).thenReturn(UUID);
+        List<LibInstallDTO> libInstallDTOS = singletonList(new LibInstallDTO(LIB_GROUP, LIB_NAME, LIB_VERSION));
+        when(libraryService.installExploratoryLibs(any(UserInfo.class), anyString(), anyString(), anyListOf(LibInstallDTO.class), anyString())).thenReturn(UUID);
         LibInstallFormDTO libInstallFormDTO = new LibInstallFormDTO();
         libInstallFormDTO.setNotebookName(EXPLORATORY_NAME);
-        libInstallFormDTO.setLibs(singletonList(new LibInstallDTO(LIB_GROUP, LIB_NAME, LIB_VERSION)));
+        libInstallFormDTO.setLibs(libInstallDTOS);
         libInstallFormDTO.setProject(PROJECT);
         final Response response = resources.getJerseyTest()
                 .target("/infrastructure_provision/exploratory_environment/lib_install")
@@ -330,7 +333,7 @@ public class LibExploratoryResourceTest extends TestBase {
         assertEquals(UUID, response.readEntity(String.class));
 
         verify(libraryService).installExploratoryLibs(refEq(getUserInfo()), eq(PROJECT),
-                eq(EXPLORATORY_NAME), eq(singletonList(new LibInstallDTO(LIB_GROUP, LIB_NAME, LIB_VERSION))));
+                eq(EXPLORATORY_NAME), eq(libInstallDTOS), eq(getAuditInfo(libInstallDTOS)));
         verifyNoMoreInteractions(libraryService);
         verifyZeroInteractions(provisioningService, requestId);
     }
@@ -450,7 +453,7 @@ public class LibExploratoryResourceTest extends TestBase {
 				"test", "1.0");
 	}
 
-	private UserInstanceDTO getUserInstanceDto() {
+    private UserInstanceDTO getUserInstanceDto() {
         UserComputationalResource ucResource = new UserComputationalResource();
         ucResource.setComputationalName("compName");
         return new UserInstanceDTO()
@@ -460,16 +463,23 @@ public class LibExploratoryResourceTest extends TestBase {
                 .withResources(singletonList(ucResource));
     }
 
-	private List<Document> getDocuments() {
-		return singletonList(new Document());
-	}
+    private List<Document> getDocuments() {
+        return singletonList(new Document());
+    }
 
-	private List<LibInfoRecord> getLibInfoRecords() {
-		return singletonList(new LibInfoRecord(
-				new LibKey(), singletonList(new LibraryStatus())));
-	}
+    private List<LibInfoRecord> getLibInfoRecords() {
+        return singletonList(new LibInfoRecord(
+                new LibKey(), singletonList(new LibraryStatus())));
+    }
 
-	private LibraryInstallDTO getLibraryInstallDTO() {
-		return new LibraryInstallDTO().withComputationalName("compName");
-	}
+    private LibraryInstallDTO getLibraryInstallDTO() {
+        return new LibraryInstallDTO().withComputationalName("compName");
+    }
+
+    private String getAuditInfo(List<LibInstallDTO> libs) {
+        return String.format(AUDIT_MESSAGE, libs
+                .stream()
+                .map(LibInstallDTO::getName)
+                .collect(Collectors.joining(", ")));
+    }
 }
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImplTest.java
index 3677929..f926b17 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImplTest.java
@@ -163,7 +163,7 @@ public class LibraryServiceImplTest {
 
 
         final String uuid = libraryService.installComputationalLibs(user, PROJECT, EXPLORATORY_NAME,
-                COMPUTATIONAL_NAME, getLibs(null));
+                COMPUTATIONAL_NAME, getLibs(null), null);
 
         assertEquals(UUID, uuid);
 
@@ -198,8 +198,7 @@ public class LibraryServiceImplTest {
         expectedException.expect(DlabException.class);
         expectedException.expectMessage("Computational with name " + COMPUTATIONAL_NAME + "X was not found");
 
-        libraryService.installComputationalLibs(user, PROJECT, EXPLORATORY_NAME,
-                COMPUTATIONAL_NAME + "X", getLibs(null));
+        libraryService.installComputationalLibs(user, PROJECT, EXPLORATORY_NAME, COMPUTATIONAL_NAME + "X", getLibs(null), null);
     }
 
 	@Test
@@ -219,7 +218,7 @@ public class LibraryServiceImplTest {
         when(libraryDAO.getLibrary(anyString(), anyString(), anyString(), anyString(), anyString(), anyString())).thenReturn(getLibrary(LibStatus.INSTALLED));
 
         final String uuid = libraryService.installComputationalLibs(user, PROJECT, EXPLORATORY_NAME,
-                COMPUTATIONAL_NAME, getLibs(null));
+                COMPUTATIONAL_NAME, getLibs(null), null);
 
         assertEquals(UUID, uuid);
 
@@ -256,7 +255,7 @@ public class LibraryServiceImplTest {
 
         try {
             libraryService.installComputationalLibs(user, PROJECT, EXPLORATORY_NAME,
-                    COMPUTATIONAL_NAME, getLibs(null));
+                    COMPUTATIONAL_NAME, getLibs(null), null);
         } catch (DlabException e) {
             assertEquals("Library name is already installing", e.getMessage());
         }
@@ -279,7 +278,7 @@ public class LibraryServiceImplTest {
                 anyListOf(LibInstallDTO.class))).thenReturn(libraryInstallDTO);
 
 
-        final String uuid = libraryService.installExploratoryLibs(user, PROJECT, EXPLORATORY_NAME, getLibs(null));
+        final String uuid = libraryService.installExploratoryLibs(user, PROJECT, EXPLORATORY_NAME, getLibs(null), null);
 
         assertEquals(UUID, uuid);
 
@@ -307,7 +306,7 @@ public class LibraryServiceImplTest {
                 anyListOf(LibInstallDTO.class))).thenReturn(libraryInstallDTO);
         when(libraryDAO.getLibrary(anyString(), anyString(), anyString(), anyString(), anyString())).thenReturn(getLibrary(LibStatus.INSTALLED));
 
-        final String uuid = libraryService.installExploratoryLibs(user, PROJECT, EXPLORATORY_NAME, getLibs(null));
+        final String uuid = libraryService.installExploratoryLibs(user, PROJECT, EXPLORATORY_NAME, getLibs(null), null);
 
         assertEquals(UUID, uuid);
 
@@ -337,7 +336,7 @@ public class LibraryServiceImplTest {
         when(libraryDAO.getLibrary(anyString(), anyString(), anyString(), anyString(), anyString())).thenReturn(getLibrary(LibStatus.INSTALLING));
 
         try {
-            libraryService.installExploratoryLibs(user, PROJECT, EXPLORATORY_NAME, getLibs(null));
+            libraryService.installExploratoryLibs(user, PROJECT, EXPLORATORY_NAME, getLibs(null), null);
         } catch (DlabException e) {
             assertEquals("Library name is already installing", e.getMessage());
         }


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