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/04/07 11:55:32 UTC
[incubator-dlab] 03/03: Remote billing gcp
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 5d15822bf07f9e92e2f8b16848bae91964513e7d
Author: Oleh Fuks <ol...@gmail.com>
AuthorDate: Tue Apr 7 14:55:03 2020 +0300
Remote billing gcp
---
.../dlab/billing/gcp/BillingGcpApplication.java | 2 -
.../billing/gcp/controller/BillingController.java | 28 +++++------
.../com/epam/dlab/billing/gcp/dao/BillingDAO.java | 3 +-
.../billing/gcp/dao/impl/BigQueryBillingDAO.java | 10 ++--
.../billing/gcp/scheduler/BillingScheduler.java | 42 ----------------
.../dlab/billing/gcp/service/BillingService.java | 7 ++-
.../gcp/service/impl/BillingServiceImpl.java | 23 ++++-----
.../gcp/service/BillingServiceImplTest.java | 58 ----------------------
.../com/epam/dlab/dto/billing/BillingData.java | 1 +
9 files changed, 38 insertions(+), 136 deletions(-)
diff --git a/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/BillingGcpApplication.java b/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/BillingGcpApplication.java
index 0e31323..c454038 100644
--- a/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/BillingGcpApplication.java
+++ b/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/BillingGcpApplication.java
@@ -23,10 +23,8 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
-import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
-@EnableScheduling
@EnableMongoRepositories
@EnableConfigurationProperties
public class BillingGcpApplication {
diff --git a/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/controller/BillingController.java b/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/controller/BillingController.java
index 2967d2a..e3537eb 100644
--- a/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/controller/BillingController.java
+++ b/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/controller/BillingController.java
@@ -19,35 +19,35 @@
package com.epam.dlab.billing.gcp.controller;
-import com.epam.dlab.billing.gcp.dao.BillingDAO;
+import com.epam.dlab.billing.gcp.service.BillingService;
import com.epam.dlab.dto.billing.BillingData;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
+import java.util.Map;
@RestController
public class BillingController {
- private final BillingDAO billingDAO;
+ private final BillingService billingService;
- public BillingController(BillingDAO billingDAO) {
- this.billingDAO = billingDAO;
+ public BillingController(BillingService billingService) {
+ this.billingService = billingService;
}
@GetMapping
- public ResponseEntity<List<BillingData>> getBilling(@RequestParam List<String> dlabIds) {
- return new ResponseEntity<>(billingDAO.getBillingReport(dlabIds), HttpStatus.OK);
+ public ResponseEntity<Map<String, List<BillingData>>> getBilling() {
+ return new ResponseEntity<>(billingService.getBillingData(), HttpStatus.OK);
}
- @GetMapping("/report")
- 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);
- }
+// @GetMapping("/report")
+// 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-gcp/src/main/java/com/epam/dlab/billing/gcp/dao/BillingDAO.java b/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/dao/BillingDAO.java
index 430ade7..0a04502 100644
--- a/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/dao/BillingDAO.java
+++ b/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/dao/BillingDAO.java
@@ -19,14 +19,13 @@
package com.epam.dlab.billing.gcp.dao;
-import com.epam.dlab.billing.gcp.model.GcpBillingData;
import com.epam.dlab.dto.billing.BillingData;
import java.util.List;
public interface BillingDAO {
- List<GcpBillingData> getBillingData() throws InterruptedException;
+ List<BillingData> getBillingData() throws InterruptedException;
List<BillingData> getBillingReport(String dateStart, String dateEnd, String dlabId, List<String> products);
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 d0b969a..ef28679 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
@@ -92,7 +92,7 @@ public class BigQueryBillingDAO implements BillingDAO {
}
@Override
- public List<GcpBillingData> getBillingData() {
+ public List<BillingData> getBillingData() {
final Map<String, Long> processedBillingTables = billingHistoryRepo.findAll()
.stream()
.collect(Collectors.toMap(BillingHistory::getTableName, BillingHistory::getLastModified));
@@ -163,7 +163,7 @@ public class BigQueryBillingDAO implements BillingDAO {
.map(date -> Aggregation.match(criteria));
}
- private Stream<? extends GcpBillingData> bigQueryResultSetStream(Table table) {
+ private Stream<? extends BillingData> bigQueryResultSetStream(Table table) {
try {
final String tableName = table.getTableId().getTable();
final String tableId = table.getTableId().getDataset() + "." + tableName;
@@ -172,7 +172,7 @@ public class BigQueryBillingDAO implements BillingDAO {
.addNamedParameter(SBN_PARAM, QueryParameterValue.string(sbn + "%"))
.addNamedParameter(DATASET_PARAM, QueryParameterValue.string(tableId))
.build();
- final Stream<GcpBillingData> gcpBillingDataStream =
+ final Stream<BillingData> gcpBillingDataStream =
StreamSupport.stream(service.query(queryConfig).getValues().spliterator(), false)
.map(this::toGcpBillingData);
billingHistoryRepo.save(new BillingHistory(tableName, table.getLastModifiedTime()));
@@ -182,8 +182,8 @@ public class BigQueryBillingDAO implements BillingDAO {
}
}
- private GcpBillingData toGcpBillingData(FieldValueList fields) {
- return GcpBillingData.builder()
+ private BillingData toGcpBillingData(FieldValueList fields) {
+ return BillingData.builder()
.usageDateFrom(toLocalDate(fields, "usage_date_from"))
.usageDateTo(toLocalDate(fields, "usage_date_to"))
.cost(fields.get("cost").getNumericValue().doubleValue())
diff --git a/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/scheduler/BillingScheduler.java b/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/scheduler/BillingScheduler.java
deleted file mode 100644
index 9724d43..0000000
--- a/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/scheduler/BillingScheduler.java
+++ /dev/null
@@ -1,42 +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.billing.gcp.scheduler;
-
-import com.epam.dlab.billing.gcp.service.BillingService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-@Component
-public class BillingScheduler {
-
- private final BillingService billingService;
-
- @Autowired
- public BillingScheduler(BillingService billingService) {
- this.billingService = billingService;
- }
-
-
- @Scheduled(cron = "${dlab.cron}")
- public void getBillingReport() {
- billingService.updateBillingData();
- }
-}
diff --git a/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/service/BillingService.java b/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/service/BillingService.java
index bb56d6c..282e896 100644
--- a/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/service/BillingService.java
+++ b/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/service/BillingService.java
@@ -19,6 +19,11 @@
package com.epam.dlab.billing.gcp.service;
+import com.epam.dlab.dto.billing.BillingData;
+
+import java.util.List;
+import java.util.Map;
+
public interface BillingService {
- void updateBillingData();
+ Map<String, List<BillingData>> getBillingData();
}
diff --git a/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/service/impl/BillingServiceImpl.java b/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/service/impl/BillingServiceImpl.java
index c37436b..e297e83 100644
--- a/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/service/impl/BillingServiceImpl.java
+++ b/services/billing-gcp/src/main/java/com/epam/dlab/billing/gcp/service/impl/BillingServiceImpl.java
@@ -20,13 +20,13 @@
package com.epam.dlab.billing.gcp.service.impl;
import com.epam.dlab.billing.gcp.dao.BillingDAO;
-import com.epam.dlab.billing.gcp.model.GcpBillingData;
-import com.epam.dlab.billing.gcp.repository.BillingRepository;
import com.epam.dlab.billing.gcp.service.BillingService;
+import com.epam.dlab.dto.billing.BillingData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -37,28 +37,27 @@ public class BillingServiceImpl implements BillingService {
private static final String USAGE_DATE_FORMAT = "yyyy-MM";
private final BillingDAO billingDAO;
- private final BillingRepository billingRepository;
@Autowired
- public BillingServiceImpl(BillingDAO billingDAO, BillingRepository billingRepository) {
+ public BillingServiceImpl(BillingDAO billingDAO) {
this.billingDAO = billingDAO;
- this.billingRepository = billingRepository;
}
@Override
- public void updateBillingData() {
+ public Map<String, List<BillingData>> getBillingData() {
try {
- Map<String, List<GcpBillingData>> billingData = billingDAO.getBillingData()
+ return billingDAO.getBillingData()
.stream()
.collect(Collectors.groupingBy(bd -> bd.getUsageDate().substring(0, USAGE_DATE_FORMAT.length())));
- billingData.forEach((usageDate, billingDataList) -> {
- log.info("Updating billing information for month {}", usageDate);
- billingRepository.deleteByUsageDateRegex("^" + usageDate);
- billingRepository.insert(billingDataList);
- });
+// billingData.forEach((usageDate, billingDataList) -> {
+// log.info("Updating billing information for month {}", usageDate);
+// billingRepository.deleteByUsageDateRegex("^" + usageDate);
+// billingRepository.insert(billingDataList);
+// });
} catch (Exception e) {
log.error("Can not update billing due to: {}", e.getMessage(), e);
+ return Collections.emptyMap();
}
}
}
diff --git a/services/billing-gcp/src/test/java/com/epam/dlab/billing/gcp/service/BillingServiceImplTest.java b/services/billing-gcp/src/test/java/com/epam/dlab/billing/gcp/service/BillingServiceImplTest.java
deleted file mode 100644
index 2ff670a..0000000
--- a/services/billing-gcp/src/test/java/com/epam/dlab/billing/gcp/service/BillingServiceImplTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.epam.dlab.billing.gcp.service;
-
-import com.epam.dlab.billing.gcp.dao.BillingDAO;
-import com.epam.dlab.billing.gcp.model.GcpBillingData;
-import com.epam.dlab.billing.gcp.repository.BillingRepository;
-import com.epam.dlab.billing.gcp.service.impl.BillingServiceImpl;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import java.time.LocalDate;
-import java.util.Collections;
-import java.util.List;
-
-import static org.mockito.Mockito.anyCollection;
-import static org.mockito.Mockito.anyString;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.when;
-
-
-@RunWith(MockitoJUnitRunner.class)
-public class BillingServiceImplTest {
- @Mock
- private BillingDAO billingDAO;
- @Mock
- private BillingRepository billingRepository;
- @InjectMocks
- private BillingServiceImpl billingService;
-
- @Test
- public void updateBillingData() throws InterruptedException {
- when(billingDAO.getBillingData()).thenReturn(getBillingData());
-
- billingService.updateBillingData();
-
- verify(billingDAO).getBillingData();
- verify(billingRepository).deleteByUsageDateRegex(anyString());
- verify(billingRepository).insert(anyCollection());
-
- verifyNoMoreInteractions(billingDAO);
- }
-
- private List<GcpBillingData> getBillingData() {
- return Collections.singletonList(GcpBillingData.builder()
- .usageDate(LocalDate.MIN.toString())
- .usageDateFrom(LocalDate.MIN)
- .usageDateTo(LocalDate.MAX)
- .product("product")
- .usageType("usageType")
- .cost(1d)
- .currency("USD")
- .tag("exploratoryId")
- .build());
- }
-}
\ No newline at end of file
diff --git a/services/dlab-model/src/main/java/com/epam/dlab/dto/billing/BillingData.java b/services/dlab-model/src/main/java/com/epam/dlab/dto/billing/BillingData.java
index 27db613..8409fc0 100644
--- a/services/dlab-model/src/main/java/com/epam/dlab/dto/billing/BillingData.java
+++ b/services/dlab-model/src/main/java/com/epam/dlab/dto/billing/BillingData.java
@@ -39,4 +39,5 @@ public class BillingData {
private String usageType;
private Double cost;
private String currency;
+ private final String usageDate;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org