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