You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by of...@apache.org on 2020/06/11 12:00:05 UTC

[incubator-dlab] branch audit updated: Code refactoring

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 5973a0e  Code refactoring
5973a0e is described below

commit 5973a0e8c5b2c80c7ab21c6ba0e823aa1de4d662
Author: Oleh Fuks <ol...@gmail.com>
AuthorDate: Thu Jun 11 14:59:50 2020 +0300

    Code refactoring
---
 .../dlab/backendapi/domain/AuditCreateDTO.java     |   4 +-
 .../com/epam/dlab/backendapi/domain/AuditDTO.java  |   3 +-
 .../backendapi/interceptor/AuditInterceptor.java   |  12 +-
 .../resources/aws/ComputationalResourceAws.java    |   5 +-
 .../azure/ComputationalResourceAzure.java          |   5 +-
 .../resources/gcp/ComputationalResourceGcp.java    |   5 +-
 .../backendapi/service/ComputationalService.java   |  40 +++---
 .../backendapi/service/ExploratoryService.java     |   6 +-
 .../dlab/backendapi/service/ProjectService.java    |   2 +-
 .../service/impl/ComputationalServiceImpl.java     | 134 +++++++++----------
 .../service/impl/EnvironmentServiceImpl.java       |  16 +--
 .../service/impl/ExploratoryServiceImpl.java       |  34 ++---
 .../service/impl/ProjectServiceImpl.java           | 144 ++++++++++-----------
 .../service/impl/SchedulerJobServiceImpl.java      |  61 +++++----
 .../resources/ExploratoryResourceTest.java         |  89 +++++++------
 .../service/impl/ComputationalServiceImplTest.java |  32 ++---
 .../service/impl/EnvironmentServiceImplTest.java   |  49 ++++---
 .../service/impl/SchedulerJobServiceImplTest.java  | 134 +++++++++----------
 18 files changed, 380 insertions(+), 395 deletions(-)

diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditCreateDTO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditCreateDTO.java
index b99b909..1deb5ae 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditCreateDTO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/AuditCreateDTO.java
@@ -24,8 +24,6 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import org.hibernate.validator.constraints.NotBlank;
 
-import java.util.List;
-
 
 @Data
 @JsonIgnoreProperties(ignoreUnknown = true)
@@ -33,5 +31,5 @@ public class AuditCreateDTO {
     @NotBlank(message = "field cannot be empty")
     @JsonProperty("resource_name")
     private final String resourceName;
-    private final List<String> info;
+    private final String info;
 }
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 f01237c..d7a2d98 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
@@ -24,7 +24,6 @@ import lombok.Builder;
 import lombok.Data;
 
 import java.util.Date;
-import java.util.List;
 
 @Data
 @Builder
@@ -34,6 +33,6 @@ public class AuditDTO {
     private final AuditActionEnum action;
     private final String project;
     private final String resourceName;
-    private final List<String> info;
+    private final String info;
     private Date timestamp;
 }
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 e4def6c..a5a9166 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
@@ -38,8 +38,6 @@ import org.apache.commons.lang3.StringUtils;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.lang.reflect.Parameter;
-import java.util.Collections;
-import java.util.List;
 import java.util.Objects;
 import java.util.stream.IntStream;
 
