You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by bh...@apache.org on 2019/04/03 09:21:58 UTC
[incubator-dlab] 07/07: DLAB-000 added possibility to download
billing report on gcp
This is an automated email from the ASF dual-hosted git repository.
bhliva pushed a commit to branch demo_gcp_billing
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
commit ed76ebbf78a3a799dc3cade8602fcfd775d7d6a3
Author: bhliva <bo...@epam.com>
AuthorDate: Thu Mar 28 11:35:15 2019 +0200
DLAB-000 added possibility to download billing report on gcp
---
.../resources/gcp/BillingResourceGcp.java | 20 ++++++++
.../backendapi/service/gcp/GcpBillingService.java | 57 ++++++++++++++++++++--
2 files changed, 72 insertions(+), 5 deletions(-)
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/BillingResourceGcp.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/BillingResourceGcp.java
index 8218ba6..7195c75 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/BillingResourceGcp.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/BillingResourceGcp.java
@@ -31,7 +31,9 @@ import javax.validation.constraints.NotNull;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
+import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
@Path("/billing")
public class BillingResourceGcp {
@@ -53,4 +55,22 @@ public class BillingResourceGcp {
return billingService.getBillingReport(userInfo, formDTO);
}
+ /**
+ * Returns the billing report in csv file.
+ *
+ * @param userInfo user info.
+ * @param formDTO filter for report data.
+ */
+
+ @POST
+ @Path("/report/download")
+ @Produces(MediaType.APPLICATION_OCTET_STREAM)
+ @SuppressWarnings("unchecked")
+ public Response downloadBillingReport(@Auth UserInfo userInfo, @Valid @NotNull GcpBillingFilter formDTO) {
+ return Response.ok(billingService.downloadReport(userInfo, formDTO))
+ .header(HttpHeaders.CONTENT_DISPOSITION,
+ "attachment; filename=\"" + billingService.getReportFileName(userInfo, formDTO) + "\"")
+ .build();
+ }
+
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/gcp/GcpBillingService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/gcp/GcpBillingService.java
index 42d2095..6851f33 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/gcp/GcpBillingService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/gcp/GcpBillingService.java
@@ -20,36 +20,83 @@
package com.epam.dlab.backendapi.service.gcp;
import com.epam.dlab.auth.UserInfo;
+import com.epam.dlab.backendapi.dao.aws.AwsBillingDAO;
import com.epam.dlab.backendapi.resources.dto.gcp.GcpBillingFilter;
import com.epam.dlab.backendapi.service.BillingService;
+import com.epam.dlab.backendapi.util.CSVFormatter;
+import com.epam.dlab.model.aws.ReportLine;
import org.bson.Document;
import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.List;
public class GcpBillingService extends BillingService<GcpBillingFilter> {
@Override
public String getFirstLine(Document document) throws ParseException {
- return null;
+ SimpleDateFormat from = new SimpleDateFormat("yyyy-MM-dd");
+ SimpleDateFormat to = new SimpleDateFormat("MMM dd, yyyy");
+
+ return String.format("Service base name: %s Available reporting period from: %s to: %s",
+ document.get(AwsBillingDAO.SERVICE_BASE_NAME),
+ to.format(from.parse((String) document.get("from"))),
+ to.format(from.parse((String) document.get("to"))));
}
@Override
public List<String> getHeadersList(boolean full) {
- return null;
+ List<String> headers = new ArrayList<>();
+
+ if (full) {
+ headers.add("USER");
+ }
+
+ headers.add("ENVIRONMENT NAME");
+ headers.add("RESOURCE TYPE");
+ headers.add("SHAPE");
+ headers.add("SERVICE");
+ headers.add("SERVICE CHARGES");
+
+ return headers;
}
@Override
public String getLine(boolean full, Document document) {
- return null;
+ List<String> items = new ArrayList<>();
+
+ if (full) {
+ items.add(getValueOrEmpty(document, ReportLine.FIELD_USER_ID));
+ }
+
+ items.add(getValueOrEmpty(document, ReportLine.FIELD_DLAB_ID));
+ items.add(getValueOrEmpty(document, AwsBillingDAO.DLAB_RESOURCE_TYPE));
+ items.add(getValueOrEmpty(document, AwsBillingDAO.SHAPE).replace(System.lineSeparator(), " "));
+ items.add(getValueOrEmpty(document, ReportLine.FIELD_PRODUCT));
+
+ items.add(getValueOrEmpty(document, ReportLine.FIELD_COST)
+ + " " + getValueOrEmpty(document, ReportLine.FIELD_CURRENCY_CODE));
+
+ return CSVFormatter.formatLine(items, CSVFormatter.SEPARATOR);
}
@Override
public String getTotal(boolean full, Document document) {
- return null;
+ int padding = getHeadersList(full).size() - 1;
+
+ List<String> items = new ArrayList<>();
+ while (padding-- > 0) {
+ items.add("");
+ }
+
+ items.add(String.format("Total: %s %s", getValueOrEmpty(document, AwsBillingDAO.COST_TOTAL),
+ getValueOrEmpty(document, ReportLine.FIELD_CURRENCY_CODE)));
+
+ return CSVFormatter.formatLine(items, CSVFormatter.SEPARATOR);
}
@Override
public String getReportFileName(UserInfo userInfo, GcpBillingFilter filter) {
- return null;
+ return "gcp-billing-report.csv";
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org