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