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/23 12:24:34 UTC
[incubator-dlab] branch audit updated: [DLAB-1888] Divide action
one two columns
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 84ba176 [DLAB-1888] Divide action one two columns
84ba176 is described below
commit 84ba176da1804a905ae8d510c2300397407e8c33
Author: Oleh Fuks <ol...@gmail.com>
AuthorDate: Tue Jun 23 15:24:16 2020 +0300
[DLAB-1888] Divide action one two columns
---
.../com/epam/dlab/backendapi/annotation/Audit.java | 3 +
.../dlab/backendapi/domain/AuditActionEnum.java | 12 +-
.../com/epam/dlab/backendapi/domain/AuditDTO.java | 1 +
.../AuditResourceTypeEnum.java} | 16 +-
.../backendapi/interceptor/AuditInterceptor.java | 16 +-
.../backendapi/service/impl/AuditServiceImpl.java | 8 +-
.../backendapi/service/impl/BucketServiceImpl.java | 11 +-
.../service/impl/ComputationalServiceImpl.java | 121 +++++------
.../service/impl/EndpointServiceImpl.java | 85 ++++----
.../service/impl/ExploratoryServiceImpl.java | 72 ++++---
.../service/impl/GitCredentialServiceImpl.java | 71 ++++---
.../service/impl/ImageExploratoryServiceImpl.java | 83 ++++----
.../service/impl/LibraryServiceImpl.java | 9 +-
.../service/impl/ProjectServiceImpl.java | 234 +++++++++++----------
.../service/impl/SchedulerJobServiceImpl.java | 102 ++++-----
.../service/impl/UserGroupServiceImpl.java | 14 +-
.../service/impl/EnvironmentServiceImplTest.java | 22 +-
.../service/impl/ExploratoryServiceImplTest.java | 48 +++--
18 files changed, 475 insertions(+), 453 deletions(-)
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/annotation/Audit.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/annotation/Audit.java
index d6bd5e9..946fabc 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/annotation/Audit.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/annotation/Audit.java
@@ -20,6 +20,7 @@
package com.epam.dlab.backendapi.annotation;
import com.epam.dlab.backendapi.domain.AuditActionEnum;
+import com.epam.dlab.backendapi.domain.AuditResourceTypeEnum;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -30,4 +31,6 @@ import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
public @interface Audit {
AuditActionEnum action();
+
+ AuditResourceTypeEnum type();
}
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 37cfbee..e7bc9a1 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,15 +20,5 @@
package com.epam.dlab.backendapi.domain;
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_NOTEBOOK_SCHEDULER,
- CREATE_DATA_ENGINE, CREATE_DATA_ENGINE_SERVICE, START_COMPUTATIONAL, STOP_COMPUTATIONAL, TERMINATE_COMPUTATIONAL, UPDATE_DATA_ENGINE_CONFIG, CREATE_COMPUTATIONAL_SCHEDULER,
- BUCKET_UPLOAD_OBJECT, BUCKET_DOWNLOAD_OBJECT, BUCKET_DELETE_OBJECT,
- CREATE_ENDPOINT, DELETE_ENDPOINT,
- INSTALL_NOTEBOOK_LIBS, INSTALL_COMPUTATIONAL_LIBS,
- CREATE_GROUP, UPDATE_GROUP, DELETE_GROUP,
- CREATE_IMAGE,
- MANAGE_GIT_ACCOUNT,
- FOLLOW_NOTEBOOK_LINK,
- LOG_IN
+ CREATE, START, STOP, TERMINATE, UPDATE, UPLOAD, DOWNLOAD, DELETE, INSTALL, FOLLOW_LINK, LOG_IN
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditDTO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditDTO.java
index d7a2d98..442522f 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditDTO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditDTO.java
@@ -31,6 +31,7 @@ import java.util.Date;
public class AuditDTO {
private final String user;
private final AuditActionEnum action;
+ private final AuditResourceTypeEnum type;
private final String project;
private final String resourceName;
private final String info;
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/annotation/Audit.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditResourceTypeEnum.java
similarity index 67%
copy from services/self-service/src/main/java/com/epam/dlab/backendapi/annotation/Audit.java
copy to services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditResourceTypeEnum.java
index d6bd5e9..cc9ebdf 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/annotation/Audit.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditResourceTypeEnum.java
@@ -17,17 +17,9 @@
* under the License.
*/
-package com.epam.dlab.backendapi.annotation;
+package com.epam.dlab.backendapi.domain;
-import com.epam.dlab.backendapi.domain.AuditActionEnum;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Audit {
- AuditActionEnum action();
+public enum AuditResourceTypeEnum {
+ PROJECT, EDGE_NODE, NOTEBOOK, NOTEBOOK_SCHEDULER, NOTEBOOK_CONFIG, COMPUTATIONAL, COMPUTATIONAL_LIBS, COMPUTATIONAL_SCHEDULER, COMPUTATIONAL_CONFIG,
+ BUCKET, ENDPOINT, NOTEBOOK_LIBS, GROUP, IMAGE, GIT_ACCOUNT, LOG_IN
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/interceptor/AuditInterceptor.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/interceptor/AuditInterceptor.java
index fc04335..4b1b0ca 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/interceptor/AuditInterceptor.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/interceptor/AuditInterceptor.java
@@ -27,6 +27,7 @@ import com.epam.dlab.backendapi.annotation.ResourceName;
import com.epam.dlab.backendapi.annotation.User;
import com.epam.dlab.backendapi.domain.AuditActionEnum;
import com.epam.dlab.backendapi.domain.AuditDTO;
+import com.epam.dlab.backendapi.domain.AuditResourceTypeEnum;
import com.epam.dlab.backendapi.service.AuditService;
import com.epam.dlab.exceptions.DlabException;
import com.google.inject.Inject;
@@ -51,7 +52,8 @@ public class AuditInterceptor implements MethodInterceptor {
Method method = mi.getMethod();
final Parameter[] parameters = mi.getMethod().getParameters();
final String user = getUserInfo(mi, parameters);
- final AuditActionEnum action = getAuditActionEnum(method);
+ final AuditActionEnum action = getAuditAction(method);
+ final AuditResourceTypeEnum resourceType = getResourceType(method);
final String project = getProject(mi, parameters);
final String resourceName = getResourceName(mi, parameters);
final String auditInfo = getInfo(mi, parameters);
@@ -59,6 +61,7 @@ public class AuditInterceptor implements MethodInterceptor {
AuditDTO auditCreateDTO = AuditDTO.builder()
.user(user)
.action(action)
+ .type(resourceType)
.project(project)
.resourceName(resourceName)
.info(auditInfo)
@@ -75,7 +78,7 @@ public class AuditInterceptor implements MethodInterceptor {
.orElseThrow(() -> new DlabException("UserInfo parameter wanted!"));
}
- private AuditActionEnum getAuditActionEnum(Method method) {
+ private AuditActionEnum getAuditAction(Method method) {
Annotation[] declaredAnnotations = method.getDeclaredAnnotations();
return IntStream.range(0, method.getDeclaredAnnotations().length)
.filter(i -> declaredAnnotations[i] instanceof Audit)
@@ -84,6 +87,15 @@ public class AuditInterceptor implements MethodInterceptor {
.orElseThrow(() -> new DlabException("'Audit' annotation wanted!"));
}
+ private AuditResourceTypeEnum getResourceType(Method method) {
+ Annotation[] declaredAnnotations = method.getDeclaredAnnotations();
+ return IntStream.range(0, method.getDeclaredAnnotations().length)
+ .filter(i -> declaredAnnotations[i] instanceof Audit)
+ .mapToObj(i -> ((Audit) declaredAnnotations[i]).type())
+ .findAny()
+ .orElseThrow(() -> new DlabException("'Audit' annotation wanted!"));
+ }
+
private String getProject(MethodInvocation mi, Parameter[] parameters) {
return IntStream.range(0, parameters.length)
.filter(i -> Objects.nonNull(parameters[i].getAnnotation(Project.class)))
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/AuditServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/AuditServiceImpl.java
index 9db06da..6c86411 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/AuditServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/AuditServiceImpl.java
@@ -20,7 +20,6 @@
package com.epam.dlab.backendapi.service.impl;
import com.epam.dlab.backendapi.dao.AuditDAO;
-import com.epam.dlab.backendapi.domain.AuditActionEnum;
import com.epam.dlab.backendapi.domain.AuditCreateDTO;
import com.epam.dlab.backendapi.domain.AuditDTO;
import com.epam.dlab.backendapi.domain.AuditPaginationDTO;
@@ -29,6 +28,9 @@ import com.google.inject.Inject;
import java.util.List;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.FOLLOW_LINK;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.NOTEBOOK;
+
public class AuditServiceImpl implements AuditService {
private final AuditDAO auditDAO;
@@ -47,10 +49,10 @@ public class AuditServiceImpl implements AuditService {
AuditDTO auditDTO = AuditDTO.builder()
.user(user)
.resourceName(audit.getResourceName())
- .action(AuditActionEnum.FOLLOW_NOTEBOOK_LINK)
+ .action(FOLLOW_LINK)
+ .type(NOTEBOOK)
.info(audit.getInfo())
.build();
-
auditDAO.save(auditDTO);
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BucketServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BucketServiceImpl.java
index eecd939..93fc12b 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BucketServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BucketServiceImpl.java
@@ -24,7 +24,6 @@ import com.epam.dlab.backendapi.annotation.Audit;
import com.epam.dlab.backendapi.annotation.Info;
import com.epam.dlab.backendapi.annotation.ResourceName;
import com.epam.dlab.backendapi.annotation.User;
-import com.epam.dlab.backendapi.domain.AuditActionEnum;
import com.epam.dlab.backendapi.domain.EndpointDTO;
import com.epam.dlab.backendapi.service.BucketService;
import com.epam.dlab.backendapi.service.EndpointService;
@@ -52,6 +51,10 @@ import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.DELETE;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.DOWNLOAD;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.UPLOAD;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.BUCKET;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import static javax.ws.rs.core.MediaType.APPLICATION_OCTET_STREAM;
@@ -83,7 +86,7 @@ public class BucketServiceImpl implements BucketService {
}
}
- @Audit(action = AuditActionEnum.BUCKET_UPLOAD_OBJECT)
+ @Audit(action = UPLOAD, type = BUCKET)
@Override
public void uploadObjects(@User UserInfo userInfo, @ResourceName String bucket, String object, String endpoint, InputStream inputStream, long fileSize, @Info String auditInfo) {
log.info("Uploading file {} for user {} to bucket {}", object, userInfo.getName(), bucket);
@@ -101,7 +104,7 @@ public class BucketServiceImpl implements BucketService {
log.info("Finished uploading file {} for user {} to bucket {}", object, userInfo.getName(), bucket);
}
- @Audit(action = AuditActionEnum.BUCKET_DOWNLOAD_OBJECT)
+ @Audit(action = DOWNLOAD, type = BUCKET)
@Override
public void downloadObject(@User UserInfo userInfo, @ResourceName String bucket, String object, String endpoint, HttpServletResponse resp, @Info String auditInfo) {
log.info("Downloading file {} for user {} from bucket {}", object, userInfo.getName(), bucket);
@@ -116,7 +119,7 @@ public class BucketServiceImpl implements BucketService {
}
}
- @Audit(action = AuditActionEnum.BUCKET_DELETE_OBJECT)
+ @Audit(action = DELETE, type = BUCKET)
@Override
public void deleteObjects(@User UserInfo userInfo, @ResourceName String bucket, List<String> objects, String endpoint, @Info String auditInfo) {
try {
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImpl.java
index 0f24936..232883c 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImpl.java
@@ -69,12 +69,13 @@ import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE_DATA_ENGINE;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE_DATA_ENGINE_SERVICE;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.START_COMPUTATIONAL;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.STOP_COMPUTATIONAL;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.TERMINATE_COMPUTATIONAL;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.UPDATE_DATA_ENGINE_CONFIG;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.START;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.STOP;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.TERMINATE;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.UPDATE;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.COMPUTATIONAL;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.COMPUTATIONAL_CONFIG;
import static com.epam.dlab.dto.UserInstanceStatus.CREATING;
import static com.epam.dlab.dto.UserInstanceStatus.FAILED;
import static com.epam.dlab.dto.UserInstanceStatus.RECONFIGURING;
@@ -152,9 +153,9 @@ public class ComputationalServiceImpl implements ComputationalService {
}
@BudgetLimited
- @Audit(action = CREATE_DATA_ENGINE)
- @Override
- public boolean createSparkCluster(@User UserInfo userInfo, @ResourceName String resourceName, SparkStandaloneClusterCreateForm form, @Project String project,
+ @Audit(action = CREATE, type = COMPUTATIONAL)
+ @Override
+ public boolean createSparkCluster(@User UserInfo userInfo, @ResourceName String resourceName, SparkStandaloneClusterCreateForm form, @Project String project,
@Info String auditInfo) {
final ProjectDTO projectDTO = projectService.get(project);
final UserInstanceDTO instance =
@@ -187,18 +188,18 @@ public class ComputationalServiceImpl implements ComputationalService {
}
}
- @Audit(action = TERMINATE_COMPUTATIONAL)
- @Override
- public void terminateComputational(@User UserInfo userInfo, String resourceCreator, @Project String project, String exploratoryName, @ResourceName String computationalName,
- @Info String auditInfo) {
- try {
- updateComputationalStatus(resourceCreator, project, exploratoryName, computationalName, TERMINATING);
+ @Audit(action = TERMINATE, type = COMPUTATIONAL)
+ @Override
+ public void terminateComputational(@User UserInfo userInfo, String resourceCreator, @Project String project, String exploratoryName, @ResourceName String computationalName,
+ @Info String auditInfo) {
+ try {
+ updateComputationalStatus(resourceCreator, project, exploratoryName, computationalName, TERMINATING);
- final UserInstanceDTO userInstanceDTO = exploratoryDAO.fetchExploratoryFields(resourceCreator, project, exploratoryName);
- UserComputationalResource compResource = computationalDAO.fetchComputationalFields(resourceCreator, project, exploratoryName, computationalName);
+ final UserInstanceDTO userInstanceDTO = exploratoryDAO.fetchExploratoryFields(resourceCreator, project, exploratoryName);
+ UserComputationalResource compResource = computationalDAO.fetchComputationalFields(resourceCreator, project, exploratoryName, computationalName);
- final DataEngineType dataEngineType = compResource.getDataEngineType();
- EndpointDTO endpointDTO = endpointService.get(userInstanceDTO.getEndpoint());
+ final DataEngineType dataEngineType = compResource.getDataEngineType();
+ EndpointDTO endpointDTO = endpointService.get(userInstanceDTO.getEndpoint());
ComputationalTerminateDTO dto = requestBuilder.newComputationalTerminate(resourceCreator, userInstanceDTO, compResource, endpointDTO);
final String provisioningUrl = Optional.ofNullable(DATA_ENGINE_TYPE_TERMINATE_URLS.get(dataEngineType))
@@ -215,19 +216,19 @@ public class ComputationalServiceImpl implements ComputationalService {
}
}
- @BudgetLimited
- @Audit(action = CREATE_DATA_ENGINE_SERVICE)
- @Override
- public boolean createDataEngineService(@User UserInfo userInfo, @ResourceName String resourceName, ComputationalCreateFormDTO formDTO,
- UserComputationalResource computationalResource, @Project String project, @Info String auditInfo) {
- final ProjectDTO projectDTO = projectService.get(project);
- final UserInstanceDTO instance = exploratoryDAO.fetchExploratoryFields(userInfo.getName(), project, formDTO
- .getNotebookName());
- final Map<String, String> tags = tagService.getResourceTags(userInfo, instance.getEndpoint(), project,
- formDTO.getCustomTag());
- computationalResource.setTags(tags);
- boolean isAdded = computationalDAO.addComputational(userInfo.getName(), formDTO.getNotebookName(), project,
- computationalResource);
+ @BudgetLimited
+ @Audit(action = CREATE, type = COMPUTATIONAL)
+ @Override
+ public boolean createDataEngineService(@User UserInfo userInfo, @ResourceName String resourceName, ComputationalCreateFormDTO formDTO,
+ UserComputationalResource computationalResource, @Project String project, @Info String auditInfo) {
+ final ProjectDTO projectDTO = projectService.get(project);
+ final UserInstanceDTO instance = exploratoryDAO.fetchExploratoryFields(userInfo.getName(), project, formDTO
+ .getNotebookName());
+ final Map<String, String> tags = tagService.getResourceTags(userInfo, instance.getEndpoint(), project,
+ formDTO.getCustomTag());
+ computationalResource.setTags(tags);
+ boolean isAdded = computationalDAO.addComputational(userInfo.getName(), formDTO.getNotebookName(), project,
+ computationalResource);
if (isAdded) {
try {
@@ -255,19 +256,19 @@ public class ComputationalServiceImpl implements ComputationalService {
}
}
- @Audit(action = STOP_COMPUTATIONAL)
- @Override
- public void stopSparkCluster(@User UserInfo userInfo, String resourceCreator, @Project String project, String expName, @ResourceName String compName, @Info String auditInfo) {
- final UserInstanceDTO userInstance = exploratoryDAO.fetchExploratoryFields(resourceCreator, project, expName, true);
- final UserInstanceStatus requiredStatus = UserInstanceStatus.RUNNING;
- if (computationalWithStatusResourceExist(compName, userInstance, requiredStatus)) {
- log.debug("{} spark cluster {} for userInstance {}", STOPPING.toString(), compName, expName);
- updateComputationalStatus(resourceCreator, project, expName, compName, STOPPING);
- EndpointDTO endpointDTO = endpointService.get(userInstance.getEndpoint());
- final String uuid = provisioningService.post(endpointDTO.getUrl() + ComputationalAPI.COMPUTATIONAL_STOP_SPARK,
- userInfo.getAccessToken(),
- requestBuilder.newComputationalStop(resourceCreator, userInstance, compName, endpointDTO),
- String.class);
+ @Audit(action = STOP, type = COMPUTATIONAL)
+ @Override
+ public void stopSparkCluster(@User UserInfo userInfo, String resourceCreator, @Project String project, String expName, @ResourceName String compName, @Info String auditInfo) {
+ final UserInstanceDTO userInstance = exploratoryDAO.fetchExploratoryFields(resourceCreator, project, expName, true);
+ final UserInstanceStatus requiredStatus = UserInstanceStatus.RUNNING;
+ if (computationalWithStatusResourceExist(compName, userInstance, requiredStatus)) {
+ log.debug("{} spark cluster {} for userInstance {}", STOPPING.toString(), compName, expName);
+ updateComputationalStatus(resourceCreator, project, expName, compName, STOPPING);
+ EndpointDTO endpointDTO = endpointService.get(userInstance.getEndpoint());
+ final String uuid = provisioningService.post(endpointDTO.getUrl() + ComputationalAPI.COMPUTATIONAL_STOP_SPARK,
+ userInfo.getAccessToken(),
+ requestBuilder.newComputationalStop(resourceCreator, userInstance, compName, endpointDTO),
+ String.class);
requestId.put(resourceCreator, uuid);
} else {
throw new IllegalStateException(String.format(DATAENGINE_NOT_PRESENT_FORMAT, requiredStatus.toString(), compName, expName));
@@ -275,27 +276,27 @@ public class ComputationalServiceImpl implements ComputationalService {
}
- @BudgetLimited
- @Audit(action = START_COMPUTATIONAL)
- @Override
- public void startSparkCluster(@User UserInfo userInfo, String expName, @ResourceName String compName, @Project String project, @Info String auditInfo) {
- final UserInstanceDTO userInstance = exploratoryDAO.fetchExploratoryFields(userInfo.getName(), project, expName, true);
- final UserInstanceStatus requiredStatus = UserInstanceStatus.STOPPED;
- if (computationalWithStatusResourceExist(compName, userInstance, requiredStatus)) {
- log.debug("{} spark cluster {} for userInstance {}", STARTING.toString(), compName, expName);
- updateComputationalStatus(userInfo.getName(), project, expName, compName, STARTING);
- EndpointDTO endpointDTO = endpointService.get(userInstance.getEndpoint());
- final String uuid = provisioningService.post(endpointDTO.getUrl() + ComputationalAPI.COMPUTATIONAL_START_SPARK,
- userInfo.getAccessToken(),
- requestBuilder.newComputationalStart(userInfo, userInstance, compName, endpointDTO),
- String.class);
+ @BudgetLimited
+ @Audit(action = START, type = COMPUTATIONAL)
+ @Override
+ public void startSparkCluster(@User UserInfo userInfo, String expName, @ResourceName String compName, @Project String project, @Info String auditInfo) {
+ final UserInstanceDTO userInstance = exploratoryDAO.fetchExploratoryFields(userInfo.getName(), project, expName, true);
+ final UserInstanceStatus requiredStatus = UserInstanceStatus.STOPPED;
+ if (computationalWithStatusResourceExist(compName, userInstance, requiredStatus)) {
+ log.debug("{} spark cluster {} for userInstance {}", STARTING.toString(), compName, expName);
+ updateComputationalStatus(userInfo.getName(), project, expName, compName, STARTING);
+ EndpointDTO endpointDTO = endpointService.get(userInstance.getEndpoint());
+ final String uuid = provisioningService.post(endpointDTO.getUrl() + ComputationalAPI.COMPUTATIONAL_START_SPARK,
+ userInfo.getAccessToken(),
+ requestBuilder.newComputationalStart(userInfo, userInstance, compName, endpointDTO),
+ String.class);
requestId.put(userInfo.getName(), uuid);
} else {
throw new IllegalStateException(String.format(DATAENGINE_NOT_PRESENT_FORMAT, requiredStatus.toString(), compName, expName));
}
}
- @Audit(action = UPDATE_DATA_ENGINE_CONFIG)
+ @Audit(action = UPDATE, type = COMPUTATIONAL_CONFIG)
@Override
public void updateSparkClusterConfig(@User UserInfo userInfo, @Project String project, String exploratoryName, @ResourceName String computationalName, List<ClusterConfig> config) {
final String userName = userInfo.getName();
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java
index 40ed5ea..a21fdd5 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java
@@ -31,8 +31,9 @@ import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE_ENDPOINT;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.DELETE_ENDPOINT;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.DELETE;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.ENDPOINT;
@Slf4j
@@ -82,26 +83,26 @@ public class EndpointServiceImpl implements EndpointService {
.orElseThrow(() -> new ResourceNotFoundException("Endpoint with name " + name + " not found"));
}
- /**
- * Create new endpoint object in the System.
- * The Endpoint objects should contain Unique values of the 'url' and 'name' fields,
- * i.e two objects with same URLs should not be created in the system.
- *
- * @param userInfo user properties
- * @param resourceName name of the endpoint
- * @param endpointDTO object with endpoint fields
- */
- @Audit(action = CREATE_ENDPOINT)
- @Override
- public void create(@User UserInfo userInfo, @ResourceName String resourceName, EndpointDTO endpointDTO) {
- if (endpointDAO.get(endpointDTO.getName()).isPresent()) {
- throw new ResourceConflictException("The Endpoint with this name exists in system");
- }
- if (endpointDAO.getEndpointWithUrl(endpointDTO.getUrl()).isPresent()) {
- throw new ResourceConflictException("The Endpoint URL with this address exists in system");
- }
- CloudProvider cloudProvider = checkUrl(userInfo, endpointDTO.getUrl());
- if (Objects.isNull(cloudProvider)) {
+ /**
+ * Create new endpoint object in the System.
+ * The Endpoint objects should contain Unique values of the 'url' and 'name' fields,
+ * i.e two objects with same URLs should not be created in the system.
+ *
+ * @param userInfo user properties
+ * @param resourceName name of the endpoint
+ * @param endpointDTO object with endpoint fields
+ */
+ @Audit(action = CREATE, type = ENDPOINT)
+ @Override
+ public void create(@User UserInfo userInfo, @ResourceName String resourceName, EndpointDTO endpointDTO) {
+ if (endpointDAO.get(endpointDTO.getName()).isPresent()) {
+ throw new ResourceConflictException("The Endpoint with this name exists in system");
+ }
+ if (endpointDAO.getEndpointWithUrl(endpointDTO.getUrl()).isPresent()) {
+ throw new ResourceConflictException("The Endpoint URL with this address exists in system");
+ }
+ CloudProvider cloudProvider = checkUrl(userInfo, endpointDTO.getUrl());
+ if (Objects.isNull(cloudProvider)) {
throw new DlabException("CloudProvider cannot be null");
}
endpointDAO.create(new EndpointDTO(endpointDTO.getName(), endpointDTO.getUrl(), endpointDTO.getAccount(),
@@ -112,26 +113,26 @@ public class EndpointServiceImpl implements EndpointService {
@Override
public void updateEndpointStatus(String name, EndpointDTO.EndpointStatus status) {
endpointDAO.updateEndpointStatus(name, status.name());
- }
-
- @Override
- public void remove(UserInfo userInfo, String name) {
- EndpointDTO endpointDTO = endpointDAO.get(name).orElseThrow(() -> new ResourceNotFoundException(String.format("Endpoint %s does not exist", name)));
- List<ProjectDTO> projects = projectService.getProjectsByEndpoint(name);
- checkProjectEndpointResourcesStatuses(projects, name);
- CloudProvider cloudProvider = endpointDTO.getCloudProvider();
- removeEndpoint(userInfo, name, cloudProvider, projects);
- }
-
- @Audit(action = DELETE_ENDPOINT)
- public void removeEndpoint(@User UserInfo userInfo, @ResourceName String name, CloudProvider cloudProvider, List<ProjectDTO> projects) {
- removeEndpointInAllProjects(userInfo, name, projects);
- endpointDAO.remove(name);
- List<CloudProvider> remainingProviders = endpointDAO.getEndpoints()
- .stream()
- .map(EndpointDTO::getCloudProvider)
- .collect(Collectors.toList());
- userRoleDao.removeUnnecessaryRoles(cloudProvider, remainingProviders);
+ }
+
+ @Override
+ public void remove(UserInfo userInfo, String name) {
+ EndpointDTO endpointDTO = endpointDAO.get(name).orElseThrow(() -> new ResourceNotFoundException(String.format("Endpoint %s does not exist", name)));
+ List<ProjectDTO> projects = projectService.getProjectsByEndpoint(name);
+ checkProjectEndpointResourcesStatuses(projects, name);
+ CloudProvider cloudProvider = endpointDTO.getCloudProvider();
+ removeEndpoint(userInfo, name, cloudProvider, projects);
+ }
+
+ @Audit(action = DELETE, type = ENDPOINT)
+ public void removeEndpoint(@User UserInfo userInfo, @ResourceName String name, CloudProvider cloudProvider, List<ProjectDTO> projects) {
+ removeEndpointInAllProjects(userInfo, name, projects);
+ endpointDAO.remove(name);
+ List<CloudProvider> remainingProviders = endpointDAO.getEndpoints()
+ .stream()
+ .map(EndpointDTO::getCloudProvider)
+ .collect(Collectors.toList());
+ userRoleDao.removeUnnecessaryRoles(cloudProvider, remainingProviders);
}
@Override
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
index 449b461..1c914bf 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
@@ -33,6 +33,7 @@ import com.epam.dlab.backendapi.dao.GitCredsDAO;
import com.epam.dlab.backendapi.dao.ImageExploratoryDao;
import com.epam.dlab.backendapi.domain.AuditActionEnum;
import com.epam.dlab.backendapi.domain.AuditDTO;
+import com.epam.dlab.backendapi.domain.AuditResourceTypeEnum;
import com.epam.dlab.backendapi.domain.EndpointDTO;
import com.epam.dlab.backendapi.domain.ProjectDTO;
import com.epam.dlab.backendapi.domain.RequestId;
@@ -73,11 +74,14 @@ import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE_NOTEBOOK;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.START_NOTEBOOK;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.STOP_NOTEBOOK;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.TERMINATE_NOTEBOOK;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.UPDATE_CLUSTER_CONFIG;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.START;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.STOP;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.TERMINATE;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.UPDATE;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.COMPUTATIONAL;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.NOTEBOOK;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.NOTEBOOK_CONFIG;
import static com.epam.dlab.dto.UserInstanceStatus.CREATING;
import static com.epam.dlab.dto.UserInstanceStatus.FAILED;
import static com.epam.dlab.dto.UserInstanceStatus.RUNNING;
@@ -128,26 +132,26 @@ public class ExploratoryServiceImpl implements ExploratoryService {
}
@BudgetLimited
- @Audit(action = START_NOTEBOOK)
- @Override
- public String start(@User UserInfo userInfo, @ResourceName String exploratoryName, @Project String project, @Info String auditInfo) {
- return action(userInfo, userInfo.getName(), project, exploratoryName, EXPLORATORY_START, STARTING);
- }
-
- @Audit(action = STOP_NOTEBOOK)
- @Override
- public String stop(@User UserInfo userInfo, String resourceCreator, @Project String project, @ResourceName String exploratoryName, @Info String auditInfo) {
- return action(userInfo, resourceCreator, project, exploratoryName, EXPLORATORY_STOP, STOPPING);
- }
-
- @Audit(action = TERMINATE_NOTEBOOK)
- @Override
- public String terminate(@User UserInfo userInfo, String resourceCreator, @Project String project, @ResourceName String exploratoryName, @Info String auditInfo) {
- return action(userInfo, resourceCreator, project, exploratoryName, EXPLORATORY_TERMINATE, TERMINATING);
- }
+ @Audit(action = START, type = NOTEBOOK)
+ @Override
+ public String start(@User UserInfo userInfo, @ResourceName String exploratoryName, @Project String project, @Info String auditInfo) {
+ return action(userInfo, userInfo.getName(), project, exploratoryName, EXPLORATORY_START, STARTING);
+ }
+
+ @Audit(action = STOP, type = NOTEBOOK)
+ @Override
+ public String stop(@User UserInfo userInfo, String resourceCreator, @Project String project, @ResourceName String exploratoryName, @Info String auditInfo) {
+ return action(userInfo, resourceCreator, project, exploratoryName, EXPLORATORY_STOP, STOPPING);
+ }
+
+ @Audit(action = TERMINATE, type = NOTEBOOK)
+ @Override
+ public String terminate(@User UserInfo userInfo, String resourceCreator, @Project String project, @ResourceName String exploratoryName, @Info String auditInfo) {
+ return action(userInfo, resourceCreator, project, exploratoryName, EXPLORATORY_TERMINATE, TERMINATING);
+ }
@BudgetLimited
- @Audit(action = CREATE_NOTEBOOK)
+ @Audit(action = CREATE, type = NOTEBOOK)
@Override
public String create(@User UserInfo userInfo, Exploratory exploratory, @Project String project, @ResourceName String exploratoryName) {
boolean isAdded = false;
@@ -184,7 +188,7 @@ public class ExploratoryServiceImpl implements ExploratoryService {
.forEach(ui -> updateExploratoryStatus(project, ui.getExploratoryName(), status, ui.getUser()));
}
- @Audit(action = UPDATE_CLUSTER_CONFIG)
+ @Audit(action = UPDATE, type = NOTEBOOK_CONFIG)
@Override
public void updateClusterConfig(@User UserInfo userInfo, @Project String project, @ResourceName String exploratoryName, List<ClusterConfig> config) {
final String userName = userInfo.getName();
@@ -304,12 +308,12 @@ public class ExploratoryServiceImpl implements ExploratoryService {
if (status == STOPPING) {
if (configuration.isAuditEnabled()) {
- saveAudit(project, exploratoryName, user, AuditActionEnum.STOP_COMPUTATIONAL);
+ saveAudit(project, exploratoryName, user, STOP, COMPUTATIONAL);
}
updateComputationalStatuses(user, project, exploratoryName, STOPPING, TERMINATING, FAILED, TERMINATED, STOPPED);
} else if (status == TERMINATING) {
if (configuration.isAuditEnabled()) {
- saveAudit(project, exploratoryName, user, AuditActionEnum.TERMINATE_COMPUTATIONAL);
+ saveAudit(project, exploratoryName, user, TERMINATE, COMPUTATIONAL);
}
updateComputationalStatuses(user, project, exploratoryName, TERMINATING, TERMINATING, TERMINATED, FAILED);
} else if (status == TERMINATED) {
@@ -317,15 +321,17 @@ public class ExploratoryServiceImpl implements ExploratoryService {
}
}
- private void saveAudit(String project, String exploratoryName, String user, AuditActionEnum action) {
+ private void saveAudit(String project, String exploratoryName, String user, AuditActionEnum action, AuditResourceTypeEnum type) {
computationalDAO.getComputationalResourcesWhereStatusIn(user, project, Arrays.asList(DataEngineType.SPARK_STANDALONE, DataEngineType.CLOUD_SERVICE),
exploratoryName, RUNNING)
- .forEach(comp -> auditService.save(AuditDTO.builder()
- .user(user)
- .resourceName(comp)
- .project(project)
- .action(action)
- .build())
+ .forEach(comp -> auditService.save(
+ AuditDTO.builder()
+ .user(user)
+ .resourceName(comp)
+ .project(project)
+ .action(action)
+ .type(type)
+ .build())
);
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/GitCredentialServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/GitCredentialServiceImpl.java
index 0d715d0..4b8b604 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/GitCredentialServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/GitCredentialServiceImpl.java
@@ -43,49 +43,50 @@ import org.apache.commons.lang3.StringUtils;
import java.util.stream.Collectors;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.MANAGE_GIT_ACCOUNT;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.UPDATE;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.GIT_ACCOUNT;
import static com.epam.dlab.rest.contracts.ExploratoryAPI.EXPLORATORY_GIT_CREDS;
@Slf4j
@Singleton
public class GitCredentialServiceImpl implements GitCredentialService {
- private static final boolean CLEAR_USER_PASSWORD = true;
- @Inject
- private GitCredsDAO gitCredsDAO;
- @Inject
- private ExploratoryDAO exploratoryDAO;
- @Inject
- @Named(ServiceConsts.PROVISIONING_SERVICE_NAME)
- private RESTService provisioningService;
- @Inject
- private RequestBuilder requestBuilder;
- @Inject
- private RequestId requestId;
- @Inject
- private EndpointService endpointService;
+ private static final boolean CLEAR_USER_PASSWORD = true;
+ @Inject
+ private GitCredsDAO gitCredsDAO;
+ @Inject
+ private ExploratoryDAO exploratoryDAO;
+ @Inject
+ @Named(ServiceConsts.PROVISIONING_SERVICE_NAME)
+ private RESTService provisioningService;
+ @Inject
+ private RequestBuilder requestBuilder;
+ @Inject
+ private RequestId requestId;
+ @Inject
+ private EndpointService endpointService;
- @Audit(action = MANAGE_GIT_ACCOUNT)
- @Override
- public void updateGitCredentials(@User UserInfo userInfo, ExploratoryGitCredsDTO formDTO) {
- log.debug("Updating GIT creds for user {} to {}", userInfo.getName(), formDTO);
- try {
- gitCredsDAO.updateGitCreds(userInfo.getName(), formDTO);
- final String failedNotebooks = exploratoryDAO.fetchRunningExploratoryFields(userInfo.getName())
- .stream()
- .filter(ui -> !updateNotebookGitCredentials(userInfo, formDTO, ui))
- .map(UserInstanceDTO::getExploratoryName)
- .collect(Collectors.joining(","));
- if (StringUtils.isNotEmpty(failedNotebooks)) {
- throw new DlabException("Requests for notebooks failed: " + failedNotebooks);
- }
- } catch (Exception t) {
- log.error("Cannot update the GIT creds for user {}", userInfo.getName(), t);
- throw new DlabException("Cannot update the GIT credentials: " + t.getLocalizedMessage(), t);
- }
- }
+ @Audit(action = UPDATE, type = GIT_ACCOUNT)
+ @Override
+ public void updateGitCredentials(@User UserInfo userInfo, ExploratoryGitCredsDTO formDTO) {
+ log.debug("Updating GIT creds for user {} to {}", userInfo.getName(), formDTO);
+ try {
+ gitCredsDAO.updateGitCreds(userInfo.getName(), formDTO);
+ final String failedNotebooks = exploratoryDAO.fetchRunningExploratoryFields(userInfo.getName())
+ .stream()
+ .filter(ui -> !updateNotebookGitCredentials(userInfo, formDTO, ui))
+ .map(UserInstanceDTO::getExploratoryName)
+ .collect(Collectors.joining(","));
+ if (StringUtils.isNotEmpty(failedNotebooks)) {
+ throw new DlabException("Requests for notebooks failed: " + failedNotebooks);
+ }
+ } catch (Exception t) {
+ log.error("Cannot update the GIT creds for user {}", userInfo.getName(), t);
+ throw new DlabException("Cannot update the GIT credentials: " + t.getLocalizedMessage(), t);
+ }
+ }
- @Override
+ @Override
public ExploratoryGitCredsDTO getGitCredentials(String user) {
log.debug("Loading GIT creds for user {}", user);
try {
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImpl.java
index 9d12621..10e5126 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImpl.java
@@ -58,51 +58,52 @@ import java.util.Map;
import java.util.function.Predicate;
import java.util.stream.Collectors;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE_IMAGE;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.IMAGE;
@Singleton
@Slf4j
public class ImageExploratoryServiceImpl implements ImageExploratoryService {
- private static final String IMAGE_EXISTS_MSG = "Image with name %s is already exist in project %s";
- private static final String IMAGE_NOT_FOUND_MSG = "Image with name %s was not found for user %s";
-
- @Inject
- private ExploratoryDAO exploratoryDAO;
- @Inject
- private ImageExploratoryDao imageExploratoryDao;
- @Inject
- private ExploratoryLibDAO libDAO;
- @Inject
- @Named(ServiceConsts.PROVISIONING_SERVICE_NAME)
- private RESTService provisioningService;
- @Inject
- private RequestBuilder requestBuilder;
- @Inject
- private EndpointService endpointService;
- @Inject
- private ProjectService projectService;
-
- @Audit(action = CREATE_IMAGE)
- @Override
- public String createImage(@User UserInfo user, @Project String project, @ResourceName String exploratoryName, String imageName, String imageDescription, @Info String info) {
- ProjectDTO projectDTO = projectService.get(project);
- UserInstanceDTO userInstance = exploratoryDAO.fetchRunningExploratoryFields(user.getName(), project, exploratoryName);
-
- if (imageExploratoryDao.exist(imageName, userInstance.getProject())) {
- log.error(String.format(IMAGE_EXISTS_MSG, imageName, userInstance.getProject()));
- throw new ResourceAlreadyExistException(String.format(IMAGE_EXISTS_MSG, imageName, userInstance.getProject()));
- }
- final List<Library> libraries = libDAO.getLibraries(user.getName(), project, exploratoryName);
-
- imageExploratoryDao.save(Image.builder()
- .name(imageName)
- .description(imageDescription)
- .status(ImageStatus.CREATING)
- .user(user.getName())
- .libraries(fetchExploratoryLibs(libraries))
- .computationalLibraries(fetchComputationalLibs(libraries))
- .dockerImage(userInstance.getImageName())
- .exploratoryId(userInstance.getId())
+ private static final String IMAGE_EXISTS_MSG = "Image with name %s is already exist in project %s";
+ private static final String IMAGE_NOT_FOUND_MSG = "Image with name %s was not found for user %s";
+
+ @Inject
+ private ExploratoryDAO exploratoryDAO;
+ @Inject
+ private ImageExploratoryDao imageExploratoryDao;
+ @Inject
+ private ExploratoryLibDAO libDAO;
+ @Inject
+ @Named(ServiceConsts.PROVISIONING_SERVICE_NAME)
+ private RESTService provisioningService;
+ @Inject
+ private RequestBuilder requestBuilder;
+ @Inject
+ private EndpointService endpointService;
+ @Inject
+ private ProjectService projectService;
+
+ @Audit(action = CREATE, type = IMAGE)
+ @Override
+ public String createImage(@User UserInfo user, @Project String project, @ResourceName String exploratoryName, String imageName, String imageDescription, @Info String info) {
+ ProjectDTO projectDTO = projectService.get(project);
+ UserInstanceDTO userInstance = exploratoryDAO.fetchRunningExploratoryFields(user.getName(), project, exploratoryName);
+
+ if (imageExploratoryDao.exist(imageName, userInstance.getProject())) {
+ log.error(String.format(IMAGE_EXISTS_MSG, imageName, userInstance.getProject()));
+ throw new ResourceAlreadyExistException(String.format(IMAGE_EXISTS_MSG, imageName, userInstance.getProject()));
+ }
+ final List<Library> libraries = libDAO.getLibraries(user.getName(), project, exploratoryName);
+
+ imageExploratoryDao.save(Image.builder()
+ .name(imageName)
+ .description(imageDescription)
+ .status(ImageStatus.CREATING)
+ .user(user.getName())
+ .libraries(fetchExploratoryLibs(libraries))
+ .computationalLibraries(fetchComputationalLibs(libraries))
+ .dockerImage(userInstance.getImageName())
+ .exploratoryId(userInstance.getId())
.project(userInstance.getProject())
.endpoint(userInstance.getEndpoint())
.build());
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 e8ca45a..87bd5d4 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
@@ -64,8 +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;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.INSTALL;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.COMPUTATIONAL_LIBS;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.NOTEBOOK_LIBS;
@Slf4j
@Singleton
@@ -138,7 +139,7 @@ public class LibraryServiceImpl implements LibraryService {
return libInfoRecords;
}
- @Audit(action = INSTALL_COMPUTATIONAL_LIBS)
+ @Audit(action = INSTALL, type = 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);
@@ -151,7 +152,7 @@ public class LibraryServiceImpl implements LibraryService {
return uuid;
}
- @Audit(action = INSTALL_NOTEBOOK_LIBS)
+ @Audit(action = INSTALL, type = 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);
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 634022c..282106a 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
@@ -40,11 +40,13 @@ import java.util.Set;
import java.util.function.Supplier;
import java.util.stream.Collectors;
-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 com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.START;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.STOP;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.TERMINATE;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.UPDATE;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.EDGE_NODE;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.PROJECT;
import static java.util.stream.Collectors.toSet;
import static java.util.stream.Stream.concat;
@@ -114,76 +116,76 @@ public class ProjectServiceImpl implements ProjectService {
}
@BudgetLimited
- @Override
- public void create(UserInfo user, ProjectDTO projectDTO, @Project String resourceName) {
- if (!projectDAO.get(projectDTO.getName()).isPresent()) {
- projectDAO.create(projectDTO);
- createProjectOnCloud(user, projectDTO);
- } else {
- throw new ResourceConflictException("Project with passed name already exist in system");
- }
- }
+ @Override
+ public void create(UserInfo user, ProjectDTO projectDTO, @Project String resourceName) {
+ if (!projectDAO.get(projectDTO.getName()).isPresent()) {
+ projectDAO.create(projectDTO);
+ createProjectOnCloud(user, projectDTO);
+ } else {
+ throw new ResourceConflictException("Project with passed name already exist in system");
+ }
+ }
- @Override
- public ProjectDTO get(String name) {
- return projectDAO.get(name)
- .orElseThrow(projectNotFound());
- }
+ @Override
+ public ProjectDTO get(String name) {
+ return projectDAO.get(name)
+ .orElseThrow(projectNotFound());
+ }
- @Audit(action = TERMINATE_EDGE_NODE)
- @Override
- 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);
- }
+ @Audit(action = TERMINATE, type = EDGE_NODE)
+ @Override
+ 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
- @Override
- public void terminateEndpoint(@User UserInfo userInfo, List<String> endpoints, @ResourceName @Project String name) {
- endpoints.forEach(endpoint -> terminateEndpoint(userInfo, endpoint, name));
- }
+ @ProjectAdmin
+ @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(@User UserInfo userInfo, @ResourceName String endpoint, @Project String name) {
- projectActionOnCloud(userInfo, name, START_PRJ_API, endpoint);
- projectDAO.updateEdgeStatus(name, endpoint, UserInstanceStatus.STARTING);
- }
+ @BudgetLimited
+ @Audit(action = START, type = EDGE_NODE)
+ @Override
+ 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
- @Override
- public void start(@User UserInfo userInfo, List<String> endpoints, @Project String name) {
- endpoints.forEach(endpoint -> start(userInfo, endpoint, name));
- }
+ @ProjectAdmin
+ @Override
+ public void start(@User UserInfo userInfo, List<String> endpoints, @Project String name) {
+ endpoints.forEach(endpoint -> start(userInfo, endpoint, name));
+ }
- @Audit(action = STOP_EDGE_NODE)
+ @Audit(action = STOP, type = EDGE_NODE)
@Override
public void stop(@User UserInfo userInfo, @ResourceName String endpoint, @Project String name, @Info String auditInfo) {
projectActionOnCloud(userInfo, name, STOP_PRJ_API, endpoint);
projectDAO.updateEdgeStatus(name, endpoint, UserInstanceStatus.STOPPING);
}
- @ProjectAdmin
- @Override
- public void stopWithResources(@User UserInfo userInfo, List<String> endpoints, @ResourceName @Project String projectName) {
- List<ProjectEndpointDTO> endpointDTOs = get(projectName)
- .getEndpoints()
- .stream()
- .filter(projectEndpointDTO -> endpoints.contains(projectEndpointDTO.getName()))
- .collect(Collectors.toList());
- checkProjectRelatedResourcesInProgress(projectName, endpointDTOs, STOP_ACTION);
+ @ProjectAdmin
+ @Override
+ public void stopWithResources(@User UserInfo userInfo, List<String> endpoints, @ResourceName @Project String projectName) {
+ List<ProjectEndpointDTO> endpointDTOs = get(projectName)
+ .getEndpoints()
+ .stream()
+ .filter(projectEndpointDTO -> endpoints.contains(projectEndpointDTO.getName()))
+ .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));
+ 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()
+ exploratoryDAO.fetchRunningExploratoryFieldsForProject(projectName,
+ endpointDTOs
+ .stream()
.map(ProjectEndpointDTO::getName)
.collect(Collectors.toList()))
.forEach(e -> exploratoryService.stop(userInfo, e.getUser(), projectName, e.getExploratoryName(), null));
@@ -203,7 +205,7 @@ public class ProjectServiceImpl implements ProjectService {
updateProject(userInfo, projectName, projectDTO, project, newEndpoints, projectUpdateAudit);
}
- @Audit(action = UPDATE_PROJECT)
+ @Audit(action = UPDATE, type = PROJECT)
public void updateProject(@User UserInfo userInfo, @Project @ResourceName String projectName, UpdateProjectDTO projectDTO, ProjectDTO project, Set<String> newEndpoints,
@Info String projectAudit) {
final List<ProjectEndpointDTO> endpointsToBeCreated = newEndpoints
@@ -216,71 +218,71 @@ public class ProjectServiceImpl implements ProjectService {
endpointsToBeCreated.forEach(e -> createEndpoint(userInfo, projectName, project, e.getName()));
}
- @Override
- public void updateBudget(UserInfo userInfo, List<UpdateProjectBudgetDTO> dtos) {
- final List<ProjectDTO> projects = dtos
- .stream()
- .filter(dto -> Objects.nonNull(dto.getBudget()))
- .map(dto -> ProjectDTO.builder().name(dto.getProject()).budget(dto.getBudget()).build())
- .collect(Collectors.toList());
+ @Override
+ public void updateBudget(UserInfo userInfo, List<UpdateProjectBudgetDTO> dtos) {
+ final List<ProjectDTO> projects = dtos
+ .stream()
+ .filter(dto -> Objects.nonNull(dto.getBudget()))
+ .map(dto -> ProjectDTO.builder().name(dto.getProject()).budget(dto.getBudget()).build())
+ .collect(Collectors.toList());
- projects.forEach(p -> updateBudget(userInfo, p.getName(), p.getBudget(), getUpdateBudgetAudit(p)));
- }
+ projects.forEach(p -> updateBudget(userInfo, p.getName(), p.getBudget(), getUpdateBudgetAudit(p)));
+ }
- @Audit(action = UPDATE_PROJECT)
+ @Audit(action = UPDATE, type = PROJECT)
public void updateBudget(@User UserInfo userInfo, @Project @ResourceName String name, Integer budget, @Info String updateBudgetAudit) {
projectDAO.updateBudget(name, budget);
}
- @Override
- public boolean isAnyProjectAssigned(UserInfo userInfo) {
- final Set<String> userGroups = concat(userInfo.getRoles().stream(),
- userGroupDao.getUserGroups(userInfo.getName()).stream())
- .collect(toSet());
- return projectDAO.isAnyProjectAssigned(userGroups);
- }
+ @Override
+ public boolean isAnyProjectAssigned(UserInfo userInfo) {
+ final Set<String> userGroups = concat(userInfo.getRoles().stream(),
+ userGroupDao.getUserGroups(userInfo.getName()).stream())
+ .collect(toSet());
+ return projectDAO.isAnyProjectAssigned(userGroups);
+ }
- @Override
- public boolean checkExploratoriesAndComputationalProgress(String projectName, List<String> endpoints) {
- return exploratoryDAO.fetchProjectEndpointExploratoriesWhereStatusIn(projectName, endpoints, Arrays.asList(
- UserInstanceStatus.CREATING, UserInstanceStatus.STARTING, UserInstanceStatus.CREATING_IMAGE,
- UserInstanceStatus.CONFIGURING, UserInstanceStatus.RECONFIGURING, UserInstanceStatus.STOPPING,
- UserInstanceStatus.TERMINATING),
- UserInstanceStatus.CREATING, UserInstanceStatus.CONFIGURING, UserInstanceStatus.STARTING,
- UserInstanceStatus.RECONFIGURING, UserInstanceStatus.CREATING_IMAGE, UserInstanceStatus.STOPPING,
- UserInstanceStatus.TERMINATING).isEmpty();
- }
+ @Override
+ public boolean checkExploratoriesAndComputationalProgress(String projectName, List<String> endpoints) {
+ return exploratoryDAO.fetchProjectEndpointExploratoriesWhereStatusIn(projectName, endpoints, Arrays.asList(
+ UserInstanceStatus.CREATING, UserInstanceStatus.STARTING, UserInstanceStatus.CREATING_IMAGE,
+ UserInstanceStatus.CONFIGURING, UserInstanceStatus.RECONFIGURING, UserInstanceStatus.STOPPING,
+ UserInstanceStatus.TERMINATING),
+ UserInstanceStatus.CREATING, UserInstanceStatus.CONFIGURING, UserInstanceStatus.STARTING,
+ UserInstanceStatus.RECONFIGURING, UserInstanceStatus.CREATING_IMAGE, UserInstanceStatus.STOPPING,
+ UserInstanceStatus.TERMINATING).isEmpty();
+ }
- private void createProjectOnCloud(UserInfo user, ProjectDTO projectDTO) {
- try {
- 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 createProjectOnCloud(UserInfo user, ProjectDTO projectDTO) {
+ try {
+ 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);
+ }
+ }
- @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);
- requestId.put(user.getName(), uuid);
- }
+ @Audit(action = CREATE, type = 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);
+ requestId.put(user.getName(), uuid);
+ }
- private void projectActionOnCloud(UserInfo user, String projectName, String provisioningApiUri, String endpoint) {
- try {
- EndpointDTO endpointDTO = endpointService.get(endpoint);
- String uuid = provisioningService.post(endpointDTO.getUrl() + provisioningApiUri, user.getAccessToken(),
- requestBuilder.newProjectAction(user, projectName, endpointDTO), String.class);
- requestId.put(user.getName(), uuid);
- } catch (Exception e) {
- log.error("Can not terminate project due to: {}", e.getMessage());
- projectDAO.updateStatus(projectName, ProjectDTO.Status.FAILED);
- }
- }
+ private void projectActionOnCloud(UserInfo user, String projectName, String provisioningApiUri, String endpoint) {
+ try {
+ EndpointDTO endpointDTO = endpointService.get(endpoint);
+ String uuid = provisioningService.post(endpointDTO.getUrl() + provisioningApiUri, user.getAccessToken(),
+ requestBuilder.newProjectAction(user, projectName, endpointDTO), String.class);
+ requestId.put(user.getName(), uuid);
+ } catch (Exception e) {
+ log.error("Can not terminate project due to: {}", e.getMessage());
+ projectDAO.updateStatus(projectName, ProjectDTO.Status.FAILED);
+ }
+ }
- private void checkProjectRelatedResourcesInProgress(String projectName, List<ProjectEndpointDTO> endpoints, String action) {
+ private void checkProjectRelatedResourcesInProgress(String projectName, List<ProjectEndpointDTO> endpoints, String action) {
boolean edgeProgress = endpoints
.stream().anyMatch(e ->
Arrays.asList(UserInstanceStatus.CREATING, UserInstanceStatus.STARTING, UserInstanceStatus.STOPPING,
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImpl.java
index 5b465f6..e822090 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImpl.java
@@ -28,7 +28,6 @@ import com.epam.dlab.backendapi.dao.ComputationalDAO;
import com.epam.dlab.backendapi.dao.EnvDAO;
import com.epam.dlab.backendapi.dao.ExploratoryDAO;
import com.epam.dlab.backendapi.dao.SchedulerJobDAO;
-import com.epam.dlab.backendapi.domain.AuditActionEnum;
import com.epam.dlab.backendapi.domain.RequestId;
import com.epam.dlab.backendapi.service.ComputationalService;
import com.epam.dlab.backendapi.service.ExploratoryService;
@@ -64,6 +63,9 @@ import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.COMPUTATIONAL_SCHEDULER;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.NOTEBOOK_SCHEDULER;
import static com.epam.dlab.constants.ServiceConsts.PROVISIONING_SERVICE_NAME;
import static com.epam.dlab.dto.UserInstanceStatus.CONFIGURING;
import static com.epam.dlab.dto.UserInstanceStatus.CREATING;
@@ -109,60 +111,60 @@ public class SchedulerJobServiceImpl implements SchedulerJobService {
private RequestId requestId;
@Inject
- @Named(PROVISIONING_SERVICE_NAME)
- private RESTService provisioningService;
-
- @Override
- public SchedulerJobDTO fetchSchedulerJobForUserAndExploratory(String user, String project, String exploratoryName) {
- return schedulerJobDAO.fetchSingleSchedulerJobByUserAndExploratory(user, project, exploratoryName)
- .orElseThrow(() -> new ResourceNotFoundException(String.format(SCHEDULER_NOT_FOUND_MSG, user,
- exploratoryName)));
- }
+ @Named(PROVISIONING_SERVICE_NAME)
+ private RESTService provisioningService;
+
+ @Override
+ public SchedulerJobDTO fetchSchedulerJobForUserAndExploratory(String user, String project, String exploratoryName) {
+ return schedulerJobDAO.fetchSingleSchedulerJobByUserAndExploratory(user, project, exploratoryName)
+ .orElseThrow(() -> new ResourceNotFoundException(String.format(SCHEDULER_NOT_FOUND_MSG, user,
+ exploratoryName)));
+ }
- @Override
- public SchedulerJobDTO fetchSchedulerJobForComputationalResource(String user, String project, String exploratoryName,
- String computationalName) {
- return schedulerJobDAO.fetchSingleSchedulerJobForCluster(user, project, exploratoryName, computationalName)
- .orElseThrow(() -> new ResourceNotFoundException(String.format(SCHEDULER_NOT_FOUND_MSG, user,
- exploratoryName) + " with computational resource " + computationalName));
- }
+ @Override
+ public SchedulerJobDTO fetchSchedulerJobForComputationalResource(String user, String project, String exploratoryName,
+ String computationalName) {
+ return schedulerJobDAO.fetchSingleSchedulerJobForCluster(user, project, exploratoryName, computationalName)
+ .orElseThrow(() -> new ResourceNotFoundException(String.format(SCHEDULER_NOT_FOUND_MSG, user,
+ exploratoryName) + " with computational resource " + computationalName));
+ }
- @Audit(action = AuditActionEnum.CREATE_NOTEBOOK_SCHEDULER)
- @Override
- public void updateExploratorySchedulerData(@User UserInfo user, @Project String project, @ResourceName String exploratoryName, SchedulerJobDTO dto) {
- validateExploratoryStatus(user.getName(), project, exploratoryName);
- populateDefaultSchedulerValues(dto);
- log.debug("Updating exploratory {} for user {} with new scheduler job data: {}...", exploratoryName, user,
- dto);
- exploratoryDAO.updateSchedulerDataForUserAndExploratory(user.getName(), project, exploratoryName, dto);
-
- if (!dto.inactivityScheduler() && dto.isSyncStartRequired()) {
- shareSchedulerJobDataToSparkClusters(user.getName(), project, exploratoryName, dto);
- } else if (!dto.inactivityScheduler()) {
- computationalDAO.updateSchedulerSyncFlag(user.getName(), project, exploratoryName, dto.isSyncStartRequired());
- }
- }
+ @Audit(action = CREATE, type = NOTEBOOK_SCHEDULER)
+ @Override
+ public void updateExploratorySchedulerData(@User UserInfo user, @Project String project, @ResourceName String exploratoryName, SchedulerJobDTO dto) {
+ validateExploratoryStatus(user.getName(), project, exploratoryName);
+ populateDefaultSchedulerValues(dto);
+ log.debug("Updating exploratory {} for user {} with new scheduler job data: {}...", exploratoryName, user,
+ dto);
+ exploratoryDAO.updateSchedulerDataForUserAndExploratory(user.getName(), project, exploratoryName, dto);
+
+ if (!dto.inactivityScheduler() && dto.isSyncStartRequired()) {
+ shareSchedulerJobDataToSparkClusters(user.getName(), project, exploratoryName, dto);
+ } else if (!dto.inactivityScheduler()) {
+ computationalDAO.updateSchedulerSyncFlag(user.getName(), project, exploratoryName, dto.isSyncStartRequired());
+ }
+ }
- @Audit(action = AuditActionEnum.CREATE_COMPUTATIONAL_SCHEDULER)
- @Override
- public void updateComputationalSchedulerData(@User UserInfo user, @Project String project, String exploratoryName, @ResourceName String computationalName, SchedulerJobDTO dto) {
- validateExploratoryStatus(user.getName(), project, exploratoryName);
- validateComputationalStatus(user.getName(), project, exploratoryName, computationalName);
- populateDefaultSchedulerValues(dto);
- log.debug("Updating computational resource {} affiliated with exploratory {} for user {} with new scheduler " +
- "job data {}...", computationalName, exploratoryName, user, dto);
- computationalDAO.updateSchedulerDataForComputationalResource(user.getName(), project, exploratoryName, computationalName, dto);
- }
+ @Audit(action = CREATE, type = COMPUTATIONAL_SCHEDULER)
+ @Override
+ public void updateComputationalSchedulerData(@User UserInfo user, @Project String project, String exploratoryName, @ResourceName String computationalName, SchedulerJobDTO dto) {
+ validateExploratoryStatus(user.getName(), project, exploratoryName);
+ validateComputationalStatus(user.getName(), project, exploratoryName, computationalName);
+ populateDefaultSchedulerValues(dto);
+ log.debug("Updating computational resource {} affiliated with exploratory {} for user {} with new scheduler " +
+ "job data {}...", computationalName, exploratoryName, user, dto);
+ computationalDAO.updateSchedulerDataForComputationalResource(user.getName(), project, exploratoryName, computationalName, dto);
+ }
- @Override
- public void stopComputationalByScheduler() {
- getComputationalSchedulersForStopping(OffsetDateTime.now(), true)
- .forEach(this::stopComputational);
- }
+ @Override
+ public void stopComputationalByScheduler() {
+ getComputationalSchedulersForStopping(OffsetDateTime.now(), true)
+ .forEach(this::stopComputational);
+ }
- @Override
- public void stopExploratoryByScheduler() {
- getExploratorySchedulersForStopping(OffsetDateTime.now(), true)
+ @Override
+ public void stopExploratoryByScheduler() {
+ getExploratorySchedulersForStopping(OffsetDateTime.now(), true)
.forEach(this::stopExploratory);
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/UserGroupServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/UserGroupServiceImpl.java
index 9069d35..f4d7c5c 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/UserGroupServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/UserGroupServiceImpl.java
@@ -50,9 +50,10 @@ import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE_GROUP;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.DELETE_GROUP;
-import static com.epam.dlab.backendapi.domain.AuditActionEnum.UPDATE_GROUP;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.CREATE;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.DELETE;
+import static com.epam.dlab.backendapi.domain.AuditActionEnum.UPDATE;
+import static com.epam.dlab.backendapi.domain.AuditResourceTypeEnum.GROUP;
@Singleton
@Slf4j
@@ -83,7 +84,7 @@ public class UserGroupServiceImpl implements UserGroupService {
this.configuration = configuration;
}
- @Audit(action = CREATE_GROUP)
+ @Audit(action = CREATE, type = GROUP)
@Override
public void createGroup(@User UserInfo userInfo, @ResourceName String group, Set<String> roleIds, Set<String> users) {
checkAnyRoleFound(roleIds, userRoleDao.addGroupToRole(Collections.singleton(group), roleIds));
@@ -109,7 +110,7 @@ public class UserGroupServiceImpl implements UserGroupService {
}
}
- @Audit(action = DELETE_GROUP)
+ @Audit(action = DELETE, type = GROUP)
@Override
public void removeGroup(@User UserInfo userInfo, @ResourceName String groupId) {
if (projectDAO.getProjectsWithEndpointStatusNotIn(UserInstanceStatus.TERMINATED,
@@ -169,7 +170,8 @@ public class UserGroupServiceImpl implements UserGroupService {
AuditDTO auditDTO = AuditDTO.builder()
.user(user)
.resourceName(group)
- .action(UPDATE_GROUP)
+ .action(UPDATE)
+ .type(GROUP)
.info(auditInfo)
.build();
auditService.save(auditDTO);
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 fc619d2..749a1ef 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
@@ -63,17 +63,17 @@ import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class EnvironmentServiceImplTest {
- private static final String AUDIT_QUOTA_MESSAGE = "Billing quota reached";
- private static final String AUDIT_MESSAGE = "Notebook name: %s";
- private static final String DLAB_SYSTEM_USER = "DLab system user";
- private static final String USER = "test";
- private static final String EXPLORATORY_NAME_1 = "expName1";
- private static final String EXPLORATORY_NAME_2 = "expName2";
- private static final String TOKEN = "token";
- private static final String UUID = "213-12312-321";
- private static final String PROJECT_NAME = "projectName";
- private static final String ENDPOINT_NAME = "endpointName";
- private static final String ADMIN = "admin";
+ private static final String AUDIT_QUOTA_MESSAGE = "Billing quota reached";
+ private static final String AUDIT_MESSAGE = "Notebook name %s";
+ private static final String DLAB_SYSTEM_USER = "DLab system user";
+ private static final String USER = "test";
+ private static final String EXPLORATORY_NAME_1 = "expName1";
+ private static final String EXPLORATORY_NAME_2 = "expName2";
+ private static final String TOKEN = "token";
+ private static final String UUID = "213-12312-321";
+ private static final String PROJECT_NAME = "projectName";
+ private static final String ENDPOINT_NAME = "endpointName";
+ private static final String ADMIN = "admin";
@Mock
private EnvDAO envDAO;
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImplTest.java
index eee6d0c..a821e7c 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImplTest.java
@@ -20,6 +20,7 @@
package com.epam.dlab.backendapi.service.impl;
import com.epam.dlab.auth.UserInfo;
+import com.epam.dlab.backendapi.conf.SelfServiceApplicationConfiguration;
import com.epam.dlab.backendapi.dao.ComputationalDAO;
import com.epam.dlab.backendapi.dao.ExploratoryDAO;
import com.epam.dlab.backendapi.dao.GitCredsDAO;
@@ -104,31 +105,32 @@ public class ExploratoryServiceImplTest {
private ComputationalDAO computationalDAO;
@Mock
private GitCredsDAO gitCredsDAO;
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
@Mock
- private RESTService provisioningService;
- @Mock
- private RequestBuilder requestBuilder;
- @Mock
- private RequestId requestId;
- @Mock
- private TagService tagService;
- @Mock
- private EndpointService endpointService;
-
- @InjectMocks
- private ExploratoryServiceImpl exploratoryService;
-
- @Rule
- public ExpectedException expectedException = ExpectedException.none();
-
- @Before
- public void setUp() {
- userInfo = getUserInfo();
- userInstance = getUserInstanceDto();
- }
+ private RESTService provisioningService;
+ @Mock
+ private RequestBuilder requestBuilder;
+ @Mock
+ private RequestId requestId;
+ @Mock
+ private TagService tagService;
+ @Mock
+ private EndpointService endpointService;
+ @Mock
+ private SelfServiceApplicationConfiguration configuration;
+ @InjectMocks
+ private ExploratoryServiceImpl exploratoryService;
+
+ @Before
+ public void setUp() {
+ when(configuration.isAuditEnabled()).thenReturn(false);
+ userInfo = getUserInfo();
+ userInstance = getUserInstanceDto();
+ }
- @Test
- public void start() {
+ @Test
+ public void start() {
when(endpointService.get(anyString())).thenReturn(endpointDTO());
when(exploratoryDAO.updateExploratoryStatus(any(StatusEnvBaseDTO.class))).thenReturn(mock(UpdateResult.class));
when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString(), anyString())).thenReturn(userInstance);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org