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/03/03 11:39:18 UTC
[incubator-dlab] 03/08: Added billing filter functionality
This is an automated email from the ASF dual-hosted git repository.
ofuks pushed a commit to branch DLAB-1571
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
commit cf65de2fe55819429e11e5bac6fbb97ced8f545c
Author: Oleh Fuks <ol...@gmail.com>
AuthorDate: Fri Feb 28 15:27:15 2020 +0200
Added billing filter functionality
---
.../dlab/backendapi/resources/BillingResource.java | 4 ++--
.../service/impl/BillingServiceImplNew.java | 24 ++++++++++++++++++----
.../epam/dlab/backendapi/util/BillingUtils.java | 3 +--
3 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/BillingResource.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/BillingResource.java
index 26cc9a9..c87f7b2 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/BillingResource.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/BillingResource.java
@@ -63,9 +63,9 @@ public class BillingResource {
@Produces(MediaType.APPLICATION_JSON)
public Response getBillingReport2(
// @Auth UserInfo userInfo,
-// @Valid @NotNull BillingFilter formDTO
+ @Valid @NotNull BillingFilter filter
) {
- return Response.ok(billingServiceNew.getBillingReport(null, null)).build();
+ return Response.ok(billingServiceNew.getBillingReport(null, filter)).build();
}
@POST
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImplNew.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImplNew.java
index 99bc7c2..1eb2e67 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImplNew.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImplNew.java
@@ -43,6 +43,7 @@ import org.apache.http.client.utils.URIBuilder;
import javax.ws.rs.core.GenericType;
import java.net.URI;
import java.net.URISyntaxException;
+import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -53,6 +54,7 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
+import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -77,7 +79,6 @@ public class BillingServiceImplNew implements BillingServiceNew {
@Override
public List<BillingReportDTO> getBillingReport(UserInfo userInfo, BillingFilter filter) {
-// filter.getUser().replaceAll(s -> s.equalsIgnoreCase(BaseBillingDAO.SHARED_RESOURCE_NAME) ? null : s); // tell front end not to pass SHARED_RESOURCE_NAME and remove this line
final String serviceBaseName = configuration.getServiceBaseName();
final Stream<BillingReportDTO> ssnBillingDataStream = BillingUtils.ssnBillingDataStream(serviceBaseName);
final Stream<BillingReportDTO> billableUserInstances = exploratoryService.findAll()
@@ -93,13 +94,14 @@ public class BillingServiceImplNew implements BillingServiceNew {
final Map<String, BillingReportDTO> billableResources = Stream.of(billableUserInstances, billableEdges, ssnBillingDataStream)
.flatMap(s -> s)
- .filter(bd -> Objects.nonNull(bd.getDlabId()))
.collect(Collectors.toMap(BillingReportDTO::getDlabId, b -> b));
log.debug("Billable resources are: {}", billableResources);
List<BillingReportDTO> billingReport = getRemoteBillingData()
.stream()
+ .filter(getBillingDataFilter(filter))
.map(bd -> toBillingData(bd, getOrDefault(billableResources, bd.getTag())))
+ .filter(getBillingReportFilter(filter))
.collect(Collectors.toList());
log.debug("Billing report: {}", billingReport);
@@ -120,8 +122,7 @@ public class BillingServiceImplNew implements BillingServiceNew {
List<EndpointDTO> endpoints = endpointService.getEndpoints();
ExecutorService executor = Executors.newFixedThreadPool(endpoints.size());
List<Callable<List<BillingData>>> callableTasks = new ArrayList<>();
- endpoints.forEach(e ->
- callableTasks.add(getTask(getBillingUrl(e.getUrl()))));
+ endpoints.forEach(e -> callableTasks.add(getTask(getBillingUrl(e.getUrl()))));
List<BillingData> billingData;
try {
@@ -170,6 +171,21 @@ public class BillingServiceImplNew implements BillingServiceNew {
});
}
+ private Predicate<BillingReportDTO> getBillingReportFilter(BillingFilter filter) {
+ return br -> (filter.getUsers().isEmpty() || filter.getUsers().contains(br.getUser())) &&
+ (filter.getProjects().isEmpty() || filter.getProjects().contains(br.getProject())) &&
+ (filter.getResourceTypes().isEmpty() || filter.getResourceTypes().contains(br.getResourceType().name()));
+ }
+
+ private Predicate<BillingData> getBillingDataFilter(BillingFilter filter) {
+ LocalDate endDate = LocalDate.parse(filter.getDateEnd());
+ LocalDate startDate = LocalDate.parse(filter.getDateStart());
+ return br -> (filter.getDlabId().isEmpty() || filter.getDlabId().equalsIgnoreCase(br.getTag())) &&
+ (filter.getDateStart().isEmpty() || startDate.isEqual(br.getUsageDateFrom()) || startDate.isBefore(br.getUsageDateFrom())) &&
+ (filter.getDateEnd().isEmpty() || endDate.isEqual(br.getUsageDateTo()) || endDate.isAfter(br.getUsageDateTo())) &&
+ (filter.getProducts().isEmpty() || filter.getProducts().contains(br.getProduct()));
+ }
+
private BillingReportDTO toBillingData(BillingData billingData, BillingReportDTO billingReportDTO) {
return BillingReportDTO.builder()
.cost(billingData.getCost())
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/util/BillingUtils.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/util/BillingUtils.java
index 220e50e..beff13c 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/util/BillingUtils.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/util/BillingUtils.java
@@ -87,7 +87,6 @@ public class BillingUtils {
}
private static BillingReportDTO.BillingReportDTOBuilder withExploratoryName(UserInstanceDTO userInstance) {
- return BillingReportDTO.builder().user(userInstance.getUser())
- .project(userInstance.getProject());
+ return BillingReportDTO.builder().user(userInstance.getUser()).project(userInstance.getProject());
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org