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