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