This is an automated email from the ASF dual-hosted git repository.

ofuks pushed a commit to branch sonar
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit f529b0f27f792070478dc38aed5329473b0b6540
Author: Oleh Fuks <olegfuk...@gmail.com>
AuthorDate: Wed Jul 22 11:44:32 2020 +0300

    [DLAB-1870] Intigration with sonar
---
 .../billing/gcp/dao/impl/BigQueryBillingDAO.java   |  11 +-
 .../main/java/com/epam/dlab/model/StringList.java  |  35 ++++---
 .../main/java/com/epam/dlab/util/FileUtils.java    |   2 +-
 services/provisioning-service/pom.xml              |  14 +++
 .../core/response/folderlistener/WatchItem.java    |  20 ++--
 .../handlers/dao/FileSystemCallbackHandlerDao.java |   6 +-
 .../service/impl/CheckInactivityServiceImpl.java   |   2 +-
 .../dlab/backendapi/service/impl/KeyService.java   |   2 +-
 .../service/impl/ProjectServiceImpl.java           |  26 +++--
 .../service/impl/aws/BucketServiceAwsImpl.java     | 113 ++++++++++-----------
 .../service/impl/azure/BucketServiceAzureImpl.java |   8 +-
 .../service/impl/gcp/BucketServiceGcpImpl.java     |  10 +-
 .../dlab/process/builder/ProcessInfoBuilder.java   |  17 +++-
 services/self-service/pom.xml                      |  11 ++
 .../epam/dlab/backendapi/dao/UserRoleDaoImpl.java  |   3 +
 .../dropwizard/listeners/MongoStartupListener.java |   2 +-
 .../listeners/RestoreHandlerStartupListener.java   |   2 +-
 .../backendapi/healthcheck/MongoHealthCheck.java   |   2 +-
 .../backendapi/resources/KeycloakResource.java     |   3 +
 .../schedulers/billing/BillingScheduler.java       |   2 +-
 .../endpoint/CheckEndpointStatusScheduler.java     |   2 +-
 .../service/impl/BillingServiceImpl.java           |  38 +++----
 .../backendapi/service/impl/BucketServiceImpl.java |  10 +-
 .../service/impl/ComputationalServiceImpl.java     |   3 +-
 .../service/impl/EndpointServiceImpl.java          |   2 +-
 .../service/impl/ExploratoryServiceImpl.java       |   4 +-
 .../service/impl/ProjectServiceImpl.java           |   5 +-
 .../servlet/guacamole/GuacamoleServlet.java        |  18 +++-
 .../epam/dlab/backendapi/util/KeycloakUtil.java    |   2 +-
 29 files changed, 215 insertions(+), 160 deletions(-)

diff --git 
a/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/dao/impl/BigQueryBillingDAO.java
 
b/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/dao/impl/BigQueryBillingDAO.java
index 061283d..3a93429 100644
--- 
a/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/dao/impl/BigQueryBillingDAO.java
+++ 
b/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/dao/impl/BigQueryBillingDAO.java
@@ -24,6 +24,7 @@ import com.epam.dlab.billing.gcp.dao.BillingDAO;
 import com.epam.dlab.billing.gcp.model.BillingHistory;
 import com.epam.dlab.billing.gcp.repository.BillingHistoryRepository;
 import com.epam.dlab.dto.billing.BillingData;
+import com.epam.dlab.exceptions.DlabException;
 import com.google.cloud.bigquery.BigQuery;
 import com.google.cloud.bigquery.FieldValueList;
 import com.google.cloud.bigquery.QueryJobConfiguration;
@@ -32,7 +33,6 @@ import com.google.cloud.bigquery.Table;
 import com.google.cloud.bigquery.TableInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.stereotype.Component;
 
 import java.time.Instant;
