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