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