@@ -56,14 +54,14 @@ public class AuditInterceptor implements MethodInterceptor {
         final AuditActionEnum action = getAuditActionEnum(method);
         final String project = getProject(mi, parameters);
         final String resourceName = getResourceName(mi, parameters);
-        final List<String> infoMap = getInfo(mi, parameters);
+        final String auditInfo = getInfo(mi, parameters);
 
         AuditDTO auditCreateDTO = AuditDTO.builder()
                 .user(user)
                 .action(action)
                 .project(project)
                 .resourceName(resourceName)
-                .info(infoMap)
+                .info(auditInfo)
                 .build();
         auditService.save(auditCreateDTO);
         return mi.proceed();
@@ -102,11 +100,11 @@ public class AuditInterceptor implements MethodInterceptor {
                 .orElseThrow(() -> new DlabException("Resource name parameter wanted!"));
     }
 
-    private List<String> getInfo(MethodInvocation mi, Parameter[] parameters) {
+    private String getInfo(MethodInvocation mi, Parameter[] parameters) {
         return IntStream.range(0, parameters.length)
                 .filter(i -> Objects.nonNull(parameters[i].getAnnotation(Info.class)) && Objects.nonNull(mi.getArguments()[i]))
-                .mapToObj(i -> (List<String>) mi.getArguments()[i])
+                .mapToObj(i -> (String) mi.getArguments()[i])
                 .findAny()
-                .orElseGet(Collections::emptyList);
+                .orElse(StringUtils.EMPTY);
     }
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
index a6f2f97..9c82f04 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
@@ -48,7 +48,6 @@ import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import java.util.Collections;
 import java.util.List;
 
 import static com.epam.dlab.dto.UserInstanceStatus.CREATING;
@@ -265,7 +264,7 @@ public class ComputationalResourceAws implements ComputationalAPI {
         }
     }
 
-    private List<String> getAuditInfo(String exploratoryName) {
-        return Collections.singletonList(String.format(AUDIT_MESSAGE, exploratoryName));
+    private String getAuditInfo(String exploratoryName) {
+        return String.format(AUDIT_MESSAGE, exploratoryName);
     }
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/azure/ComputationalResourceAzure.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/azure/ComputationalResourceAzure.java
index e063d26..89dd91c 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/azure/ComputationalResourceAzure.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/azure/ComputationalResourceAzure.java
@@ -42,7 +42,6 @@ import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import java.util.Collections;
 import java.util.List;
 
 import static com.epam.dlab.rest.contracts.ComputationalAPI.AUDIT_MESSAGE;
@@ -174,7 +173,7 @@ public class ComputationalResourceAzure {
         return Response.ok(computationalService.getClusterConfig(userInfo, projectName, exploratoryName, computationalName)).build();
     }
 
-    private List<String> getAuditInfo(String exploratoryName) {
-        return Collections.singletonList(String.format(AUDIT_MESSAGE, exploratoryName));
+    private String getAuditInfo(String exploratoryName) {
+        return String.format(AUDIT_MESSAGE, exploratoryName);
     }
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
index 336629b..c5a9b6b 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
@@ -48,7 +48,6 @@ import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import java.util.Collections;
 import java.util.List;
 
 import static com.epam.dlab.dto.UserInstanceStatus.CREATING;
@@ -252,7 +251,7 @@ public class ComputationalResourceGcp implements ComputationalAPI {
         }
     }
 
-    private List<String> getAuditInfo(String exploratoryName) {
-        return Collections.singletonList(String.format(AUDIT_MESSAGE, exploratoryName));
+    private String getAuditInfo(String exploratoryName) {
+        return String.format(AUDIT_MESSAGE, exploratoryName);
     }
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ComputationalService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ComputationalService.java
index b9071b9..77722dd 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ComputationalService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ComputationalService.java
@@ -33,36 +33,36 @@ public interface ComputationalService {
 	ComputationalTemplatesDTO getComputationalNamesAndTemplates(UserInfo user, String project, String endpoint);
 
 	/**
-	 * Asynchronously triggers creation of Spark cluster
-	 *
-	 * @param userInfo     user authentication info
-	 * @param resourceName name of computational resource
-	 * @param form         input cluster parameters
-	 * @param auditInfo    additional info for audit
-	 * @return <code>true</code> if action is successfully triggered, <code>false</code>false if cluster with the same
-	 * name already exists
-	 * @throws IllegalArgumentException if input parameters exceed limits or docker image name is malformed
-	 */
-	boolean createSparkCluster(UserInfo userInfo, String resourceName, SparkStandaloneClusterCreateForm form, String project, List<String> auditInfo);
+     * Asynchronously triggers creation of Spark cluster
+     *
+     * @param userInfo     user authentication info
+     * @param resourceName name of computational resource
+     * @param form         input cluster parameters
+     * @param auditInfo    additional info for audit
+     * @return <code>true</code> if action is successfully triggered, <code>false</code>false if cluster with the same
+     * name already exists
+     * @throws IllegalArgumentException if input parameters exceed limits or docker image name is malformed
+     */
+    boolean createSparkCluster(UserInfo userInfo, String resourceName, SparkStandaloneClusterCreateForm form, String project, String auditInfo);
 
-	/**
-	 * Asynchronously triggers termination of computational resources
-	 *
-	 * @param userInfo          user info of authenticated user
-	 * @param resourceCreator   username of resource creator
+    /**
+     * Asynchronously triggers termination of computational resources
+     *
+     * @param userInfo          user info of authenticated user
+     * @param resourceCreator   username of resource creator
      * @param project           project name
      * @param exploratoryName   name of exploratory where to terminate computational resources with <code>computationalName</code>
      * @param computationalName computational name
      * @param auditInfo         additional info for audit
      */
-    void terminateComputational(UserInfo userInfo, String resourceCreator, String project, String exploratoryName, String computationalName, List<String> auditInfo);
+    void terminateComputational(UserInfo userInfo, String resourceCreator, String project, String exploratoryName, String computationalName, String auditInfo);
 
     boolean createDataEngineService(UserInfo userInfo, String resourceName, ComputationalCreateFormDTO formDTO, UserComputationalResource
-            computationalResource, String project, List<String> auditInfo);
+            computationalResource, String project, String auditInfo);
 
-    void stopSparkCluster(UserInfo userInfo, String resourceCreator, String project, String exploratoryName, String computationalName, List<String> auditInfo);
+    void stopSparkCluster(UserInfo userInfo, String resourceCreator, String project, String exploratoryName, String computationalName, String auditInfo);
 
-    void startSparkCluster(UserInfo userInfo, String exploratoryName, String computationalName, String project, List<String> auditInfo);
+    void startSparkCluster(UserInfo userInfo, String exploratoryName, String computationalName, String project, String auditInfo);
 
     void updateSparkClusterConfig(UserInfo userInfo, String project, String exploratoryName, String computationalName,
                                   List<ClusterConfig> config);
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ExploratoryService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ExploratoryService.java
index 7caa8f7..6b54473 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ExploratoryService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ExploratoryService.java
@@ -34,11 +34,11 @@ import java.util.Set;
 
 public interface ExploratoryService {
 
-    String start(UserInfo userInfo, String exploratoryName, String project, List<String> auditInfo);
+    String start(UserInfo userInfo, String exploratoryName, String project, String auditInfo);
 
-    String stop(UserInfo userInfo, String resourceCreator, String project, String exploratoryName, List<String> auditInfo);
+    String stop(UserInfo userInfo, String resourceCreator, String project, String exploratoryName, String auditInfo);
 
-    String terminate(UserInfo userInfo, String resourceCreator, String project, String exploratoryName, List<String> auditInfo);
+    String terminate(UserInfo userInfo, String resourceCreator, String project, String exploratoryName, String auditInfo);
 
     String create(UserInfo userInfo, Exploratory exploratory, String project, String exploratoryName);
 
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
index ad75f8a..e6745db 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
@@ -28,7 +28,7 @@ public interface ProjectService {
 
     void start(UserInfo userInfo, List<String> endpoints, String name);
 
-    void stop(UserInfo userInfo, String endpoint, String name, List<String> auditInfo);
+    void stop(UserInfo userInfo, String endpoint, String name, String auditInfo);
 
     void stopWithResources(UserInfo userInfo, List<String> endpoints, String projectName);
 
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 2895cbd..0f24936 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
@@ -152,20 +152,20 @@ 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,
-									  @Info List<String> auditInfo) {
-		final ProjectDTO projectDTO = projectService.get(project);
-		final UserInstanceDTO instance =
-				exploratoryDAO.fetchExploratoryFields(userInfo.getName(), project, form.getNotebookName());
-		final SparkStandaloneClusterResource compResource = createInitialComputationalResource(form);
-		compResource.setTags(tagService.getResourceTags(userInfo, instance.getEndpoint(), project,
-				form.getCustomTag()));
-		if (computationalDAO.addComputational(userInfo.getName(), form.getNotebookName(), project, compResource)) {
-			try {
-				EndpointDTO endpointDTO = endpointService.get(instance.getEndpoint());
-				ComputationalBase<?> dto = requestBuilder.newComputationalCreate(userInfo, projectDTO, instance, form, endpointDTO);
+    @Audit(action = CREATE_DATA_ENGINE)
+    @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 =
+                exploratoryDAO.fetchExploratoryFields(userInfo.getName(), project, form.getNotebookName());
+        final SparkStandaloneClusterResource compResource = createInitialComputationalResource(form);
+        compResource.setTags(tagService.getResourceTags(userInfo, instance.getEndpoint(), project,
+                form.getCustomTag()));
+        if (computationalDAO.addComputational(userInfo.getName(), form.getNotebookName(), project, compResource)) {
+            try {
+                EndpointDTO endpointDTO = endpointService.get(instance.getEndpoint());
+                ComputationalBase<?> dto = requestBuilder.newComputationalCreate(userInfo, projectDTO, instance, form, endpointDTO);
 
 				String uuid =
 						provisioningService.post(endpointDTO.getUrl() + ComputationalAPI.COMPUTATIONAL_CREATE_SPARK,
@@ -187,19 +187,19 @@ 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 List<String> auditInfo) {
-		try {
-			updateComputationalStatus(resourceCreator, project, exploratoryName, computationalName, TERMINATING);
+    @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);
 
-			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());
-			ComputationalTerminateDTO dto = requestBuilder.newComputationalTerminate(resourceCreator, userInstanceDTO, compResource, endpointDTO);
+            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))
 					.orElseThrow(UnsupportedOperationException::new);
@@ -215,21 +215,21 @@ 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 List<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) {
+    @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);
+
+        if (isAdded) {
 			try {
 				EndpointDTO endpointDTO = endpointService.get(instance.getEndpoint());
 				String uuid =
@@ -255,19 +255,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 List<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_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,20 +275,20 @@ 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 List<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_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));
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java
index d7fdef1..dff0a0b 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java
@@ -44,7 +44,6 @@ import lombok.extern.slf4j.Slf4j;
 
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Stream;
@@ -137,7 +136,7 @@ public class EnvironmentServiceImpl implements EnvironmentService {
                 .stream()
                 .filter(e -> UserInstanceStatus.RUNNING == e.getStatus())
                 .forEach(endpoint -> projectService.stop(securityService.getServiceAccountInfo(DLAB_SYSTEM_USER),
-                        endpoint.getName(), project, Collections.singletonList(AUDIT_QUOTA_MESSAGE)));
+                        endpoint.getName(), project, AUDIT_QUOTA_MESSAGE));
 	}
 
 	@ProjectAdmin
@@ -150,7 +149,7 @@ public class EnvironmentServiceImpl implements EnvironmentService {
     @Override
     public void stopComputational(@User UserInfo userInfo, String user, @Project String project, String exploratoryName, String computationalName) {
         computationalService.stopSparkCluster(userInfo, user, project, exploratoryName, computationalName,
-                Collections.singletonList(String.format(AUDIT_MESSAGE, exploratoryName)));
+                String.format(AUDIT_MESSAGE, exploratoryName));
     }
 
 	@ProjectAdmin
@@ -162,9 +161,8 @@ public class EnvironmentServiceImpl implements EnvironmentService {
 	@ProjectAdmin
 	@Override
 	public void terminateComputational(@User UserInfo userInfo, String user, @Project String project, String exploratoryName, String computationalName) {
-		computationalService.terminateComputational(userInfo, user, project, exploratoryName, computationalName,
-				Collections.singletonList(String.format(AUDIT_MESSAGE, exploratoryName)));
-	}
+        computationalService.terminateComputational(userInfo, user, project, exploratoryName, computationalName, String.format(AUDIT_MESSAGE, exploratoryName));
+    }
 
 	private UserDTO toUserDTO(String u, UserDTO.Status status) {
 		return new UserDTO(u, settingsDAO.getAllowedBudget(u).orElse(null), status);
@@ -184,9 +182,9 @@ public class EnvironmentServiceImpl implements EnvironmentService {
 	}
 
 	private void stopNotebookWithServiceAccount(UserInstanceDTO instance) {
-		final UserInfo userInfo = securityService.getServiceAccountInfo(DLAB_SYSTEM_USER);
-		exploratoryService.stop(userInfo, instance.getUser(), instance.getProject(), instance.getExploratoryName(), Collections.singletonList(AUDIT_QUOTA_MESSAGE));
-	}
+        final UserInfo userInfo = securityService.getServiceAccountInfo(DLAB_SYSTEM_USER);
+        exploratoryService.stop(userInfo, instance.getUser(), instance.getProject(), instance.getExploratoryName(), AUDIT_QUOTA_MESSAGE);
+    }
 
 	private List<UserResourceInfo> getProjectEnv(ProjectDTO projectDTO, List<UserInstanceDTO> allInstances) {
 		final Stream<UserResourceInfo> userResources = allInstances
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 cb44f72..8e60635 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
@@ -116,23 +116,23 @@ public class ExploratoryServiceImpl implements ExploratoryService {
 	}
 
 	@BudgetLimited
-	@Audit(action = START_NOTEBOOK)
-	@Override
-	public String start(@User UserInfo userInfo, @ResourceName String exploratoryName, @Project String project, @Info List<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 List<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 List<String> auditInfo) {
-		return action(userInfo, resourceCreator, project, exploratoryName, EXPLORATORY_TERMINATE, TERMINATING);
-	}
+    @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);
+    }
 
 	@BudgetLimited
 	@Audit(action = CREATE_NOTEBOOK)
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 106c608..b1156f6 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
@@ -32,9 +32,7 @@ import com.google.inject.Inject;
 import com.google.inject.name.Named;
 import lombok.extern.slf4j.Slf4j;
 
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
@@ -161,11 +159,11 @@ public class ProjectServiceImpl implements ProjectService {
 	}
 
 	@Audit(action = STOP_EDGE_NODE)
-	@Override
-	public void stop(@User UserInfo userInfo, @ResourceName String endpoint, @Project String name, @Info List<String> auditInfo) {
-		projectActionOnCloud(userInfo, name, STOP_PRJ_API, endpoint);
-		projectDAO.updateEdgeStatus(name, endpoint, UserInstanceStatus.STOPPING);
-	}
+    @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
@@ -194,29 +192,29 @@ public class ProjectServiceImpl implements ProjectService {
 	@ProjectAdmin
 	@Override
 	public void update(@User UserInfo userInfo, UpdateProjectDTO projectDTO, @Project String projectName) {
-		final ProjectDTO project = projectDAO.get(projectDTO.getName()).orElseThrow(projectNotFound());
-		final Set<String> endpoints = project.getEndpoints()
-				.stream()
-				.map(ProjectEndpointDTO::getName)
-				.collect(toSet());
-		final Set<String> newEndpoints = new HashSet<>(projectDTO.getEndpoints());
-		newEndpoints.removeAll(endpoints);
-		final List<String> projectAudit = updateProjectAudit(projectDTO, project, newEndpoints);
-		updateProject(userInfo, projectName, projectDTO, project, newEndpoints, projectAudit);
-	}
-
-	@Audit(action = UPDATE_PROJECT)
-	public void updateProject(@User UserInfo userInfo, @Project @ResourceName String projectName, UpdateProjectDTO projectDTO, ProjectDTO project, Set<String> newEndpoints,
-							  @Info List<String> projectAudit) {
-		final List<ProjectEndpointDTO> endpointsToBeCreated = newEndpoints
-				.stream()
-				.map(e -> new ProjectEndpointDTO(e, UserInstanceStatus.CREATING, null))
-				.collect(Collectors.toList());
-		project.getEndpoints().addAll(endpointsToBeCreated);
-		projectDAO.update(new ProjectDTO(project.getName(), projectDTO.getGroups(), project.getKey(),
-				project.getTag(), project.getBudget(), project.getEndpoints(), projectDTO.isSharedImageEnabled()));
-		endpointsToBeCreated.forEach(e -> createEndpoint(userInfo, projectName, project, e.getName()));
-	}
+        final ProjectDTO project = projectDAO.get(projectDTO.getName()).orElseThrow(projectNotFound());
+        final Set<String> endpoints = project.getEndpoints()
+                .stream()
+                .map(ProjectEndpointDTO::getName)
+                .collect(toSet());
+        final Set<String> newEndpoints = new HashSet<>(projectDTO.getEndpoints());
+        newEndpoints.removeAll(endpoints);
+        final String projectUpdateAudit = updateProjectAudit(projectDTO, project, newEndpoints);
+        updateProject(userInfo, projectName, projectDTO, project, newEndpoints, projectUpdateAudit);
+    }
+
+    @Audit(action = UPDATE_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
+                .stream()
+                .map(e -> new ProjectEndpointDTO(e, UserInstanceStatus.CREATING, null))
+                .collect(Collectors.toList());
+        project.getEndpoints().addAll(endpointsToBeCreated);
+        projectDAO.update(new ProjectDTO(project.getName(), projectDTO.getGroups(), project.getKey(),
+                project.getTag(), project.getBudget(), project.getEndpoints(), projectDTO.isSharedImageEnabled()));
+        endpointsToBeCreated.forEach(e -> createEndpoint(userInfo, projectName, project, e.getName()));
+    }
 
 	@Override
 	public void updateBudget(UserInfo userInfo, List<UpdateProjectBudgetDTO> dtos) {
@@ -229,10 +227,10 @@ public class ProjectServiceImpl implements ProjectService {
 		projects.forEach(p -> updateBudget(userInfo, p.getName(), p.getBudget(), getUpdateBudgetAudit(p)));
 	}
 
-	@Audit(action = UPDATE_PROJECT)
-	public void updateBudget(@User UserInfo userInfo, @Project @ResourceName String name, Integer budget, @Info List<String> updateBudgetAudit) {
-		projectDAO.updateBudget(name, budget);
-	}
+    @Audit(action = UPDATE_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) {
@@ -285,43 +283,43 @@ public class ProjectServiceImpl implements ProjectService {
 	private void checkProjectRelatedResourcesInProgress(String projectName, List<ProjectEndpointDTO> endpoints, String action) {
 		boolean edgeProgress = endpoints
 				.stream().anyMatch(e ->
-						Arrays.asList(UserInstanceStatus.CREATING, UserInstanceStatus.STARTING, UserInstanceStatus.STOPPING,
-								UserInstanceStatus.TERMINATING).contains(e.getStatus()));
-
-		List<String> endpointsName = endpoints.stream().map(ProjectEndpointDTO::getName).collect(Collectors.toList());
-		if (edgeProgress || !checkExploratoriesAndComputationalProgress(projectName, endpointsName)) {
-			throw new ResourceConflictException((String.format("Can not %s environment because one of project " +
-					"resource is in processing stage", action)));
-		}
-	}
-
-	private List<String> updateProjectAudit(UpdateProjectDTO projectDTO, ProjectDTO project, Set<String> newEndpoints) {
-		if (configuration.isAuditEnabled()) {
-			return null;
-		}
-		final List<String> audit = new ArrayList<>();
-		final Set<String> newGroups = new HashSet<>(projectDTO.getGroups());
-		newGroups.removeAll(project.getGroups());
-		final Set<String> removedGroups = new HashSet<>(project.getGroups());
-		removedGroups.removeAll(projectDTO.getGroups());
-
-		if (!newEndpoints.isEmpty()) {
-			audit.add(String.format(AUDIT_ADD_ENDPOINT, String.join(", ", newEndpoints)));
-		}
-		if (!newGroups.isEmpty()) {
-			audit.add(String.format(AUDIT_ADD_GROUP, String.join(", ", newGroups)));
-		}
-		if (!removedGroups.isEmpty()) {
-			audit.add(String.format(AUDIT_REMOVE_GROUP, String.join(", ", removedGroups)));
-		}
-		return audit;
-	}
-
-	private List<String> getUpdateBudgetAudit(ProjectDTO p) {
-		return Collections.singletonList(String.format(AUDIT_UPDATE_BUDGET, get(p.getName()).getBudget(), p.getBudget()));
-	}
-
-	private Supplier<ResourceNotFoundException> projectNotFound() {
-		return () -> new ResourceNotFoundException("Project with passed name not found");
-	}
+                        Arrays.asList(UserInstanceStatus.CREATING, UserInstanceStatus.STARTING, UserInstanceStatus.STOPPING,
+                                UserInstanceStatus.TERMINATING).contains(e.getStatus()));
+
+        List<String> endpointsName = endpoints.stream().map(ProjectEndpointDTO::getName).collect(Collectors.toList());
+        if (edgeProgress || !checkExploratoriesAndComputationalProgress(projectName, endpointsName)) {
+            throw new ResourceConflictException((String.format("Can not %s environment because one of project " +
+                    "resource is in processing stage", action)));
+        }
+    }
+
+    private String updateProjectAudit(UpdateProjectDTO projectDTO, ProjectDTO project, Set<String> newEndpoints) {
+        if (configuration.isAuditEnabled()) {
+            return null;
+        }
+        StringBuilder audit = new StringBuilder();
+        final Set<String> newGroups = new HashSet<>(projectDTO.getGroups());
+        newGroups.removeAll(project.getGroups());
+        final Set<String> removedGroups = new HashSet<>(project.getGroups());
+        removedGroups.removeAll(projectDTO.getGroups());
+
+        if (!newEndpoints.isEmpty()) {
+            audit.append(String.format(AUDIT_ADD_ENDPOINT, String.join(", ", newEndpoints)));
+        }
+        if (!newGroups.isEmpty()) {
+            audit.append(String.format(AUDIT_ADD_GROUP, String.join(", ", newGroups)));
+        }
+        if (!removedGroups.isEmpty()) {
+            audit.append(String.format(AUDIT_REMOVE_GROUP, String.join(", ", removedGroups)));
+        }
+        return audit.toString();
+    }
+
+    private String getUpdateBudgetAudit(ProjectDTO p) {
+        return String.format(AUDIT_UPDATE_BUDGET, get(p.getName()).getBudget(), p.getBudget());
+    }
+
+    private Supplier<ResourceNotFoundException> projectNotFound() {
+        return () -> new ResourceNotFoundException("Project with passed name not found");
+    }
 }
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 6033576..127c394 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
@@ -51,7 +51,6 @@ import java.time.LocalTime;
 import java.time.OffsetDateTime;
 import java.time.ZoneOffset;
 import java.time.temporal.ChronoUnit;
-import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
@@ -219,7 +218,7 @@ public class SchedulerJobServiceImpl implements SchedulerJobService {
         final String compName = job.getComputationalName();
         final String user = job.getUser();
         log.debug("Stopping exploratory {} computational {} for user {} by scheduler", expName, compName, user);
-        computationalService.stopSparkCluster(securityService.getServiceAccountInfo(user), user, project, expName, compName, Collections.singletonList(AUDIT_MESSAGE));
+        computationalService.stopSparkCluster(securityService.getServiceAccountInfo(user), user, project, expName, compName, AUDIT_MESSAGE);
     }
 
 	private void terminateComputational(SchedulerJobData job) {
@@ -228,16 +227,16 @@ public class SchedulerJobServiceImpl implements SchedulerJobService {
         final String compName = job.getComputationalName();
         final UserInfo userInfo = securityService.getServiceAccountInfo(user);
         log.debug("Terminating exploratory {} computational {} for user {} by scheduler", expName, compName, user);
-        computationalService.terminateComputational(userInfo, user, job.getProject(), expName, compName, Collections.singletonList(AUDIT_MESSAGE));
+        computationalService.terminateComputational(userInfo, user, job.getProject(), expName, compName, AUDIT_MESSAGE);
     }
 
 	private void stopExploratory(SchedulerJobData job) {
-		final String expName = job.getExploratoryName();
-		final String user = job.getUser();
-		final String project = job.getProject();
-		log.debug("Stopping exploratory {} for user {} by scheduler", expName, user);
-		exploratoryService.stop(securityService.getServiceAccountInfo(user), user, project, expName, Collections.singletonList(AUDIT_MESSAGE));
-	}
+        final String expName = job.getExploratoryName();
+        final String user = job.getUser();
+        final String project = job.getProject();
+        log.debug("Stopping exploratory {} for user {} by scheduler", expName, user);
+        exploratoryService.stop(securityService.getServiceAccountInfo(user), user, project, expName, AUDIT_MESSAGE);
+    }
 
 	private List<SchedulerJobData> getExploratorySchedulersForTerminating(OffsetDateTime now) {
 		return schedulerJobDAO.getExploratorySchedulerDataWithOneOfStatus(RUNNING, STOPPED)
@@ -254,35 +253,35 @@ public class SchedulerJobServiceImpl implements SchedulerJobService {
 	}
 
 	private void startExploratory(SchedulerJobData schedulerJobData) {
-		final String user = schedulerJobData.getUser();
-		final String exploratoryName = schedulerJobData.getExploratoryName();
-		final String project = schedulerJobData.getProject();
-		log.debug("Starting exploratory {} for user {} by scheduler", exploratoryName, user);
-		exploratoryService.start(securityService.getServiceAccountInfo(user), exploratoryName, project, Collections.singletonList(AUDIT_MESSAGE));
-		if (schedulerJobData.getJobDTO().isSyncStartRequired()) {
-			log.trace("Starting computational for exploratory {} for user {} by scheduler", exploratoryName, user);
-			final DataEngineType sparkCluster = DataEngineType.SPARK_STANDALONE;
-			final List<UserComputationalResource> compToBeStarted =
-					computationalDAO.findComputationalResourcesWithStatus(user, project, exploratoryName, STOPPED);
-
-			compToBeStarted
-					.stream()
-					.filter(compResource -> shouldClusterBeStarted(sparkCluster, compResource))
-					.forEach(comp -> startSpark(user, exploratoryName, comp.getComputationalName(), project));
+        final String user = schedulerJobData.getUser();
+        final String exploratoryName = schedulerJobData.getExploratoryName();
+        final String project = schedulerJobData.getProject();
+        log.debug("Starting exploratory {} for user {} by scheduler", exploratoryName, user);
+        exploratoryService.start(securityService.getServiceAccountInfo(user), exploratoryName, project, AUDIT_MESSAGE);
+        if (schedulerJobData.getJobDTO().isSyncStartRequired()) {
+            log.trace("Starting computational for exploratory {} for user {} by scheduler", exploratoryName, user);
+            final DataEngineType sparkCluster = DataEngineType.SPARK_STANDALONE;
+            final List<UserComputationalResource> compToBeStarted =
+                    computationalDAO.findComputationalResourcesWithStatus(user, project, exploratoryName, STOPPED);
+
+            compToBeStarted
+                    .stream()
+                    .filter(compResource -> shouldClusterBeStarted(sparkCluster, compResource))
+                    .forEach(comp -> startSpark(user, exploratoryName, comp.getComputationalName(), project));
 		}
 	}
 
 	private void terminateExploratory(SchedulerJobData job) {
-		final String user = job.getUser();
-		final String project = job.getProject();
-		final String expName = job.getExploratoryName();
-		log.debug("Terminating exploratory {} for user {} by scheduler", expName, user);
-		exploratoryService.terminate(securityService.getUserInfoOffline(user), user, project, expName, Collections.singletonList(AUDIT_MESSAGE));
-	}
+        final String user = job.getUser();
+        final String project = job.getProject();
+        final String expName = job.getExploratoryName();
+        log.debug("Terminating exploratory {} for user {} by scheduler", expName, user);
+        exploratoryService.terminate(securityService.getUserInfoOffline(user), user, project, expName, AUDIT_MESSAGE);
+    }
 
 	private void startSpark(String user, String expName, String compName, String project) {
         log.debug("Starting exploratory {} computational {} for user {} by scheduler", expName, compName, user);
-        computationalService.startSparkCluster(securityService.getServiceAccountInfo(user), expName, compName, project, Collections.singletonList(AUDIT_MESSAGE));
+        computationalService.startSparkCluster(securityService.getServiceAccountInfo(user), expName, compName, project, AUDIT_MESSAGE);
     }
 
 	private boolean shouldClusterBeStarted(DataEngineType sparkCluster, UserComputationalResource compResource) {
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ExploratoryResourceTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ExploratoryResourceTest.java
index a9ab5f2..b68ea11 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ExploratoryResourceTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ExploratoryResourceTest.java
@@ -46,7 +46,6 @@ import java.util.List;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyList;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.eq;
@@ -112,7 +111,7 @@ public class ExploratoryResourceTest extends TestBase {
 	@Test
 	public void start() {
         ExploratoryActionFormDTO exploratoryDTO = getExploratoryActionFormDTO();
-        when(exploratoryService.start(any(UserInfo.class), anyString(), anyString(), anyList())).thenReturn("someUuid");
+        when(exploratoryService.start(any(UserInfo.class), anyString(), anyString(), anyString())).thenReturn("someUuid");
         final Response response = resources.getJerseyTest()
                 .target("/infrastructure_provision/exploratory_environment")
                 .request()
@@ -130,7 +129,7 @@ public class ExploratoryResourceTest extends TestBase {
 
 	@Test
 	public void startUnprocessableEntity() {
-        when(exploratoryService.start(any(UserInfo.class), anyString(), anyString(), anyList())).thenReturn("someUuid");
+        when(exploratoryService.start(any(UserInfo.class), anyString(), anyString(), anyString())).thenReturn("someUuid");
         final Response response = resources.getJerseyTest()
                 .target("/infrastructure_provision/exploratory_environment")
                 .request()
@@ -145,16 +144,16 @@ public class ExploratoryResourceTest extends TestBase {
 
 	@Test
 	public void stop() {
-		when(exploratoryService.stop(any(UserInfo.class), anyString(), anyString(), anyString(), anyList())).thenReturn("someUuid");
-		final Response response = resources.getJerseyTest()
-				.target("/infrastructure_provision/exploratory_environment/project/someName/stop")
-				.request()
-				.header("Authorization", "Bearer " + TOKEN)
-				.delete();
+        when(exploratoryService.stop(any(UserInfo.class), anyString(), anyString(), anyString(), anyString())).thenReturn("someUuid");
+        final Response response = resources.getJerseyTest()
+                .target("/infrastructure_provision/exploratory_environment/project/someName/stop")
+                .request()
+                .header("Authorization", "Bearer " + TOKEN)
+                .delete();
 
-		assertEquals(HttpStatus.SC_OK, response.getStatus());
-		assertEquals("someUuid", response.readEntity(String.class));
-		assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
+        assertEquals(HttpStatus.SC_OK, response.getStatus());
+        assertEquals("someUuid", response.readEntity(String.class));
+        assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
 
 		verify(exploratoryService).stop(getUserInfo(), getUserInfo().getName(), "project", "someName", null);
 		verifyNoMoreInteractions(exploratoryService);
@@ -162,17 +161,17 @@ public class ExploratoryResourceTest extends TestBase {
 
 	@Test
 	public void stopWithFailedAuth() throws AuthenticationException {
-		authFailSetup();
-		when(exploratoryService.stop(any(UserInfo.class), anyString(), anyString(), anyString(), anyList())).thenReturn("someUuid");
-		final Response response = resources.getJerseyTest()
-				.target("/infrastructure_provision/exploratory_environment/project/someName/stop")
-				.request()
-				.header("Authorization", "Bearer " + TOKEN)
-				.delete();
+        authFailSetup();
+        when(exploratoryService.stop(any(UserInfo.class), anyString(), anyString(), anyString(), anyString())).thenReturn("someUuid");
+        final Response response = resources.getJerseyTest()
+                .target("/infrastructure_provision/exploratory_environment/project/someName/stop")
+                .request()
+                .header("Authorization", "Bearer " + TOKEN)
+                .delete();
 
-		assertEquals(HttpStatus.SC_OK, response.getStatus());
-		assertEquals("someUuid", response.readEntity(String.class));
-		assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
+        assertEquals(HttpStatus.SC_OK, response.getStatus());
+        assertEquals("someUuid", response.readEntity(String.class));
+        assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
 
 		verify(exploratoryService).stop(getUserInfo(), getUserInfo().getName(), "project", "someName", null);
 		verifyNoMoreInteractions(exploratoryService);
@@ -180,8 +179,8 @@ public class ExploratoryResourceTest extends TestBase {
 
 	@Test
 	public void stopWithException() {
-		doThrow(new DlabException("Could not stop exploratory environment"))
-				.when(exploratoryService).stop(any(UserInfo.class), anyString(), anyString(), anyString(), anyList());
+        doThrow(new DlabException("Could not stop exploratory environment"))
+                .when(exploratoryService).stop(any(UserInfo.class), anyString(), anyString(), anyString(), anyString());
 		final Response response = resources.getJerseyTest()
 				.target("/infrastructure_provision/exploratory_environment/project/someName/stop")
 				.request()
@@ -201,16 +200,16 @@ public class ExploratoryResourceTest extends TestBase {
 
 	@Test
 	public void terminate() {
-		when(exploratoryService.terminate(any(UserInfo.class), anyString(), anyString(), anyString(), anyList())).thenReturn("someUuid");
-		final Response response = resources.getJerseyTest()
-				.target("/infrastructure_provision/exploratory_environment/project/someName/terminate")
-				.request()
-				.header("Authorization", "Bearer " + TOKEN)
-				.delete();
+        when(exploratoryService.terminate(any(UserInfo.class), anyString(), anyString(), anyString(), anyString())).thenReturn("someUuid");
+        final Response response = resources.getJerseyTest()
+                .target("/infrastructure_provision/exploratory_environment/project/someName/terminate")
+                .request()
+                .header("Authorization", "Bearer " + TOKEN)
+                .delete();
 
-		assertEquals(HttpStatus.SC_OK, response.getStatus());
-		assertEquals("someUuid", response.readEntity(String.class));
-		assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
+        assertEquals(HttpStatus.SC_OK, response.getStatus());
+        assertEquals("someUuid", response.readEntity(String.class));
+        assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
 
 		verify(exploratoryService).terminate(getUserInfo(), getUserInfo().getName(), "project", "someName", null);
 		verifyNoMoreInteractions(exploratoryService);
@@ -218,17 +217,17 @@ public class ExploratoryResourceTest extends TestBase {
 
 	@Test
 	public void terminateWithFailedAuth() throws AuthenticationException {
-		authFailSetup();
-		when(exploratoryService.terminate(any(UserInfo.class), anyString(), anyString(), anyString(), anyList())).thenReturn("someUuid");
-		final Response response = resources.getJerseyTest()
-				.target("/infrastructure_provision/exploratory_environment/project/someName/terminate")
-				.request()
-				.header("Authorization", "Bearer " + TOKEN)
-				.delete();
+        authFailSetup();
+        when(exploratoryService.terminate(any(UserInfo.class), anyString(), anyString(), anyString(), anyString())).thenReturn("someUuid");
+        final Response response = resources.getJerseyTest()
+                .target("/infrastructure_provision/exploratory_environment/project/someName/terminate")
+                .request()
+                .header("Authorization", "Bearer " + TOKEN)
+                .delete();
 
-		assertEquals(HttpStatus.SC_OK, response.getStatus());
-		assertEquals("someUuid", response.readEntity(String.class));
-		assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
+        assertEquals(HttpStatus.SC_OK, response.getStatus());
+        assertEquals("someUuid", response.readEntity(String.class));
+        assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
 
 		verify(exploratoryService).terminate(getUserInfo(), getUserInfo().getName(), "project", "someName", null);
 		verifyNoMoreInteractions(exploratoryService);
@@ -236,8 +235,8 @@ public class ExploratoryResourceTest extends TestBase {
 
 	@Test
 	public void terminateWithException() {
-		doThrow(new DlabException("Could not terminate exploratory environment"))
-				.when(exploratoryService).terminate(any(UserInfo.class), anyString(), anyString(), anyString(), anyList());
+        doThrow(new DlabException("Could not terminate exploratory environment"))
+                .when(exploratoryService).terminate(any(UserInfo.class), anyString(), anyString(), anyString(), anyString());
 		final Response response = resources.getJerseyTest()
 				.target("/infrastructure_provision/exploratory_environment/project/someName/terminate")
 				.request()
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImplTest.java
index fb44f30..1b9babc 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImplTest.java
@@ -172,7 +172,7 @@ public class ComputationalServiceImplTest {
 
         SparkStandaloneClusterCreateForm form = (SparkStandaloneClusterCreateForm) formList.get(0);
         boolean creationResult = computationalService.createSparkCluster(userInfo, form.getName(), form, PROJECT,
-                Collections.singletonList(String.format(AUDIT_MESSAGE, form.getNotebookName())));
+                String.format(AUDIT_MESSAGE, form.getNotebookName()));
         assertTrue(creationResult);
 
         verify(projectService).get(PROJECT);
@@ -198,7 +198,7 @@ public class ComputationalServiceImplTest {
 
         SparkStandaloneClusterCreateForm form = (SparkStandaloneClusterCreateForm) formList.get(0);
         boolean creationResult = computationalService.createSparkCluster(userInfo, form.getName(), form, PROJECT,
-                Collections.singletonList(String.format(AUDIT_MESSAGE, form.getNotebookName())));
+                String.format(AUDIT_MESSAGE, form.getNotebookName()));
         assertFalse(creationResult);
         verify(computationalDAO).addComputational(eq(USER), eq(EXPLORATORY_NAME), eq(PROJECT), refEq(sparkClusterResource));
         verifyNoMoreInteractions(configuration, computationalDAO);
@@ -216,7 +216,7 @@ public class ComputationalServiceImplTest {
 
         SparkStandaloneClusterCreateForm form = (SparkStandaloneClusterCreateForm) formList.get(0);
         try {
-            computationalService.createSparkCluster(userInfo, form.getName(), form, PROJECT, Collections.singletonList(String.format(AUDIT_MESSAGE, form.getNotebookName())));
+            computationalService.createSparkCluster(userInfo, form.getName(), form, PROJECT, String.format(AUDIT_MESSAGE, form.getNotebookName()));
         } catch (ResourceNotFoundException e) {
             assertEquals("Exploratory for user with name not found", e.getMessage());
         }
@@ -246,7 +246,7 @@ public class ComputationalServiceImplTest {
 
         SparkStandaloneClusterCreateForm form = (SparkStandaloneClusterCreateForm) formList.get(0);
         try {
-            computationalService.createSparkCluster(userInfo, form.getName(), form, PROJECT, Collections.singletonList(String.format(AUDIT_MESSAGE, form.getNotebookName())));
+            computationalService.createSparkCluster(userInfo, form.getName(), form, PROJECT, String.format(AUDIT_MESSAGE, form.getNotebookName()));
         } catch (DlabException e) {
             assertEquals("Cannot create instance of resource class ", e.getMessage());
         }
@@ -283,7 +283,7 @@ public class ComputationalServiceImplTest {
                 .thenReturn(UUID);
         when(requestId.put(anyString(), anyString())).thenReturn(UUID);
 
-        computationalService.terminateComputational(userInfo, userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, Collections.singletonList(AUDIT_MESSAGE));
+        computationalService.terminateComputational(userInfo, userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, AUDIT_MESSAGE);
 
         verify(computationalDAO).updateComputationalStatus(refEq(computationalStatusDTOWithStatusTerminating, "self"));
         verify(computationalDAO).fetchComputationalFields(USER, PROJECT, EXPLORATORY_NAME, COMP_NAME);
@@ -308,7 +308,7 @@ public class ComputationalServiceImplTest {
 				.thenReturn(mock(UpdateResult.class));
 
         try {
-            computationalService.terminateComputational(userInfo, userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, Collections.singletonList(AUDIT_MESSAGE));
+            computationalService.terminateComputational(userInfo, userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, AUDIT_MESSAGE);
         } catch (DlabException e) {
             assertEquals("Could not update computational resource status", e.getMessage());
         }
@@ -329,7 +329,7 @@ public class ComputationalServiceImplTest {
                 .thenReturn(mock(UpdateResult.class));
 
         try {
-            computationalService.terminateComputational(userInfo, userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, Collections.singletonList(AUDIT_MESSAGE));
+            computationalService.terminateComputational(userInfo, userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, AUDIT_MESSAGE);
         } catch (DlabException e) {
             assertEquals("Computational resource for user with exploratory name not found.", e.getMessage());
         }
@@ -363,7 +363,7 @@ public class ComputationalServiceImplTest {
                 .thenReturn(mock(UpdateResult.class));
 
         try {
-            computationalService.terminateComputational(userInfo, userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, Collections.singletonList(AUDIT_MESSAGE));
+            computationalService.terminateComputational(userInfo, userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, AUDIT_MESSAGE);
         } catch (DlabException e) {
             assertEquals("Cannot create instance of resource class ", e.getMessage());
         }
@@ -397,7 +397,7 @@ public class ComputationalServiceImplTest {
 
         ComputationalCreateFormDTO form = formList.get(1);
         boolean creationResult = computationalService.createDataEngineService(userInfo, form.getName(), form, ucResource, PROJECT,
-                Collections.singletonList(String.format(AUDIT_MESSAGE, form.getNotebookName())));
+                String.format(AUDIT_MESSAGE, form.getNotebookName()));
         assertTrue(creationResult);
 
         verify(projectService).get(PROJECT);
@@ -425,7 +425,7 @@ public class ComputationalServiceImplTest {
 
         ComputationalCreateFormDTO form = formList.get(1);
         boolean creationResult = computationalService.createDataEngineService(userInfo, form.getName(), form, ucResource, PROJECT,
-                Collections.singletonList(String.format(AUDIT_MESSAGE, form.getNotebookName())));
+                String.format(AUDIT_MESSAGE, form.getNotebookName()));
         assertFalse(creationResult);
 
         verify(computationalDAO).addComputational(eq(USER), eq(EXPLORATORY_NAME), eq(PROJECT), refEq(ucResource));
@@ -445,7 +445,7 @@ public class ComputationalServiceImplTest {
         ComputationalCreateFormDTO form = formList.get(1);
         try {
             computationalService.createDataEngineService(userInfo, form.getName(), form, ucResource, PROJECT,
-                    Collections.singletonList(String.format(AUDIT_MESSAGE, form.getNotebookName())));
+                    String.format(AUDIT_MESSAGE, form.getNotebookName()));
         } catch (DlabException e) {
             assertEquals("Exploratory for user with name not found", e.getMessage());
         }
@@ -479,7 +479,7 @@ public class ComputationalServiceImplTest {
         ComputationalCreateFormDTO form = formList.get(1);
         try {
             computationalService.createDataEngineService(userInfo, form.getName(), form, ucResource, PROJECT,
-                    Collections.singletonList(String.format(AUDIT_MESSAGE, form.getNotebookName())));
+                    String.format(AUDIT_MESSAGE, form.getNotebookName()));
         } catch (DlabException e) {
             assertEquals("Could not send request for creation the computational resource compName: " +
                     "Cannot create instance of resource class ", e.getMessage());
@@ -511,7 +511,7 @@ public class ComputationalServiceImplTest {
                 .thenReturn("someUuid");
         when(requestId.put(anyString(), anyString())).thenReturn("someUuid");
 
-        computationalService.stopSparkCluster(userInfo, userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, Collections.singletonList(String.format(AUDIT_MESSAGE, EXPLORATORY_NAME)));
+        computationalService.stopSparkCluster(userInfo, userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, String.format(AUDIT_MESSAGE, EXPLORATORY_NAME));
 
         verify(computationalDAO).updateComputationalStatus(refEq(computationalStatusDTOWithStatusStopping, "self"));
         verify(exploratoryDAO).fetchExploratoryFields(USER, PROJECT, EXPLORATORY_NAME, true);
@@ -532,7 +532,7 @@ public class ComputationalServiceImplTest {
         expectedException.expect(IllegalStateException.class);
         expectedException.expectMessage("There is no running dataengine compName for exploratory expName");
 
-        computationalService.stopSparkCluster(userInfo, userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, Collections.singletonList(String.format(AUDIT_MESSAGE, EXPLORATORY_NAME)));
+        computationalService.stopSparkCluster(userInfo, userInfo.getName(), PROJECT, EXPLORATORY_NAME, COMP_NAME, String.format(AUDIT_MESSAGE, EXPLORATORY_NAME));
     }
 
 	@Test
@@ -551,7 +551,7 @@ public class ComputationalServiceImplTest {
                 .thenReturn("someUuid");
         when(requestId.put(anyString(), anyString())).thenReturn("someUuid");
 
-        computationalService.startSparkCluster(userInfo, EXPLORATORY_NAME, COMP_NAME, PROJECT, Collections.singletonList(String.format(AUDIT_MESSAGE, EXPLORATORY_NAME)));
+        computationalService.startSparkCluster(userInfo, EXPLORATORY_NAME, COMP_NAME, PROJECT, String.format(AUDIT_MESSAGE, EXPLORATORY_NAME));
 
         verify(computationalDAO).updateComputationalStatus(refEq(computationalStatusDTOWithStatusStarting, "self"));
         verify(exploratoryDAO).fetchExploratoryFields(USER, PROJECT, EXPLORATORY_NAME, true);
@@ -575,7 +575,7 @@ public class ComputationalServiceImplTest {
         expectedException.expect(IllegalStateException.class);
         expectedException.expectMessage("There is no stopped dataengine compName for exploratory expName");
 
-        computationalService.startSparkCluster(userInfo, EXPLORATORY_NAME, COMP_NAME, PROJECT, Collections.singletonList(String.format(AUDIT_MESSAGE, EXPLORATORY_NAME)));
+        computationalService.startSparkCluster(userInfo, EXPLORATORY_NAME, COMP_NAME, PROJECT, String.format(AUDIT_MESSAGE, EXPLORATORY_NAME));
     }
 
 	@Test
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 bf4753e..fc619d2 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
@@ -48,7 +48,6 @@ import java.util.List;
 import java.util.Optional;
 
 import static org.junit.Assert.assertEquals;
-import static org.mockito.Matchers.anyList;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.anySet;
 import static org.mockito.Mockito.anyString;
@@ -132,18 +131,18 @@ public class EnvironmentServiceImplTest {
         final ProjectDTO projectDTO = getProjectDTO();
         when(exploratoryDAO.fetchRunningExploratoryFieldsForProject(anyString())).thenReturn(getUserInstances());
         when(securityService.getServiceAccountInfo(anyString())).thenReturn(userInfo);
-        when(exploratoryService.stop(any(UserInfo.class), anyString(), anyString(), anyString(), anyList())).thenReturn(UUID);
+        when(exploratoryService.stop(any(UserInfo.class), anyString(), anyString(), anyString(), anyString())).thenReturn(UUID);
         when(projectService.get(anyString())).thenReturn(projectDTO);
-        doNothing().when(projectService).stop(any(UserInfo.class), anyString(), anyString(), anyList());
+        doNothing().when(projectService).stop(any(UserInfo.class), anyString(), anyString(), anyString());
 
         environmentService.stopProjectEnvironment(PROJECT_NAME);
 
         verify(exploratoryDAO).fetchRunningExploratoryFieldsForProject(PROJECT_NAME);
-        verify(exploratoryService).stop(refEq(userInfo), eq(USER), eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), eq(Collections.singletonList(AUDIT_QUOTA_MESSAGE)));
-        verify(exploratoryService).stop(refEq(userInfo), eq(USER), eq(PROJECT_NAME), eq(EXPLORATORY_NAME_2), eq(Collections.singletonList(AUDIT_QUOTA_MESSAGE)));
+        verify(exploratoryService).stop(refEq(userInfo), eq(USER), eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), eq(AUDIT_QUOTA_MESSAGE));
+        verify(exploratoryService).stop(refEq(userInfo), eq(USER), eq(PROJECT_NAME), eq(EXPLORATORY_NAME_2), eq(AUDIT_QUOTA_MESSAGE));
         verify(securityService, times(3)).getServiceAccountInfo(DLAB_SYSTEM_USER);
         verify(projectService).get(eq(PROJECT_NAME));
-        verify(projectService).stop(refEq(userInfo), eq(ENDPOINT_NAME), eq(PROJECT_NAME), eq(Collections.singletonList(AUDIT_QUOTA_MESSAGE)));
+        verify(projectService).stop(refEq(userInfo), eq(ENDPOINT_NAME), eq(PROJECT_NAME), eq(AUDIT_QUOTA_MESSAGE));
         verify(exploratoryDAO).fetchProjectExploratoriesWhereStatusIn(PROJECT_NAME, Arrays.asList(UserInstanceStatus.CREATING,
                 UserInstanceStatus.STARTING, UserInstanceStatus.CREATING_IMAGE),
                 UserInstanceStatus.CREATING, UserInstanceStatus.STARTING, UserInstanceStatus.CREATING_IMAGE);
@@ -152,49 +151,49 @@ public class EnvironmentServiceImplTest {
 
 	@Test
 	public void stopExploratory() {
-		final UserInfo userInfo = getUserInfo();
-		when(exploratoryService.stop(any(UserInfo.class), anyString(), anyString(), anyString(), anyList())).thenReturn(UUID);
+        final UserInfo userInfo = getUserInfo();
+        when(exploratoryService.stop(any(UserInfo.class), anyString(), anyString(), anyString(), anyString())).thenReturn(UUID);
 
-		environmentService.stopExploratory(userInfo, USER, PROJECT_NAME, EXPLORATORY_NAME_1);
+        environmentService.stopExploratory(userInfo, USER, PROJECT_NAME, EXPLORATORY_NAME_1);
 
-		verify(exploratoryService).stop(refEq(userInfo), eq(USER), eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), eq(null));
-		verifyNoMoreInteractions(securityService, exploratoryService);
-	}
+        verify(exploratoryService).stop(refEq(userInfo), eq(USER), eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), eq(null));
+        verifyNoMoreInteractions(securityService, exploratoryService);
+    }
 
 	@Test
 	public void stopComputational() {
         final UserInfo userInfo = getUserInfo();
-        doNothing().when(computationalService).stopSparkCluster(any(UserInfo.class), anyString(), anyString(), anyString(), anyString(), anyList());
+        doNothing().when(computationalService).stopSparkCluster(any(UserInfo.class), anyString(), anyString(), anyString(), anyString(), anyString());
 
         environmentService.stopComputational(userInfo, USER, PROJECT_NAME, EXPLORATORY_NAME_1, "compName");
 
         verify(computationalService).stopSparkCluster(refEq(userInfo), eq(userInfo.getName()), eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), eq("compName"),
-                eq(Collections.singletonList(String.format(AUDIT_MESSAGE, EXPLORATORY_NAME_1))));
+                eq(String.format(AUDIT_MESSAGE, EXPLORATORY_NAME_1)));
         verifyNoMoreInteractions(securityService, computationalService);
     }
 
 	@Test
 	public void terminateExploratory() {
-		final UserInfo userInfo = getUserInfo();
-		when(exploratoryService.terminate(any(UserInfo.class), anyString(), anyString(), anyString(), anyList())).thenReturn(UUID);
+        final UserInfo userInfo = getUserInfo();
+        when(exploratoryService.terminate(any(UserInfo.class), anyString(), anyString(), anyString(), anyString())).thenReturn(UUID);
 
-		environmentService.terminateExploratory(userInfo, USER, PROJECT_NAME, EXPLORATORY_NAME_1);
+        environmentService.terminateExploratory(userInfo, USER, PROJECT_NAME, EXPLORATORY_NAME_1);
 
-		verify(exploratoryService).terminate(refEq(userInfo), eq(USER), eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), eq(null));
-		verifyNoMoreInteractions(securityService, exploratoryService);
-	}
+        verify(exploratoryService).terminate(refEq(userInfo), eq(USER), eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), eq(null));
+        verifyNoMoreInteractions(securityService, exploratoryService);
+    }
 
 	@Test
 	public void terminateComputational() {
 		final UserInfo userInfo = getUserInfo();
-		doNothing().when(computationalService)
-				.terminateComputational(any(UserInfo.class), anyString(), anyString(), anyString(), anyString(), anyList());
+        doNothing().when(computationalService)
+                .terminateComputational(any(UserInfo.class), anyString(), anyString(), anyString(), anyString(), anyString());
 
 		environmentService.terminateComputational(userInfo, USER, PROJECT_NAME, EXPLORATORY_NAME_1, "compName");
 
-		verify(computationalService).terminateComputational(refEq(userInfo), eq(userInfo.getName()), eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), eq("compName"),
-				eq(Collections.singletonList(String.format(AUDIT_MESSAGE, EXPLORATORY_NAME_1))));
-		verifyNoMoreInteractions(securityService, computationalService);
+        verify(computationalService).terminateComputational(refEq(userInfo), eq(userInfo.getName()), eq(PROJECT_NAME), eq(EXPLORATORY_NAME_1), eq("compName"),
+                eq(String.format(AUDIT_MESSAGE, EXPLORATORY_NAME_1)));
+        verifyNoMoreInteractions(securityService, computationalService);
 	}
 
 	private UserInfo getUserInfo() {
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImplTest.java
index c8e9035..6c72ef8 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/SchedulerJobServiceImplTest.java
@@ -420,7 +420,7 @@ public class SchedulerJobServiceImplTest {
 		verify(schedulerJobDAO)
                 .getComputationalSchedulerDataWithOneOfStatus(RUNNING, DataEngineType.SPARK_STANDALONE, STOPPED);
         verify(computationalService).startSparkCluster(refEq(getUserInfo()), eq(EXPLORATORY_NAME),
-                eq(COMPUTATIONAL_NAME), eq(PROJECT), eq(Collections.singletonList(AUDIT_MESSAGE)));
+                eq(COMPUTATIONAL_NAME), eq(PROJECT), eq(AUDIT_MESSAGE));
         verifyNoMoreInteractions(securityService, schedulerJobDAO, computationalService);
 	}
 
@@ -521,7 +521,7 @@ public class SchedulerJobServiceImplTest {
         verify(schedulerJobDAO)
                 .getComputationalSchedulerDataWithOneOfStatus(RUNNING, DataEngineType.SPARK_STANDALONE, RUNNING);
         verify(computationalService).stopSparkCluster(refEq(userInfo), eq(userInfo.getName()), eq(PROJECT),
-                eq(EXPLORATORY_NAME), eq(COMPUTATIONAL_NAME), eq(Collections.singletonList(AUDIT_MESSAGE)));
+                eq(EXPLORATORY_NAME), eq(COMPUTATIONAL_NAME), eq(AUDIT_MESSAGE));
         verifyNoMoreInteractions(securityService, schedulerJobDAO, computationalService);
     }
 
@@ -609,19 +609,19 @@ public class SchedulerJobServiceImplTest {
 		when(schedulerJobDAO.getExploratorySchedulerWithStatusAndClusterLastActivityLessThan(any(UserInstanceStatus.class), any(Date.class))).
 				thenReturn(singletonList(getSchedulerJobData(LocalDate.now(), LocalDate.now().plusDays(1),
 						Arrays.asList(DayOfWeek.values()), Arrays.asList(DayOfWeek.values()),
-						LocalDateTime.of(LocalDate.now(),
-								LocalTime.now().truncatedTo(ChronoUnit.MINUTES)), false, USER,
-						LocalTime.now().truncatedTo(ChronoUnit.MINUTES))));
-		when(securityService.getServiceAccountInfo(anyString())).thenReturn(userInfo);
+                        LocalDateTime.of(LocalDate.now(),
+                                LocalTime.now().truncatedTo(ChronoUnit.MINUTES)), false, USER,
+                        LocalTime.now().truncatedTo(ChronoUnit.MINUTES))));
+        when(securityService.getServiceAccountInfo(anyString())).thenReturn(userInfo);
 
-		schedulerJobService.stopExploratoryByScheduler();
+        schedulerJobService.stopExploratoryByScheduler();
 
-		verify(securityService).getServiceAccountInfo(USER);
-		verify(schedulerJobDAO).getExploratorySchedulerWithStatusAndClusterLastActivityLessThan(eq(RUNNING),
-				any(Date.class));
-		verify(exploratoryService).stop(refEq(userInfo), eq(USER), eq(PROJECT), eq(EXPLORATORY_NAME), eq(Collections.singletonList(AUDIT_MESSAGE)));
-		verifyNoMoreInteractions(securityService, schedulerJobDAO, exploratoryService);
-	}
+        verify(securityService).getServiceAccountInfo(USER);
+        verify(schedulerJobDAO).getExploratorySchedulerWithStatusAndClusterLastActivityLessThan(eq(RUNNING),
+                any(Date.class));
+        verify(exploratoryService).stop(refEq(userInfo), eq(USER), eq(PROJECT), eq(EXPLORATORY_NAME), eq(AUDIT_MESSAGE));
+        verifyNoMoreInteractions(securityService, schedulerJobDAO, exploratoryService);
+    }
 
 	@Test
 	public void testStopExploratoryBySchedulerWhenSchedulerIsNotConfigured() {
@@ -704,22 +704,22 @@ public class SchedulerJobServiceImplTest {
 		final List<DayOfWeek> stopDays = Arrays.asList(DayOfWeek.values());
 		when(schedulerJobDAO.getExploratorySchedulerDataWithStatus(any(UserInstanceStatus.class)))
 				.thenReturn(singletonList(getSchedulerJobData(LocalDate.now(), finishDate,
-						Arrays.asList(DayOfWeek.values()), stopDays, LocalDateTime.of(LocalDate.now(),
-								LocalTime.now().truncatedTo(ChronoUnit.MINUTES)), false, USER,
-						LocalTime.now().truncatedTo(ChronoUnit.MINUTES)
-				)));
-		when(securityService.getServiceAccountInfo(anyString())).thenReturn(getUserInfo());
+                        Arrays.asList(DayOfWeek.values()), stopDays, LocalDateTime.of(LocalDate.now(),
+                                LocalTime.now().truncatedTo(ChronoUnit.MINUTES)), false, USER,
+                        LocalTime.now().truncatedTo(ChronoUnit.MINUTES)
+                )));
+        when(securityService.getServiceAccountInfo(anyString())).thenReturn(getUserInfo());
 
-		schedulerJobService.startExploratoryByScheduler();
+        schedulerJobService.startExploratoryByScheduler();
 
-		verify(securityService).getServiceAccountInfo(USER);
-		verify(schedulerJobDAO).getExploratorySchedulerDataWithStatus(STOPPED);
-		verify(exploratoryService).start(refEq(getUserInfo()), eq(EXPLORATORY_NAME), eq(PROJECT), eq(Collections.singletonList(AUDIT_MESSAGE)));
-		verifyNoMoreInteractions(securityService, schedulerJobDAO, exploratoryService);
-		verify(exploratoryService).start(refEq(getUserInfo()), eq(EXPLORATORY_NAME), eq(PROJECT), eq(Collections.singletonList(AUDIT_MESSAGE)));
-		verifyNoMoreInteractions(schedulerJobDAO, exploratoryService);
-		verifyZeroInteractions(computationalService, computationalDAO);
-	}
+        verify(securityService).getServiceAccountInfo(USER);
+        verify(schedulerJobDAO).getExploratorySchedulerDataWithStatus(STOPPED);
+        verify(exploratoryService).start(refEq(getUserInfo()), eq(EXPLORATORY_NAME), eq(PROJECT), eq(AUDIT_MESSAGE));
+        verifyNoMoreInteractions(securityService, schedulerJobDAO, exploratoryService);
+        verify(exploratoryService).start(refEq(getUserInfo()), eq(EXPLORATORY_NAME), eq(PROJECT), eq(AUDIT_MESSAGE));
+        verifyNoMoreInteractions(schedulerJobDAO, exploratoryService);
+        verifyZeroInteractions(computationalService, computationalDAO);
+    }
 
 	@Test
 	public void testStartExploratoryBySchedulerWithSyncComputationalStart() {
@@ -740,10 +740,10 @@ public class SchedulerJobServiceImplTest {
 
         verify(securityService, times(2)).getServiceAccountInfo(USER);
         verify(schedulerJobDAO).getExploratorySchedulerDataWithStatus(STOPPED);
-        verify(exploratoryService).start(refEq(getUserInfo()), eq(EXPLORATORY_NAME), eq(PROJECT), eq(Collections.singletonList(AUDIT_MESSAGE)));
+        verify(exploratoryService).start(refEq(getUserInfo()), eq(EXPLORATORY_NAME), eq(PROJECT), eq(AUDIT_MESSAGE));
         verify(computationalDAO).findComputationalResourcesWithStatus(USER, PROJECT, EXPLORATORY_NAME, STOPPED);
         verify(computationalService).startSparkCluster(refEq(getUserInfo()), eq(EXPLORATORY_NAME), eq(COMPUTATIONAL_NAME),
-                eq(PROJECT), eq(Collections.singletonList(AUDIT_MESSAGE)));
+                eq(PROJECT), eq(AUDIT_MESSAGE));
         verifyNoMoreInteractions(securityService, schedulerJobDAO, exploratoryService, computationalService,
                 computationalDAO);
     }
@@ -757,21 +757,21 @@ public class SchedulerJobServiceImplTest {
 						Arrays.asList(DayOfWeek.values()), stopDays, LocalDateTime.of(LocalDate.now(),
 								LocalTime.now().truncatedTo(ChronoUnit.MINUTES)), true, USER,
 						LocalTime.now().truncatedTo(ChronoUnit.MINUTES)
-				)));
-		when(securityService.getServiceAccountInfo(anyString())).thenReturn(getUserInfo());
-		when(computationalDAO.findComputationalResourcesWithStatus(anyString(), anyString(),
-				anyString(), any(UserInstanceStatus.class))).thenReturn(singletonList(getComputationalResource(
-				DataEngineType.CLOUD_SERVICE, true)));
+                )));
+        when(securityService.getServiceAccountInfo(anyString())).thenReturn(getUserInfo());
+        when(computationalDAO.findComputationalResourcesWithStatus(anyString(), anyString(),
+                anyString(), any(UserInstanceStatus.class))).thenReturn(singletonList(getComputationalResource(
+                DataEngineType.CLOUD_SERVICE, true)));
 
-		schedulerJobService.startExploratoryByScheduler();
+        schedulerJobService.startExploratoryByScheduler();
 
-		verify(securityService).getServiceAccountInfo(USER);
-		verify(schedulerJobDAO).getExploratorySchedulerDataWithStatus(STOPPED);
-		verify(exploratoryService).start(refEq(getUserInfo()), eq(EXPLORATORY_NAME), eq(PROJECT), eq(Collections.singletonList(AUDIT_MESSAGE)));
-		verify(computationalDAO).findComputationalResourcesWithStatus(USER, PROJECT, EXPLORATORY_NAME, STOPPED);
-		verifyNoMoreInteractions(securityService, schedulerJobDAO, exploratoryService, computationalDAO);
-		verifyZeroInteractions(computationalService);
-	}
+        verify(securityService).getServiceAccountInfo(USER);
+        verify(schedulerJobDAO).getExploratorySchedulerDataWithStatus(STOPPED);
+        verify(exploratoryService).start(refEq(getUserInfo()), eq(EXPLORATORY_NAME), eq(PROJECT), eq(AUDIT_MESSAGE));
+        verify(computationalDAO).findComputationalResourcesWithStatus(USER, PROJECT, EXPLORATORY_NAME, STOPPED);
+        verifyNoMoreInteractions(securityService, schedulerJobDAO, exploratoryService, computationalDAO);
+        verifyZeroInteractions(computationalService);
+    }
 
 	@Test
 	public void testStartExploratoryBySchedulerWithSyncComputationalStartOnExploratoryButNotOnComputational() {
@@ -782,21 +782,21 @@ public class SchedulerJobServiceImplTest {
 						Arrays.asList(DayOfWeek.values()), stopDays, LocalDateTime.of(LocalDate.now(),
 								LocalTime.now().truncatedTo(ChronoUnit.MINUTES)), true, USER,
 						LocalTime.now().truncatedTo(ChronoUnit.MINUTES)
-				)));
-		when(securityService.getServiceAccountInfo(anyString())).thenReturn(getUserInfo());
-		when(computationalDAO.findComputationalResourcesWithStatus(anyString(), anyString(),
-				anyString(), any(UserInstanceStatus.class))).thenReturn(singletonList(getComputationalResource(
-				DataEngineType.SPARK_STANDALONE, false)));
+                )));
+        when(securityService.getServiceAccountInfo(anyString())).thenReturn(getUserInfo());
+        when(computationalDAO.findComputationalResourcesWithStatus(anyString(), anyString(),
+                anyString(), any(UserInstanceStatus.class))).thenReturn(singletonList(getComputationalResource(
+                DataEngineType.SPARK_STANDALONE, false)));
 
-		schedulerJobService.startExploratoryByScheduler();
+        schedulerJobService.startExploratoryByScheduler();
 
-		verify(securityService).getServiceAccountInfo(USER);
-		verify(schedulerJobDAO).getExploratorySchedulerDataWithStatus(STOPPED);
-		verify(exploratoryService).start(refEq(getUserInfo()), eq(EXPLORATORY_NAME), eq(PROJECT), eq(Collections.singletonList(AUDIT_MESSAGE)));
-		verify(computationalDAO).findComputationalResourcesWithStatus(USER, PROJECT, EXPLORATORY_NAME, STOPPED);
-		verifyNoMoreInteractions(securityService, schedulerJobDAO, exploratoryService, computationalDAO);
-		verifyZeroInteractions(computationalService);
-	}
+        verify(securityService).getServiceAccountInfo(USER);
+        verify(schedulerJobDAO).getExploratorySchedulerDataWithStatus(STOPPED);
+        verify(exploratoryService).start(refEq(getUserInfo()), eq(EXPLORATORY_NAME), eq(PROJECT), eq(AUDIT_MESSAGE));
+        verify(computationalDAO).findComputationalResourcesWithStatus(USER, PROJECT, EXPLORATORY_NAME, STOPPED);
+        verifyNoMoreInteractions(securityService, schedulerJobDAO, exploratoryService, computationalDAO);
+        verifyZeroInteractions(computationalService);
+    }
 
 	@Test
 	public void testStartExploratoryBySchedulerWhenSchedulerIsNotConfigured() {
@@ -886,7 +886,7 @@ public class SchedulerJobServiceImplTest {
         verify(schedulerJobDAO)
                 .getComputationalSchedulerDataWithOneOfStatus(RUNNING, STOPPED, RUNNING);
         verify(computationalService).terminateComputational(refEq(userInfo), eq(userInfo.getName()), eq(PROJECT), eq(EXPLORATORY_NAME), eq(COMPUTATIONAL_NAME),
-                eq(Collections.singletonList(AUDIT_MESSAGE)));
+                eq(AUDIT_MESSAGE));
         verifyNoMoreInteractions(securityService, schedulerJobDAO, computationalService);
     }
 