@@ -53,7 +53,6 @@ public class BigQueryBillingDAO implements BillingDAO {
        private static final String DATASET_PARAM = "dataset";
 
        private final BillingHistoryRepository billingHistoryRepo;
-       private final MongoTemplate mongoTemplate;
        private final BigQuery service;
        private final String dataset;
        private final String sbn;
@@ -69,11 +68,10 @@ public class BigQueryBillingDAO implements BillingDAO {
 
        @Autowired
        public BigQueryBillingDAO(DlabConfiguration conf, 
BillingHistoryRepository billingHistoryRepo,
-                                                         BigQuery service, 
MongoTemplate mongoTemplate) {
+                                 BigQuery service) {
                dataset = conf.getBigQueryDataset();
                this.service = service;
                this.billingHistoryRepo = billingHistoryRepo;
-               this.mongoTemplate = mongoTemplate;
                sbn = conf.getSbn();
        }
 
@@ -107,8 +105,9 @@ public class BigQueryBillingDAO implements BillingDAO {
                                                        
.map(this::toGcpBillingData);
                        billingHistoryRepo.save(new BillingHistory(tableName, 
table.getLastModifiedTime()));
                        return gcpBillingDataStream;
-               } catch (InterruptedException e) {
-                       throw new IllegalStateException("Can not get billing 
info from BigQuery due to: " + e.getMessage(), e);
+               } catch (Exception e) {
+                       log.error("Can not get billing info from BigQuery due 
to {}", e.getMessage(), e);
+                       throw new DlabException("Can not get billing info from 
BigQuery due to: " + e.getMessage(), e);
                }
        }
 
diff --git 
a/services/dlab-model/src/main/java/com/epam/dlab/model/StringList.java 
b/services/dlab-model/src/main/java/com/epam/dlab/model/StringList.java
index d02ad3c..be4ea8e 100644
--- a/services/dlab-model/src/main/java/com/epam/dlab/model/StringList.java
+++ b/services/dlab-model/src/main/java/com/epam/dlab/model/StringList.java
@@ -19,26 +19,29 @@
 
 package com.epam.dlab.model;
 
+import lombok.extern.slf4j.Slf4j;
+
 import javax.ws.rs.WebApplicationException;
 import java.util.ArrayList;
 
+@Slf4j
 public class StringList extends ArrayList<String> {
-    public StringList(String s) {
-        super();
+       public StringList(String s) {
+               super();
 
-        for (String v : s.split(",")) {
-            try {
-                add(v.trim());
-            } catch (Exception ex) {
-                ex.printStackTrace();
-                throw new WebApplicationException(400);
-            }
-        }
-        if (isEmpty())
-            throw new WebApplicationException(400);
-    }
+               for (String v : s.split(",")) {
+                       try {
+                               add(v.trim());
+                       } catch (Exception e) {
+                               log.error("Something went wrong. Reason {}", 
e.getMessage(), e);
+                               throw new WebApplicationException(400);
+                       }
+               }
+               if (isEmpty())
+                       throw new WebApplicationException(400);
+       }
 
-    public static String valueOf(String s) {
-        return s;
-    }
+       public static String valueOf(String s) {
+               return s;
+       }
 }
\ No newline at end of file
diff --git 
a/services/dlab-utils/src/main/java/com/epam/dlab/util/FileUtils.java 
b/services/dlab-utils/src/main/java/com/epam/dlab/util/FileUtils.java
index f48a5af..251902c 100644
--- a/services/dlab-utils/src/main/java/com/epam/dlab/util/FileUtils.java
+++ b/services/dlab-utils/src/main/java/com/epam/dlab/util/FileUtils.java
@@ -55,7 +55,7 @@ public class FileUtils {
                try {
                        Files.deleteIfExists(Paths.get(absolutePath));
                } catch (IOException e) {
-                       log.error("Problems occured with deleting file {} due 
to: {}", absolutePath, e.getLocalizedMessage());
+                       log.error("Problems occured with deleting file {} due 
to: {}", absolutePath, e.getLocalizedMessage(), e);
                }
        }
 }
diff --git a/services/provisioning-service/pom.xml 
b/services/provisioning-service/pom.xml
index 0cec6a5..1c21a6d 100644
--- a/services/provisioning-service/pom.xml
+++ b/services/provisioning-service/pom.xml
@@ -175,6 +175,20 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>**/*Configuration.*</exclude>
+                        <exclude>**/*Module.*</exclude>
+                        <exclude>**/*Form.*</exclude>
+                        <exclude>com/epam/dlab/process/**/*</exclude>
+                        
<exclude>com/epam/dlab/backendapi/modules/**/*</exclude>
+                        
<exclude>com/epam/dlab/backendapi/validation/**/*</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 </project>
\ No newline at end of file
diff --git 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/folderlistener/WatchItem.java
 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/folderlistener/WatchItem.java
index ba72555..bb8fc03 100644
--- 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/folderlistener/WatchItem.java
+++ 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/folderlistener/WatchItem.java
@@ -20,18 +20,19 @@
 
 package com.epam.dlab.backendapi.core.response.folderlistener;
 
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutionException;
-
 import com.epam.dlab.backendapi.core.FileHandlerCallback;
 import com.google.common.base.MoreObjects;
 import lombok.extern.slf4j.Slf4j;
 
-/** Class to store the file handler for processing.
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+
+/**
+ * Class to store the file handler for processing.
  */
 @Slf4j
 public class WatchItem implements Comparable<WatchItem> {
-       
+
        /** Status of file processing.
         * <pre>
         * WAIT_FOR_FILE waiting for the file creation.
@@ -149,9 +150,10 @@ public class WatchItem implements Comparable<WatchItem> {
                        } catch (InterruptedException e) {
                        Thread.currentThread().interrupt();
                                return ItemStatus.IS_INTERRUPTED;
-                       } catch (ExecutionException e) {
-                               return ItemStatus.IS_FAILED;
-                       }
+                   } catch (ExecutionException e) {
+                           log.error("Execution exception occurred", e);
+                           return ItemStatus.IS_FAILED;
+                   }
        }
        
        return ItemStatus.INPROGRESS;
@@ -182,7 +184,7 @@ public class WatchItem implements Comparable<WatchItem> {
                        try {
                                futureResult = future.get();
                        } catch (Exception e) {
-                               log.error("Exception occurred during getting 
result: {}", e.getMessage());
+                               log.error("Exception occurred during getting 
result: {}", e.getMessage(), e);
                        }
                }
                return futureResult; 
diff --git 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/dao/FileSystemCallbackHandlerDao.java
 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/dao/FileSystemCallbackHandlerDao.java
index 846e0d7..268950a 100644
--- 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/dao/FileSystemCallbackHandlerDao.java
+++ 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/dao/FileSystemCallbackHandlerDao.java
@@ -89,7 +89,7 @@ public class FileSystemCallbackHandlerDao implements 
CallbackHandlerDao {
                                        .ifPresent(FileUtils::deleteFile);
                } catch (IOException e) {
                        log.error("Problem occurred with accessing directory {} 
due to: {}", configuration.getHandlerDirectory(),
-                                       e.getLocalizedMessage());
+                                       e.getLocalizedMessage(), e);
                }
        }
 
@@ -102,7 +102,7 @@ public class FileSystemCallbackHandlerDao implements 
CallbackHandlerDao {
                        log.trace("Persisting callback handler to file {}", 
absolutePath);
                        Files.write(Paths.get(absolutePath), 
mapper.writeValueAsBytes(handlerCallback), StandardOpenOption.CREATE);
                } catch (Exception e) {
-                       log.warn("Can not persist file handler {} due to {}", 
fileName, e.getMessage());
+                       log.warn("Can not persist file handler {} due to {}", 
fileName, e.getMessage(), e);
                }
        }
 
@@ -114,7 +114,7 @@ public class FileSystemCallbackHandlerDao implements 
CallbackHandlerDao {
                try {
                        return Optional.of(mapper.readValue(path.toFile(), 
PersistentFileHandler.class));
                } catch (Exception e) {
-                       log.warn("Can not deserialize file handler from file: 
{}", path.toString());
+                       log.warn("Can not deserialize file handler from file: 
{}", path.toString(), e);
                }
                return Optional.empty();
        }
diff --git 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/CheckInactivityServiceImpl.java
 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/CheckInactivityServiceImpl.java
index 3713589..59e67b4 100644
--- 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/CheckInactivityServiceImpl.java
+++ 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/CheckInactivityServiceImpl.java
@@ -118,7 +118,7 @@ public class CheckInactivityServiceImpl extends 
DockerService implements CheckIn
                        commandExecutor.executeAsync(userName, uuid, command);
                } catch (Exception e) {
                        log.error("Exception occured during reuploading key: {} 
for command {}", e.getLocalizedMessage(),
-                                       dockerCmd.toCMD());
+                                       dockerCmd.toCMD(), e);
                }
        }
 
diff --git 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/KeyService.java
 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/KeyService.java
index bbedc68..5d650da 100644
--- 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/KeyService.java
+++ 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/KeyService.java
@@ -89,7 +89,7 @@ public class KeyService extends DockerService implements 
DockerCommands {
                        commandExecutor.executeAsync(userName, uuid, command);
                } catch (Exception e) {
                        log.error("Exception occured during reuploading key: {} 
for command {}", e.getLocalizedMessage(),
-                                       runDockerCommand.toCMD());
+                                       runDockerCommand.toCMD(), e);
                }
        }
 
diff --git 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
index 1daf93f..e84a7f3 100644
--- 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
+++ 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
@@ -29,16 +29,22 @@ public class ProjectServiceImpl implements ProjectService {
        private static final String PROJECT_IMAGE = "docker.dlab-project";
        private static final String EDGE_IMAGE = "docker.dlab-edge";
        private static final String CALLBACK_URI = "/api/project/status";
+
+       protected final RESTService selfService;
+       private final ProvisioningServiceApplicationConfiguration configuration;
+       private final FolderListenerExecutor folderListenerExecutor;
+       private final ICommandExecutor commandExecutor;
+       private final CommandBuilder commandBuilder;
+
        @Inject
-       protected RESTService selfService;
-       @Inject
-       private ProvisioningServiceApplicationConfiguration configuration;
-       @Inject
-       private FolderListenerExecutor folderListenerExecutor;
-       @Inject
-       private ICommandExecutor commandExecutor;
-       @Inject
-       private CommandBuilder commandBuilder;
+       public ProjectServiceImpl(RESTService selfService, 
ProvisioningServiceApplicationConfiguration configuration,
+                                 FolderListenerExecutor 
folderListenerExecutor, ICommandExecutor commandExecutor, CommandBuilder 
commandBuilder) {
+               this.selfService = selfService;
+               this.configuration = configuration;
+               this.folderListenerExecutor = folderListenerExecutor;
+               this.commandExecutor = commandExecutor;
+               this.commandBuilder = commandBuilder;
+       }
 
        @Override
        public String create(UserInfo userInfo, ProjectCreateDTO dto) {
@@ -92,7 +98,7 @@ public class ProjectServiceImpl implements ProjectService {
                try {
                        commandExecutor.executeAsync(userInfo.getName(), uuid, 
commandBuilder.buildCommand(runDockerCommand, dto));
                } catch (JsonProcessingException e) {
-                       e.printStackTrace();
+                       log.error("Something went wrong. Reason {}", 
e.getMessage(), e);
                }
                return uuid;
        }
diff --git 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/aws/BucketServiceAwsImpl.java
 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/aws/BucketServiceAwsImpl.java
index 79831a4..6c5673d 100644
--- 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/aws/BucketServiceAwsImpl.java
+++ 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/aws/BucketServiceAwsImpl.java
@@ -48,19 +48,18 @@ public class BucketServiceAwsImpl implements BucketService {
 
     @Override
     public List<BucketDTO> getObjects(String bucket) {
-        try {
-            S3Client s3 = S3Client.create();
-            ListObjectsRequest getRequest = ListObjectsRequest
-                    .builder()
-                    .bucket(bucket)
-                    .build();
+        try (S3Client s3 = S3Client.create()) {
+               ListObjectsRequest getRequest = ListObjectsRequest
+                               .builder()
+                               .bucket(bucket)
+                               .build();
 
-            return s3.listObjects(getRequest).contents()
-                    .stream()
-                    .map(o -> toBucketDTO(bucket, o))
-                    .collect(Collectors.toList());
+               return s3.listObjects(getRequest).contents()
+                               .stream()
+                               .map(o -> toBucketDTO(bucket, o))
+                               .collect(Collectors.toList());
         } catch (Exception e) {
-            log.error("Cannot retrieve objects from bucket {}. Reason: {}", 
bucket, e.getMessage());
+               log.error("Cannot retrieve objects from bucket {}. Reason: {}", 
bucket, e.getMessage(), e);
             throw new DlabException(String.format("Cannot retrieve objects 
from bucket %s. Reason: %s", bucket, e.getMessage()));
         }
     }
@@ -68,18 +67,17 @@ public class BucketServiceAwsImpl implements BucketService {
     @Override
     public void uploadObject(String bucket, String object, InputStream stream, 
String contentType, long fileSize) {
         log.info("Uploading file {} to bucket {}", object, bucket);
-        try {
-            S3Client s3 = S3Client.create();
-            PutObjectRequest uploadRequest = PutObjectRequest
-                    .builder()
-                    .bucket(bucket)
-                    .key(object)
-                    .contentType(contentType)
-                    .build();
-            s3.putObject(uploadRequest, RequestBody.fromInputStream(stream, 
fileSize));
-        } catch (Exception e) {
-            log.error("Cannot upload object {} to bucket {}. Reason: {}", 
object, bucket, e.getMessage());
-            throw new DlabException(String.format("Cannot upload object %s to 
bucket %s. Reason: %s", object, bucket, e.getMessage()));
+           try (S3Client s3 = S3Client.create()) {
+                   PutObjectRequest uploadRequest = PutObjectRequest
+                                   .builder()
+                                   .bucket(bucket)
+                                   .key(object)
+                                   .contentType(contentType)
+                                   .build();
+                   s3.putObject(uploadRequest, 
RequestBody.fromInputStream(stream, fileSize));
+           } catch (Exception e) {
+                   log.error("Cannot upload object {} to bucket {}. Reason: 
{}", object, bucket, e.getMessage(), e);
+                   throw new DlabException(String.format("Cannot upload object 
%s to bucket %s. Reason: %s", object, bucket, e.getMessage()));
         }
         log.info("Finished uploading file {} to bucket {}", object, bucket);
     }
@@ -87,60 +85,57 @@ public class BucketServiceAwsImpl implements BucketService {
     @Override
     public void uploadFolder(UserInfo userInfo, String bucket, String folder) {
         log.info("Uploading folder {} to bucket {}", folder, bucket);
-        try {
-            S3Client s3 = S3Client.create();
-            PutObjectRequest uploadRequest = PutObjectRequest
-                    .builder()
-                    .bucket(bucket)
-                    .key(folder)
-                    .build();
-            s3.putObject(uploadRequest, RequestBody.empty());
-        } catch (Exception e) {
-            log.error("Cannot upload folder {} to bucket {}. Reason: {}", 
folder, bucket, e.getMessage());
-            throw new DlabException(String.format("Cannot upload folder %s to 
bucket %s. Reason: %s", folder, bucket, e.getMessage()));
-        }
+           try (S3Client s3 = S3Client.create()) {
+                   PutObjectRequest uploadRequest = PutObjectRequest
+                                   .builder()
+                                   .bucket(bucket)
+                                   .key(folder)
+                                   .build();
+                   s3.putObject(uploadRequest, RequestBody.empty());
+           } catch (Exception e) {
+                   log.error("Cannot upload folder {} to bucket {}. Reason: 
{}", folder, bucket, e.getMessage(), e);
+                   throw new DlabException(String.format("Cannot upload folder 
%s to bucket %s. Reason: %s", folder, bucket, e.getMessage()));
+           }
         log.info("Finished uploading folder {} to bucket {}", folder, bucket);
     }
 
     @Override
     public void downloadObject(String bucket, String object, 
HttpServletResponse resp) {
         log.info("Downloading file {} from bucket {}", object, bucket);
-        try (ServletOutputStream outputStream = resp.getOutputStream()) {
-            S3Client s3 = S3Client.create();
-            GetObjectRequest downloadRequest = GetObjectRequest
-                    .builder()
-                    .bucket(bucket)
-                    .key(object)
-                    .build();
-            s3.getObject(downloadRequest, 
ResponseTransformer.toOutputStream(outputStream));
-        } catch (Exception e) {
-            log.error("Cannot download object {} from bucket {}. Reason: {}", 
object, bucket, e.getMessage());
-            throw new DlabException(String.format("Cannot download object %s 
from bucket %s. Reason: %s", object, bucket, e.getMessage()));
-        }
+           try (ServletOutputStream outputStream = resp.getOutputStream(); 
S3Client s3 = S3Client.create()) {
+                   GetObjectRequest downloadRequest = GetObjectRequest
+                                   .builder()
+                                   .bucket(bucket)
+                                   .key(object)
+                                   .build();
+                   s3.getObject(downloadRequest, 
ResponseTransformer.toOutputStream(outputStream));
+           } catch (Exception e) {
+                   log.error("Cannot download object {} from bucket {}. 
Reason: {}", object, bucket, e.getMessage(), e);
+                   throw new DlabException(String.format("Cannot download 
object %s from bucket %s. Reason: %s", object, bucket, e.getMessage()));
+           }
         log.info("Finished downloading file {} from bucket {}", object, 
bucket);
     }
 
     @Override
     public void deleteObjects(String bucket, List<String> objects) {
-        try {
-            S3Client s3 = S3Client.create();
-            List<ObjectIdentifier> objectsToDelete = objects
-                    .stream()
-                    .map(o -> ObjectIdentifier.builder()
-                            .key(o)
-                            .build())
-                    .collect(Collectors.toList());
+           try (S3Client s3 = S3Client.create()) {
+                   List<ObjectIdentifier> objectsToDelete = objects
+                                   .stream()
+                                   .map(o -> ObjectIdentifier.builder()
+                                                   .key(o)
+                                                   .build())
+                                   .collect(Collectors.toList());
 
-            DeleteObjectsRequest deleteObjectsRequests = 
DeleteObjectsRequest.builder()
-                    .bucket(bucket)
-                    .delete(Delete.builder()
+                   DeleteObjectsRequest deleteObjectsRequests = 
DeleteObjectsRequest.builder()
+                                   .bucket(bucket)
+                                   .delete(Delete.builder()
                             .objects(objectsToDelete)
                             .build())
                     .build();
 
             s3.deleteObjects(deleteObjectsRequests);
         } catch (Exception e) {
-            log.error("Cannot delete objects {} from bucket {}. Reason: {}", 
objects, bucket, e.getMessage());
+                   log.error("Cannot delete objects {} from bucket {}. Reason: 
{}", objects, bucket, e.getMessage(), e);
             throw new DlabException(String.format("Cannot delete objects %s 
from bucket %s. Reason: %s", objects, bucket, e.getMessage()));
         }
     }
diff --git 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/azure/BucketServiceAzureImpl.java
 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/azure/BucketServiceAzureImpl.java
index 1b55711..52163a1 100644
--- 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/azure/BucketServiceAzureImpl.java
+++ 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/azure/BucketServiceAzureImpl.java
@@ -50,7 +50,7 @@ public class BucketServiceAzureImpl implements BucketService {
                     .map(blob -> toBucketDTO(bucket, blob))
                     .collect(Collectors.toList());
         } catch (Exception e) {
-            log.error("Cannot retrieve objects from bucket {}. Reason: {}", 
bucket, e.getMessage());
+            log.error("Cannot retrieve objects from bucket {}. Reason: {}", 
bucket, e.getMessage(), e);
             throw new DlabException(String.format("Cannot retrieve objects 
from bucket %s. Reason: %s", bucket, e.getMessage()));
         }
     }
@@ -64,7 +64,7 @@ public class BucketServiceAzureImpl implements BucketService {
             BlobClient blobClient = blobContainerClient.getBlobClient(object);
             blobClient.upload(stream, fileSize);
         } catch (Exception e) {
-            log.error("Cannot upload object {} to bucket {}. Reason: {}", 
object, bucket, e.getMessage());
+               log.error("Cannot upload object {} to bucket {}. Reason: {}", 
object, bucket, e.getMessage(), e);
             throw new DlabException(String.format("Cannot upload object %s to 
bucket %s. Reason: %s", object, bucket, e.getMessage()));
         }
         log.info("Finished uploading file {} to bucket {}", object, bucket);
@@ -84,7 +84,7 @@ public class BucketServiceAzureImpl implements BucketService {
             BlobClient blobClient = blobContainerClient.getBlobClient(object);
             blobClient.download(outputStream);
         } catch (Exception e) {
-            log.error("Cannot download object {} from bucket {}. Reason: {}", 
object, bucket, e.getMessage());
+               log.error("Cannot download object {} from bucket {}. Reason: 
{}", object, bucket, e.getMessage(), e);
             throw new DlabException(String.format("Cannot download object %s 
from bucket %s. Reason: %s", object, bucket, e.getMessage()));
         }
         log.info("Finished downloading file {} from bucket {}", object, 
bucket);
@@ -97,7 +97,7 @@ public class BucketServiceAzureImpl implements BucketService {
             BlobContainerClient blobContainerClient = 
blobServiceClient.getBlobContainerClient(bucket);
             objects.forEach(object -> 
blobContainerClient.getBlobClient(object).delete());
         } catch (Exception e) {
-            log.error("Cannot delete objects {} from bucket {}. Reason: {}", 
objects, bucket, e.getMessage());
+               log.error("Cannot delete objects {} from bucket {}. Reason: 
{}", objects, bucket, e.getMessage(), e);
             throw new DlabException(String.format("Cannot delete objects %s 
from bucket %s. Reason: %s", objects, bucket, e.getMessage()));
         }
     }
diff --git 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/gcp/BucketServiceGcpImpl.java
 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/gcp/BucketServiceGcpImpl.java
index 2f0b15a..4a28bf6 100644
--- 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/gcp/BucketServiceGcpImpl.java
+++ 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/gcp/BucketServiceGcpImpl.java
@@ -52,7 +52,7 @@ public class BucketServiceGcpImpl implements BucketService {
                     .map(this::toBucketDTO)
                     .collect(Collectors.toList());
         } catch (Exception e) {
-            log.error("Cannot retrieve objects from bucket {}. Reason: {}", 
bucket, e.getMessage());
+            log.error("Cannot retrieve objects from bucket {}. Reason: {}", 
bucket, e.getMessage(), e);
             throw new DlabException(String.format("Cannot retrieve objects 
from bucket %s. Reason: %s", bucket, e.getMessage()));
         }
     }
@@ -68,7 +68,7 @@ public class BucketServiceGcpImpl implements BucketService {
                     .build();
             storage.create(blobInfo, stream);
         } catch (Exception e) {
-            log.error("Cannot upload object {} to bucket {}. Reason: {}", 
object, bucket, e.getMessage());
+               log.error("Cannot upload object {} to bucket {}. Reason: {}", 
object, bucket, e.getMessage(), e);
             throw new DlabException(String.format("Cannot upload object %s to 
bucket %s. Reason: %s", object, bucket, e.getMessage()));
         }
         log.info("Finished uploading file {} to bucket {}", object, bucket);
@@ -83,7 +83,7 @@ public class BucketServiceGcpImpl implements BucketService {
             BlobInfo blobInfo = BlobInfo.newBuilder(blobId).build();
             storage.create(blobInfo);
         } catch (Exception e) {
-            log.error("Cannot upload folder {} to bucket {}. Reason: {}", 
folder, bucket, e.getMessage());
+               log.error("Cannot upload folder {} to bucket {}. Reason: {}", 
folder, bucket, e.getMessage(), e);
             throw new DlabException(String.format("Cannot upload folder %s to 
bucket %s. Reason: %s", folder, bucket, e.getMessage()));
         }
         log.info("Finished uploading folder {} to bucket {}", folder, bucket);
@@ -98,7 +98,7 @@ public class BucketServiceGcpImpl implements BucketService {
             blob.downloadTo(outputStream);
             log.info("Finished downloading file {} from bucket {}", object, 
bucket);
         } catch (Exception e) {
-            log.error("Cannot download object {} from bucket {}. Reason: {}", 
object, bucket, e.getMessage());
+               log.error("Cannot download object {} from bucket {}. Reason: 
{}", object, bucket, e.getMessage(), e);
             throw new DlabException(String.format("Cannot download object %s 
from bucket %s. Reason: %s", object, bucket, e.getMessage()));
         }
         log.info("Finished downloading file {} from bucket {}", object, 
bucket);
@@ -114,7 +114,7 @@ public class BucketServiceGcpImpl implements BucketService {
                     .collect(Collectors.toList());
             storage.delete(blobIds);
         } catch (Exception e) {
-            log.error("Cannot delete objects {} from bucket {}. Reason: {}", 
objects, bucket, e.getMessage());
+               log.error("Cannot delete objects {} from bucket {}. Reason: 
{}", objects, bucket, e.getMessage(), e);
             throw new DlabException(String.format("Cannot delete objects %s 
from bucket %s. Reason: %s", objects, bucket, e.getMessage()));
         }
     }
diff --git 
a/services/provisioning-service/src/main/java/com/epam/dlab/process/builder/ProcessInfoBuilder.java
 
b/services/provisioning-service/src/main/java/com/epam/dlab/process/builder/ProcessInfoBuilder.java
index f790fea..15a0e1e 100644
--- 
a/services/provisioning-service/src/main/java/com/epam/dlab/process/builder/ProcessInfoBuilder.java
+++ 
b/services/provisioning-service/src/main/java/com/epam/dlab/process/builder/ProcessInfoBuilder.java
@@ -38,7 +38,16 @@ import java.util.concurrent.CompletableFuture;
 import java.util.function.Function;
 import java.util.function.Supplier;
 
-import static com.epam.dlab.process.model.ProcessStatus.*;
+import static com.epam.dlab.process.model.ProcessStatus.CREATED;
+import static com.epam.dlab.process.model.ProcessStatus.FAILED;
+import static com.epam.dlab.process.model.ProcessStatus.FINISHED;
+import static com.epam.dlab.process.model.ProcessStatus.KILLED;
+import static com.epam.dlab.process.model.ProcessStatus.LAUNCHING;
+import static com.epam.dlab.process.model.ProcessStatus.REJECTED;
+import static com.epam.dlab.process.model.ProcessStatus.RUNNING;
+import static com.epam.dlab.process.model.ProcessStatus.SCHEDULED;
+import static com.epam.dlab.process.model.ProcessStatus.STOPPED;
+import static com.epam.dlab.process.model.ProcessStatus.TIMEOUT;
 
 @Slf4j
 public class ProcessInfoBuilder implements Supplier<ProcessInfo>, Testing, 
TimeoutAction, Expireable {
@@ -168,7 +177,7 @@ public class ProcessInfoBuilder implements 
Supplier<ProcessInfo>, Testing, Timeo
                        try {
                                future.get();
                        } catch (Exception e) {
-                               log.error("Exception occurred during getting 
future result: {}", e.getMessage());
+                               log.error("Exception occurred during getting 
future result: {}", e.getMessage(), e);
                        }
                });
        }
@@ -267,14 +276,14 @@ public class ProcessInfoBuilder implements 
Supplier<ProcessInfo>, Testing, Timeo
                                        try {
                                                return fPid.getInt(p);
                                        } catch (IllegalAccessException e) {
-                                               log.error("Unable to access 
PID. {}", e.getMessage());
+                                               log.error("Unable to access 
PID. {}", e.getMessage(), e);
                                                return -1;
                                        }
                                };
                        }
                        return pidSupplier.apply(process);
                } catch (NoSuchFieldException e) {
-                       log.debug("PID field not found");
+                       log.debug("PID field not found", e);
                        pidSupplier = p -> -1;
                        return -1;
                }
diff --git a/services/self-service/pom.xml b/services/self-service/pom.xml
index f21caf9..b5c075b 100644
--- a/services/self-service/pom.xml
+++ b/services/self-service/pom.xml
@@ -257,6 +257,17 @@
                         <exclude>**/*Module.*</exclude>
                         <exclude>**/*Form.*</exclude>
                         <exclude>com/epam/dlab/dto/**/*</exclude>
+                        <exclude>com/epam/dlab/backendapi/auth/**/*</exclude>
+                        <exclude>com/epam/dlab/backendapi/conf/**/*</exclude>
+                        <exclude>com/epam/dlab/backendapi/domain/**/*</exclude>
+                        
<exclude>com/epam/dlab/backendapi/dropwizard/**/*</exclude>
+                        
<exclude>com/epam/dlab/backendapi/healthcheck/**/*</exclude>
+                        
<exclude>com/epam/dlab/backendapi/modules/**/*</exclude>
+                        
<exclude>com/epam/dlab/backendapi/resources/dto/**/*</exclude>
+                        <exclude>com/epam/dlab/backendapi/roles/**/*</exclude>
+                        
<exclude>com/epam/dlab/backendapi/servlet/guacamole/**/*</exclude>
+                        <exclude>com/epam/dlab/backendapi/util/**/*</exclude>
+                        
<exclude>com/epam/dlab/backendapi/validation/**/*</exclude>
                     </excludes>
                 </configuration>
             </plugin>
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserRoleDaoImpl.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserRoleDaoImpl.java
index e95a41b..c38b3e9 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserRoleDaoImpl.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserRoleDaoImpl.java
@@ -27,6 +27,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.inject.Singleton;
 import com.mongodb.client.model.BsonField;
 import com.mongodb.client.result.UpdateResult;
+import lombok.extern.slf4j.Slf4j;
 import org.bson.Document;
 import org.bson.conversions.Bson;
 
@@ -53,6 +54,7 @@ import static java.lang.String.format;
 import static java.util.stream.Collectors.toList;
 
 @Singleton
+@Slf4j
 public class UserRoleDaoImpl extends BaseDAO implements UserRoleDao {
        private static final ObjectMapper MAPPER = new ObjectMapper();
        private static final String[] DEFAULT_AWS_SHAPES = 
{"nbShapes_t2.medium_fetching", "compShapes_c4.xlarge_fetching"};
@@ -177,6 +179,7 @@ public class UserRoleDaoImpl extends BaseDAO implements 
UserRoleDao {
                        return MAPPER.readValue(is, new 
TypeReference<List<UserRoleDto>>() {
                        });
                } catch (IOException e) {
+                       log.error("Can not marshall dlab roles due to: {}", 
e.getMessage(), e);
                        throw new IllegalStateException("Can not marshall dlab 
roles due to: " + e.getMessage());
                }
        }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dropwizard/listeners/MongoStartupListener.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dropwizard/listeners/MongoStartupListener.java
index d25e2dd..b362acf 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dropwizard/listeners/MongoStartupListener.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dropwizard/listeners/MongoStartupListener.java
@@ -71,7 +71,7 @@ public class MongoStartupListener implements 
ServerLifecycleListener {
                        return MAPPER.readValue(is, new 
TypeReference<List<UserRoleDto>>() {
                        });
                } catch (IOException e) {
-                       log.error("Can not marshall dlab roles due to: {}", 
e.getMessage());
+                       log.error("Can not marshall dlab roles due to: {}", 
e.getMessage(), e);
                        throw new IllegalStateException("Can not marshall dlab 
roles due to: " + e.getMessage());
                }
        }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dropwizard/listeners/RestoreHandlerStartupListener.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dropwizard/listeners/RestoreHandlerStartupListener.java
index 0de166c..a92cae5 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dropwizard/listeners/RestoreHandlerStartupListener.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dropwizard/listeners/RestoreHandlerStartupListener.java
@@ -44,7 +44,7 @@ public class RestoreHandlerStartupListener implements 
ServerLifecycleListener {
                        
endpointService.getEndpointsWithStatus(EndpointDTO.EndpointStatus.ACTIVE)
                                        .forEach(e -> 
provisioningService.post(e.getUrl() + "/handler/restore", StringUtils.EMPTY, 
Object.class));
                } catch (Exception e) {
-                       log.error("Exception occurred during restore handler 
request: {}", e.getMessage());
+                       log.error("Exception occurred during restore handler 
request: {}", e.getMessage(), e);
                }
        }
 }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/healthcheck/MongoHealthCheck.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/healthcheck/MongoHealthCheck.java
index 262671c..5ce1b28 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/healthcheck/MongoHealthCheck.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/healthcheck/MongoHealthCheck.java
@@ -38,7 +38,7 @@ public class MongoHealthCheck extends HealthCheck {
                try {
                        mongoService.ping();
                } catch (Exception e) {
-                       log.error("Mongo is unavailable {}", e.getMessage());
+                       log.error("Mongo is unavailable {}", e.getMessage(), e);
                        return Result.unhealthy(e.getMessage());
                }
                return Result.healthy();
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/KeycloakResource.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/KeycloakResource.java
index e7f8836..142e953 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/KeycloakResource.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/KeycloakResource.java
@@ -11,6 +11,7 @@ import com.epam.dlab.exceptions.DlabException;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.inject.Inject;
 import io.dropwizard.auth.Auth;
+import lombok.extern.slf4j.Slf4j;
 import org.keycloak.representations.AccessTokenResponse;
 
 import javax.ws.rs.GET;
@@ -27,6 +28,7 @@ import java.net.URISyntaxException;
 import static java.lang.String.format;
 
 @Path("/oauth")
+@Slf4j
 public class KeycloakResource {
        private static final String LOGIN_URI_FORMAT = 
"%s/realms/%s/protocol/openid-connect/auth?client_id=%s" +
                        "&redirect_uri=%s&response_type=code";
@@ -97,6 +99,7 @@ public class KeycloakResource {
                try {
                        tokenResponse = 
keycloakService.generateAccessToken(refreshToken);
                } catch (DlabException e) {
+                       log.error("Cannot refresh token due to: {}", 
e.getMessage(), e);
                        return Response.status(Response.Status.BAD_REQUEST)
                                        .location(new URI(logoutUri))
                                        .build();
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/schedulers/billing/BillingScheduler.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/schedulers/billing/BillingScheduler.java
index 45563a2..ad3ffcc 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/schedulers/billing/BillingScheduler.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/schedulers/billing/BillingScheduler.java
@@ -46,7 +46,7 @@ public class BillingScheduler implements Job {
         try {
             
billingService.updateRemoteBillingData(securityService.getServiceAccountInfo("admin"));
         } catch (Exception e) {
-            log.error("Something went wrong {}", e.getMessage());
+            log.error("Something went wrong {}", e.getMessage(), e);
         }
     }
 }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/schedulers/endpoint/CheckEndpointStatusScheduler.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/schedulers/endpoint/CheckEndpointStatusScheduler.java
index 5707553..02d109d 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/schedulers/endpoint/CheckEndpointStatusScheduler.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/schedulers/endpoint/CheckEndpointStatusScheduler.java
@@ -50,7 +50,7 @@ public class CheckEndpointStatusScheduler implements Job {
         try {
             endpointService.checkUrl(serviceUser, endpoint.getUrl());
         } catch (Exception e) {
-            log.warn("Failed connecting to endpoint {}, url: '{}'. {}", 
endpoint.getName(), endpoint.getUrl(), e.getMessage());
+            log.warn("Failed connecting to endpoint {}, url: '{}'. {}", 
endpoint.getName(), endpoint.getUrl(), e.getMessage(), e);
             return endpoint.getStatus() == EndpointDTO.EndpointStatus.ACTIVE;
         }
         return endpoint.getStatus() == EndpointDTO.EndpointStatus.INACTIVE;
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImpl.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImpl.java
index 2bcf644..1b3c208 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImpl.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImpl.java
@@ -116,12 +116,12 @@ public class BillingServiceImpl implements BillingService 
{
         final double sum = 
billingReportLines.stream().mapToDouble(BillingReportLine::getCost).sum();
         final String currency = 
billingReportLines.stream().map(BillingReportLine::getCurrency).distinct().count()
 == 1 ? billingReportLines.get(0).getCurrency() : null;
         return BillingReport.builder()
-                .name("Billing report")
-                .sbn(sbn)
-                .reportLines(billingReportLines)
-                .usageDateFrom(min)
-                .usageDateTo(max)
-                .totalCost(new BigDecimal(sum).setScale(2, 
BigDecimal.ROUND_HALF_UP).doubleValue())
+                       .name("Billing report")
+                       .sbn(sbn)
+                       .reportLines(billingReportLines)
+                       .usageDateFrom(min)
+                       .usageDateTo(max)
+                       .totalCost(BigDecimal.valueOf(sum).setScale(2, 
BigDecimal.ROUND_HALF_UP).doubleValue())
                 .currency(currency)
                 .isReportHeaderCompletable(hasUserBillingRole(user))
                 .build();
@@ -155,9 +155,9 @@ public class BillingServiceImpl implements BillingService {
                 .collect(Collectors.toList());;
         final String currency = 
billingData.stream().map(BillingReportLine::getCurrency).distinct().count() == 
1 ? billingData.get(0).getCurrency() : null;
         return BillingReport.builder()
-                .name(exploratoryName)
-                .reportLines(billingData)
-                .totalCost(new BigDecimal(sum).setScale(2, 
BigDecimal.ROUND_HALF_UP).doubleValue())
+                       .name(exploratoryName)
+                       .reportLines(billingData)
+                       .totalCost(BigDecimal.valueOf(sum).setScale(2, 
BigDecimal.ROUND_HALF_UP).doubleValue())
                 .currency(currency)
                 .build();
     }
@@ -297,16 +297,16 @@ public class BillingServiceImpl implements BillingService 
{
         billingDAO.save(billingReportLines);
     }
 
-    private List<BillingData> getBillingData(UserInfo userInfo, EndpointDTO e) 
{
-        try {
-            return provisioningService.get(getBillingUrl(e.getUrl(), 
BILLING_PATH), userInfo.getAccessToken(),
-                    new GenericType<List<BillingData>>() {
-                    });
-        } catch (Exception ex) {
-            log.error("Cannot retrieve billing information for {}. {}", 
e.getName(), ex.getMessage());
-            return Collections.emptyList();
-        }
-    }
+       private List<BillingData> getBillingData(UserInfo userInfo, EndpointDTO 
endpointDTO) {
+               try {
+                       return 
provisioningService.get(getBillingUrl(endpointDTO.getUrl(), BILLING_PATH), 
userInfo.getAccessToken(),
+                                       new GenericType<List<BillingData>>() {
+                                       });
+               } catch (Exception e) {
+                       log.error("Cannot retrieve billing information for {} . 
Reason {}.", endpointDTO.getName(), e.getMessage(), e);
+                       return Collections.emptyList();
+               }
+       }
 
     private String getBillingUrl(String endpointUrl, String path) {
         URI uri;
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 0d27a86..a8487ba 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
@@ -83,7 +83,7 @@ public class BucketServiceImpl implements BucketService {
             return provisioningService.get(String.format(BUCKET_GET_OBJECTS, 
endpointDTO.getUrl(), bucket), userInfo.getAccessToken(), new 
GenericType<List<BucketDTO>>() {
             });
         } catch (Exception e) {
-            log.error("Cannot get objects from bucket {} for user {}, endpoint 
{}. Reason {}", bucket, userInfo.getName(), endpoint, e.getMessage());
+            log.error("Cannot get objects from bucket {} for user {}, endpoint 
{}. Reason {}", bucket, userInfo.getName(), endpoint, e.getMessage(), e);
             throw new DlabException(String.format("Cannot get objects from 
bucket %s for user %s, endpoint %s. Reason %s", bucket, userInfo.getName(), 
endpoint, e.getMessage()));
         }
     }
@@ -100,7 +100,7 @@ public class BucketServiceImpl implements BucketService {
                 throw new DlabException(String.format("Something went wrong. 
Response status is %s ", response.getStatus()));
             }
         } catch (Exception e) {
-            log.error("Cannot upload object {} to bucket {} for user {}, 
endpoint {}. Reason {}", object, bucket, userInfo.getName(), endpoint, 
e.getMessage());
+               log.error("Cannot upload object {} to bucket {} for user {}, 
endpoint {}. Reason {}", object, bucket, userInfo.getName(), endpoint, 
e.getMessage(), e);
             throw new DlabException(String.format("Cannot upload object %s to 
bucket %s for user %s, endpoint %s. Reason %s", object, bucket, 
userInfo.getName(), endpoint, e.getMessage()));
         }
         log.info("Finished uploading file {} for user {} to bucket {}", 
object, userInfo.getName(), bucket);
@@ -121,7 +121,7 @@ public class BucketServiceImpl implements BucketService {
                 throw new DlabException(String.format("Something went wrong. 
Response status is %s ", response.getStatus()));
             }
         } catch (Exception e) {
-            log.error("Cannot upload folder {} to bucket {} for user {}, 
endpoint {}. Reason {}", folder, bucket, userInfo.getName(), endpoint, 
e.getMessage());
+               log.error("Cannot upload folder {} to bucket {} for user {}, 
endpoint {}. Reason {}", folder, bucket, userInfo.getName(), endpoint, 
e.getMessage(), e);
             throw new DlabException(String.format("Cannot upload object %s to 
bucket %s for user %s, endpoint %s. Reason %s", folder, bucket, 
userInfo.getName(), endpoint, e.getMessage()));
         }
         log.info("Finished uploading folder {} for user {} to bucket {}", 
folder, userInfo.getName(), bucket);
@@ -137,7 +137,7 @@ public class BucketServiceImpl implements BucketService {
             IOUtils.copyLarge(inputStream, outputStream);
             log.info("Finished downloading file {} for user {} from bucket 
{}", object, userInfo.getName(), bucket);
         } catch (Exception e) {
-            log.error("Cannot upload object {} from bucket {} for user {}, 
endpoint {}. Reason {}", object, bucket, userInfo.getName(), endpoint, 
e.getMessage());
+               log.error("Cannot upload object {} from bucket {} for user {}, 
endpoint {}. Reason {}", object, bucket, userInfo.getName(), endpoint, 
e.getMessage(), e);
             throw new DlabException(String.format("Cannot download object %s 
from bucket %s for user %s, endpoint %s. Reason %s", object, bucket, 
userInfo.getName(), endpoint, e.getMessage()));
         }
     }
@@ -153,7 +153,7 @@ public class BucketServiceImpl implements BucketService {
                 throw new DlabException(String.format("Something went wrong. 
Response status is %s ", response.getStatus()));
             }
         } catch (Exception e) {
-            log.error("Cannot delete objects {} from bucket {} for user {}, 
endpoint {}. Reason {}", objects, bucket, userInfo.getName(), endpoint, 
e.getMessage());
+               log.error("Cannot delete objects {} from bucket {} for user {}, 
endpoint {}. Reason {}", objects, bucket, userInfo.getName(), endpoint, 
e.getMessage(), e);
             throw new DlabException(String.format("Cannot delete objects %s 
from bucket %s for user %s, endpoint %s. Reason %s", objects, bucket, 
userInfo.getName(), endpoint, e.getMessage()));
         }
     }
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 1bfd0b7..0a87667 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
@@ -340,8 +340,7 @@ public class ComputationalServiceImpl implements 
ComputationalService {
                try {
                        return 
Optional.of(computationalDAO.fetchComputationalFields(user, project, 
exploratoryName, computationalName));
                } catch (DlabException e) {
-                       log.warn("Computational resource {} affiliated with 
exploratory {} for user {} not found.",
-                                       computationalName, exploratoryName, 
user);
+                       log.warn("Computational resource {} affiliated with 
exploratory {} for user {} not found.", computationalName, exploratoryName, 
user, e);
                }
                return Optional.empty();
        }
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 e3ad62c..b92671c 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
@@ -148,7 +148,7 @@ public class EndpointServiceImpl implements EndpointService 
{
                        response = provisioningService.get(url + HEALTH_CHECK, 
userInfo.getAccessToken(), Response.class);
                        cloudProvider = 
response.readEntity(CloudProvider.class);
                } catch (Exception e) {
-            log.error("Cannot connect to url '{}'. {}", url, e.getMessage());
+            log.error("Cannot connect to url '{}'. {}", url, e.getMessage(), 
e);
             throw new DlabException(String.format("Cannot connect to url 
'%s'.", url));
         }
                if (response.getStatus() != 200) {
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 e89eda3..a775e74 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
@@ -229,7 +229,7 @@ public class ExploratoryServiceImpl implements 
ExploratoryService {
                try {
                        return 
Optional.of(exploratoryDAO.fetchExploratoryFields(user, project, 
exploratoryName));
                } catch (DlabException e) {
-                       log.warn("User instance with exploratory {}, project {} 
for user {} not found.", exploratoryName, project, user);
+                       log.warn("User instance with exploratory {}, project {} 
for user {} not found.", exploratoryName, project, user, e);
                }
                return Optional.empty();
        }
@@ -239,7 +239,7 @@ public class ExploratoryServiceImpl implements 
ExploratoryService {
                try {
                        return 
Optional.of(exploratoryDAO.fetchExploratoryFields(user, project, 
exploratoryName, includeCompResources));
                } catch (DlabException e) {
-                       log.warn("User instance with exploratory {}, project {} 
for user {} not found.", exploratoryName, project, user);
+                       log.warn("User instance with exploratory {}, project {} 
for user {} not found.", exploratoryName, project, user, e);
                }
                return Optional.empty();
        }
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 a6a51bf..d9d8a0d 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
@@ -36,7 +36,6 @@ import lombok.extern.slf4j.Slf4j;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
 import java.util.function.Supplier;
@@ -258,7 +257,7 @@ public class ProjectServiceImpl implements ProjectService {
                try {
                        project.getEndpoints().forEach(e -> 
createEndpoint(user, project.getName(), project, e.getName(), 
String.format(AUDIT_ADD_EDGE_NODE, e.getName(), project.getName())));
                } catch (Exception e) {
-                       log.error("Can not create project due to: {}", 
e.getMessage());
+                       log.error("Can not create project due to: {}", 
e.getMessage(), e);
                        projectDAO.updateStatus(project.getName(), 
ProjectDTO.Status.FAILED);
                }
        }
@@ -278,7 +277,7 @@ public class ProjectServiceImpl implements ProjectService {
                                        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());
+                       log.error("Can not terminate project due to: {}", 
e.getMessage(), e);
                        projectDAO.updateStatus(projectName, 
ProjectDTO.Status.FAILED);
                }
        }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/servlet/guacamole/GuacamoleServlet.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/servlet/guacamole/GuacamoleServlet.java
index d74c68d..4c1be1e 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/servlet/guacamole/GuacamoleServlet.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/servlet/guacamole/GuacamoleServlet.java
@@ -8,6 +8,7 @@ import com.epam.dlab.exceptions.DlabException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.inject.Inject;
 import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.guacamole.net.GuacamoleTunnel;
 import org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet;
@@ -19,6 +20,7 @@ import javax.servlet.http.HttpServletResponse;
 import javax.ws.rs.core.HttpHeaders;
 import java.io.IOException;
 
+@Slf4j
 public class GuacamoleServlet extends GuacamoleHTTPTunnelServlet {
        private static final String UNAUTHORIZED_MSG = "User is not 
authenticated";
        private static final String DLAB_PREFIX = "DLab-";
@@ -39,12 +41,11 @@ public class GuacamoleServlet extends 
GuacamoleHTTPTunnelServlet {
                try {
                        final String authorization = 
request.getHeader(DLAB_PREFIX + HttpHeaders.AUTHORIZATION);
                        final String credentials = 
StringUtils.substringAfter(authorization, AUTH_HEADER_PREFIX);
-                       final UserInfo userInfo =
-                                       securityDAO.getUser(credentials)
-                                                       .orElseThrow(() -> new 
DlabAuthenticationException(UNAUTHORIZED_MSG));
+                       final UserInfo userInfo = getUserInfo(credentials);
                        final CreateTerminalDTO createTerminalDTO = 
mapper.readValue(request.getReader(), CreateTerminalDTO.class);
                        return guacamoleService.getTunnel(userInfo, 
createTerminalDTO.getHost(), createTerminalDTO.getEndpoint());
                } catch (IOException e) {
+                       log.error("Cannot read request body. Reason {}", 
e.getMessage(), e);
                        throw new DlabException("Can not read request body: " + 
e.getMessage(), e);
                }
        }
@@ -54,10 +55,21 @@ public class GuacamoleServlet extends 
GuacamoleHTTPTunnelServlet {
                try {
                        super.handleTunnelRequest(request, response);
                } catch (DlabAuthenticationException e) {
+                       log.error(UNAUTHORIZED_MSG, e);
                        sendError(response, HttpStatus.SC_UNAUTHORIZED, 
HttpStatus.SC_UNAUTHORIZED, UNAUTHORIZED_MSG);
                }
        }
 
+       private UserInfo getUserInfo(String credentials) {
+               try {
+                       return securityDAO.getUser(credentials)
+                                       .orElseThrow(() -> new 
DlabAuthenticationException(UNAUTHORIZED_MSG));
+               } catch (DlabAuthenticationException e) {
+                       log.error(UNAUTHORIZED_MSG, e);
+                       throw new DlabException(UNAUTHORIZED_MSG);
+               }
+       }
+
        @Data
        private static class CreateTerminalDTO {
                private String host;
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/util/KeycloakUtil.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/util/KeycloakUtil.java
index 63fc62c..25f7a5a 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/util/KeycloakUtil.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/util/KeycloakUtil.java
@@ -16,7 +16,7 @@ public class KeycloakUtil {
             byte[] bytes = Base64Url.decode(parts[1]);
             return JsonSerialization.readValue(bytes, IDToken.class);
         } catch (Exception e) {
-            throw new DlabException("Can not parse token due to: " + 
e.getMessage());
+            throw new DlabException("Can not parse token due to: " + 
e.getMessage(), e);
         }
     }
 }


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

Reply via email to