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

Reply via email to