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


The following commit(s) were added to refs/heads/DLAB-1571 by this push:
     new 760f769  Remote billing
760f769 is described below

commit 760f769c78205e62349f55c28df508c71a092ac7
Author: Oleh Fuks <olegfuk...@gmail.com>
AuthorDate: Mon Mar 30 18:09:56 2020 +0300

    Remote billing
---
 .../azure/controller/BillingController.java        |  7 ++++--
 .../epam/dlab/billing/azure/dao/BillingDAO.java    |  2 +-
 .../billing/azure/dao/impl/BillingDAOImpl.java     | 25 +++++++++++++++++++---
 3 files changed, 28 insertions(+), 6 deletions(-)

diff --git 
a/services/billing-azure/src/main/java/com/epam/dlab/billing/azure/controller/BillingController.java
 
b/services/billing-azure/src/main/java/com/epam/dlab/billing/azure/controller/BillingController.java
index 53227a2..eb728c9 100644
--- 
a/services/billing-azure/src/main/java/com/epam/dlab/billing/azure/controller/BillingController.java
+++ 
b/services/billing-azure/src/main/java/com/epam/dlab/billing/azure/controller/BillingController.java
@@ -44,7 +44,10 @@ public class BillingController {
     }
 
     @GetMapping("/report")
-    public ResponseEntity<List<BillingData>> getBilling() {
-        return new ResponseEntity<>(billingDAO.getBillingReport(), 
HttpStatus.OK);
+    public ResponseEntity<List<BillingData>> 
getBilling(@RequestParam("date-start") String dateStart,
+                                                        
@RequestParam("date-end") String dateEnd,
+                                                        
@RequestParam("dlab-id") String dlabId,
+                                                        
@RequestParam("product") List<String> products) {
+        return new ResponseEntity<>(billingDAO.getBillingReport(dateStart, 
dateEnd, dlabId, products), HttpStatus.OK);
     }
 }
diff --git 
a/services/billing-azure/src/main/java/com/epam/dlab/billing/azure/dao/BillingDAO.java
 
b/services/billing-azure/src/main/java/com/epam/dlab/billing/azure/dao/BillingDAO.java
index 1f578b1..793d7cb 100644
--- 
a/services/billing-azure/src/main/java/com/epam/dlab/billing/azure/dao/BillingDAO.java
+++ 
b/services/billing-azure/src/main/java/com/epam/dlab/billing/azure/dao/BillingDAO.java
@@ -25,7 +25,7 @@ import java.util.List;
 
 public interface BillingDAO {
 
-    List<BillingData> getBillingReport();
+    List<BillingData> getBillingReport(String dateStart, String dateEnd, 
String dlabId, List<String> products);
 
     List<BillingData> getBillingReport(List<String> dlabIds);
 }
diff --git 
a/services/billing-azure/src/main/java/com/epam/dlab/billing/azure/dao/impl/BillingDAOImpl.java
 
b/services/billing-azure/src/main/java/com/epam/dlab/billing/azure/dao/impl/BillingDAOImpl.java
index 2e3da13..c39385a 100644
--- 
a/services/billing-azure/src/main/java/com/epam/dlab/billing/azure/dao/impl/BillingDAOImpl.java
+++ 
b/services/billing-azure/src/main/java/com/epam/dlab/billing/azure/dao/impl/BillingDAOImpl.java
@@ -24,8 +24,10 @@ import 
com.epam.dlab.billing.azure.model.AzureDailyResourceInvoice;
 import com.epam.dlab.dto.billing.BillingData;
 import com.epam.dlab.exceptions.DlabException;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.aggregation.Aggregation;
+import org.springframework.data.mongodb.core.aggregation.AggregationOperation;
 import org.springframework.data.mongodb.core.aggregation.GroupOperation;
 import org.springframework.data.mongodb.core.aggregation.MatchOperation;
 import org.springframework.data.mongodb.core.query.Criteria;
@@ -33,6 +35,7 @@ import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -50,10 +53,20 @@ public class BillingDAOImpl implements BillingDAO {
     }
 
     @Override
-    public List<BillingData> getBillingReport() {
+    public List<BillingData> getBillingReport(String dateStart, String 
dateEnd, String dlabId, List<String> products) {
         try {
-            GroupOperation groupOperation = getGroupOperation();
-            Aggregation aggregation = newAggregation(groupOperation);
+            List<AggregationOperation> aggregationOperations = new 
ArrayList<>();
+            
aggregationOperations.add(Aggregation.match(Criteria.where("dlabId").regex(dlabId,
 "i")));
+            if (!products.isEmpty()) {
+                
aggregationOperations.add(Aggregation.match(Criteria.where("meterCategory").in(products)));
+            }
+            getMatchCriteria(dateStart, Criteria.where("day").gte(dateStart))
+                    .ifPresent(aggregationOperations::add);
+            getMatchCriteria(dateEnd, Criteria.where("day").lte(dateEnd))
+                    .ifPresent(aggregationOperations::add);
+            aggregationOperations.add(getGroupOperation());
+
+            Aggregation aggregation = newAggregation(aggregationOperations);
 
             return mongoTemplate.aggregate(aggregation, "billing", 
AzureDailyResourceInvoice.class).getMappedResults()
                     .stream()
@@ -89,6 +102,12 @@ public class BillingDAOImpl implements BillingDAO {
                 .sum("cost").as("cost");
     }
 
+    private Optional<MatchOperation> getMatchCriteria(String dateStart, 
Criteria criteria) {
+        return Optional.ofNullable(dateStart)
+                .filter(StringUtils::isNotEmpty)
+                .map(date -> Aggregation.match(criteria));
+    }
+
     private BillingData toBillingData(AzureDailyResourceInvoice billingData) {
         return BillingData.builder()
                 .tag(billingData.getDlabId())


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

Reply via email to