You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by of...@apache.org on 2020/07/23 12:38:44 UTC
[incubator-dlab] 01/03: [DLAB-1870] Intigration with sonar
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 159eb9d63dfa147fc13bc28182d1b8c96080d9f8
Author: Oleh Fuks <ol...@gmail.com>
AuthorDate: Wed Jul 22 11:44:32 2020 +0300
[DLAB-1870] Intigration with sonar
---
pom.xml | 37 ++++++-
.../main/java/com/epam/dlab/BillingService.java | 1 +
.../billing/gcp/dao/impl/BigQueryBillingDAO.java | 11 +-
.../dlab/auth/conf/AzureLoginConfiguration.java | 39 -------
.../epam/dlab/auth/conf/GcpLoginConfiguration.java | 33 ------
.../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 +-
.../interceptor/BudgetLimitInterceptor.java | 11 --
.../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 +-
34 files changed, 251 insertions(+), 245 deletions(-)
diff --git a/pom.xml b/pom.xml
index e24bfd9..03edbec 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,6 +52,35 @@
<module>services/billing-gcp</module>
</modules>
</profile>
+ <profile>
+ <id>sonar</id>
+ <activation>
+ <activeByDefault>false</activeByDefault>
+ </activation>
+ <properties>
+ <sonar.host.url>
+ http://localhost:9000/sonar
+ </sonar.host.url>
+ <sonar.coverage.exclusions>
+ **/*Exception.java,
+ src/main/java/com/epam/dlab/dto/**,
+ src/main/java/com/epam/dlab/backendapi/auth/**,
+ src/main/java/com/epam/dlab/backendapi/conf/**,
+ src/main/java/com/epam/dlab/backendapi/domain/**,
+ src/main/java/com/epam/dlab/backendapi/dropwizard/**,
+ src/main/java/com/epam/dlab/backendapi/healthcheck/**,
+ src/main/java/com/epam/dlab/backendapi/modules/**,
+ src/main/java/com/epam/dlab/backendapi/resources/dto/**,
+ src/main/java/com/epam/dlab/backendapi/roles/**,
+ src/main/java/com/epam/dlab/backendapi/servlet/guacamole/**,
+ src/main/java/com/epam/dlab/backendapi/util/**,
+ src/main/java/com/epam/dlab/backendapi/validation/**,
+ src/main/java/com/epam/dlab/process/**,
+ src/main/java/com/epam/dlab/backendapi/modules/**,
+ src/main/java/com/epam/dlab/backendapi/validation/**
+ </sonar.coverage.exclusions>
+ </properties>
+ </profile>
</profiles>
<modules>
@@ -88,6 +117,7 @@
<logback.version>1.2.3</logback.version>
<commons-fileupload.version>1.3.3</commons-fileupload.version>
</properties>
+
<dependencyManagement>
<dependencies>
<dependency>
@@ -130,8 +160,6 @@
<artifactId>dropwizard-util</artifactId>
<version>${io.dropwizard.version}</version>
</dependency>
-
-
</dependencies>
</dependencyManagement>
@@ -174,6 +202,11 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.sonarsource.scanner.maven</groupId>
+ <artifactId>sonar-maven-plugin</artifactId>
+ <version>3.7.0.1746</version>
+ </plugin>
</plugins>
</pluginManagement>
<plugins>
diff --git a/services/billing-aws/src/main/java/com/epam/dlab/BillingService.java b/services/billing-aws/src/main/java/com/epam/dlab/BillingService.java
index 9b4d6db..15dcc32 100644
--- a/services/billing-aws/src/main/java/com/epam/dlab/BillingService.java
+++ b/services/billing-aws/src/main/java/com/epam/dlab/BillingService.java
@@ -23,6 +23,7 @@ import com.epam.dlab.dto.billing.BillingData;
import java.util.List;
+@FunctionalInterface
public interface BillingService {
List<BillingData> getBillingData();
}
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/common/src/main/java/com/epam/dlab/auth/conf/AzureLoginConfiguration.java b/services/common/src/main/java/com/epam/dlab/auth/conf/AzureLoginConfiguration.java
deleted file mode 100644
index cf6331c..0000000
--- a/services/common/src/main/java/com/epam/dlab/auth/conf/AzureLoginConfiguration.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package com.epam.dlab.auth.conf;
-
-import lombok.Getter;
-
-@Getter
-public class AzureLoginConfiguration {
- private boolean useLdap;
- private boolean silent;
- private String tenant;
- private String authority;
- private String clientId;
- private String redirectUrl;
- private String responseMode;
- private String prompt;
- private String loginPage;
- private boolean validatePermissionScope;
- private String permissionScope;
- private String managementApiAuthFile;
- private long maxSessionDurabilityMilliseconds = 8L * 60L * 60L * 1000L;// 8 hours
-}
diff --git a/services/common/src/main/java/com/epam/dlab/auth/conf/GcpLoginConfiguration.java b/services/common/src/main/java/com/epam/dlab/auth/conf/GcpLoginConfiguration.java
deleted file mode 100644
index 6dbaf02..0000000
--- a/services/common/src/main/java/com/epam/dlab/auth/conf/GcpLoginConfiguration.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package com.epam.dlab.auth.conf;
-
-import lombok.Data;
-
-@Data
-public class GcpLoginConfiguration {
- private final boolean oauth2authenticationEnabled;
- private final String redirectedUri;
- private final String clientId;
- private final String clientSecret;
- private final String applicationName;
- private final int userStateCacheSize;
- private final long userStateCacheExpirationTime;
-}
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/interceptor/BudgetLimitInterceptor.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/interceptor/BudgetLimitInterceptor.java
index ce32e10..a9058bd 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/interceptor/BudgetLimitInterceptor.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/interceptor/BudgetLimitInterceptor.java
@@ -19,7 +19,6 @@
package com.epam.dlab.backendapi.interceptor;
-import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.annotation.Project;
import com.epam.dlab.backendapi.dao.BillingDAO;
import com.epam.dlab.backendapi.service.BillingService;
@@ -31,7 +30,6 @@ import org.aopalliance.intercept.MethodInvocation;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
-import java.util.Arrays;
import java.util.Objects;
import java.util.stream.IntStream;
@@ -53,15 +51,6 @@ public class BudgetLimitInterceptor implements MethodInterceptor {
}
}
- private Boolean userQuoteReached(MethodInvocation mi) {
- return Arrays.stream(mi.getArguments())
- .filter(arg -> arg.getClass().equals(UserInfo.class))
- .findAny()
- .map(u -> ((UserInfo) u).getName())
- .map(billingDAO::isUserQuoteReached)
- .orElse(Boolean.FALSE);
- }
-
private Boolean projectQuoteReached(MethodInvocation mi) {
final Parameter[] parameters = mi.getMethod().getParameters();
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-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org