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 <olegfuk...@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-unsubscr...@dlab.apache.org For additional commands, e-mail: commits-h...@dlab.apache.org