@@ -968,19 +968,19 @@ public class SchedulerJobServiceImplTest {
 		final LocalDateTime terminateDateTime = LocalDateTime.of(LocalDate.now(),
 				LocalTime.now().truncatedTo(ChronoUnit.MINUTES));
 		final LocalDate finishDate = LocalDate.now().plusDays(1);
-		final SchedulerJobData schedulerJobData = getSchedulerJobData(LocalDate.now(), finishDate, startDays, stopDays
-				, terminateDateTime, false, USER, LocalTime.now().truncatedTo(ChronoUnit.MINUTES)
-		);
-		when(schedulerJobDAO.getExploratorySchedulerDataWithOneOfStatus(anyVararg())).thenReturn(singletonList(schedulerJobData));
-		when(securityService.getUserInfoOffline(anyString())).thenReturn(getUserInfo());
+        final SchedulerJobData schedulerJobData = getSchedulerJobData(LocalDate.now(), finishDate, startDays, stopDays
+                , terminateDateTime, false, USER, LocalTime.now().truncatedTo(ChronoUnit.MINUTES)
+        );
+        when(schedulerJobDAO.getExploratorySchedulerDataWithOneOfStatus(anyVararg())).thenReturn(singletonList(schedulerJobData));
+        when(securityService.getUserInfoOffline(anyString())).thenReturn(getUserInfo());
 
-		schedulerJobService.terminateExploratoryByScheduler();
+        schedulerJobService.terminateExploratoryByScheduler();
 
-		verify(securityService).getUserInfoOffline(USER);
-		verify(schedulerJobDAO).getExploratorySchedulerDataWithOneOfStatus(RUNNING, STOPPED);
-		verify(exploratoryService).terminate(refEq(getUserInfo()), eq(USER), eq(PROJECT), eq(EXPLORATORY_NAME), eq(Collections.singletonList(AUDIT_MESSAGE)));
-		verifyNoMoreInteractions(securityService, schedulerJobDAO, computationalService, exploratoryService);
-	}
+        verify(securityService).getUserInfoOffline(USER);
+        verify(schedulerJobDAO).getExploratorySchedulerDataWithOneOfStatus(RUNNING, STOPPED);
+        verify(exploratoryService).terminate(refEq(getUserInfo()), eq(USER), eq(PROJECT), eq(EXPLORATORY_NAME), eq(AUDIT_MESSAGE));
+        verifyNoMoreInteractions(securityService, schedulerJobDAO, computationalService, exploratoryService);
+    }
 
 	@Test
 	public void testTerminateExploratoryBySchedulerWhenSchedulerIsNotConfigured() {


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