aboutsummaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorØyvind Grønnesby <oyving@verizonmedia.com>2020-11-20 13:16:53 +0100
committerØyvind Grønnesby <oyving@verizonmedia.com>2020-11-20 13:16:53 +0100
commit14b7edd59909d78cb3e75dd1aaed9b3c1967adf3 (patch)
tree321dd559d37aa65ba257fce74566c1957cb9e5fe /controller-api
parent19e2e6fcc911a17041771784f2dfa27b002bb27b (diff)
Invoice methods needed to support CSV generation
- Create methods to summarize values in the line items up to the invoice level. - Make tenant ID part of the invoice.
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Invoice.java34
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java3
2 files changed, 35 insertions, 2 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Invoice.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Invoice.java
index 44f8f6e786d..9e88e2b61ab 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Invoice.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Invoice.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.hosted.controller.api.integration.billing;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.zone.ZoneId;
import java.math.BigDecimal;
@@ -13,6 +14,7 @@ import java.util.Optional;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.UUID;
+import java.util.function.Function;
/**
@@ -31,13 +33,15 @@ public class Invoice {
private static final BigDecimal SCALED_ZERO = new BigDecimal("0.00");
private final Id id;
+ private final TenantName tenant;
private final List<LineItem> lineItems;
private final StatusHistory statusHistory;
private final ZonedDateTime startTime;
private final ZonedDateTime endTime;
- public Invoice(Id id, StatusHistory statusHistory, List<LineItem> lineItems, ZonedDateTime startTime, ZonedDateTime endTime) {
+ public Invoice(Id id, TenantName tenant, StatusHistory statusHistory, List<LineItem> lineItems, ZonedDateTime startTime, ZonedDateTime endTime) {
this.id = id;
+ this.tenant = tenant;
this.lineItems = List.copyOf(lineItems);
this.statusHistory = statusHistory;
this.startTime = startTime;
@@ -72,6 +76,34 @@ public class Invoice {
return lineItems.stream().map(LineItem::amount).reduce(SCALED_ZERO, BigDecimal::add);
}
+ public BigDecimal sumCpuHours() {
+ return sumResourceValues(LineItem::getCpuHours);
+ }
+
+ public BigDecimal sumMemoryHours() {
+ return sumResourceValues(LineItem::getMemoryHours);
+ }
+
+ public BigDecimal sumDiskHours() {
+ return sumResourceValues(LineItem::getDiskHours);
+ }
+
+ public BigDecimal sumCpuCost() {
+ return sumResourceValues(LineItem::getCpuCost);
+ }
+
+ public BigDecimal sumMemoryCost() {
+ return sumResourceValues(LineItem::getMemoryCost);
+ }
+
+ public BigDecimal sumDiskCost() {
+ return sumResourceValues(LineItem::getDiskCost);
+ }
+
+ private BigDecimal sumResourceValues(Function<LineItem, Optional<BigDecimal>> f) {
+ return lineItems.stream().flatMap(li -> f.apply(li).stream()).reduce(SCALED_ZERO, BigDecimal::add);
+ }
+
public static final class Id {
private final String value;
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java
index 420b964d7aa..b28ba28a201 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java
@@ -53,6 +53,7 @@ public class MockBillingController implements BillingController {
committedInvoices.computeIfAbsent(tenant, l -> new ArrayList<>())
.add(new Invoice(
invoiceId,
+ tenant,
Invoice.StatusHistory.open(),
List.of(),
startTime,
@@ -177,6 +178,6 @@ public class MockBillingController implements BillingController {
}
private Invoice emptyInvoice() {
- return new Invoice(Invoice.Id.of("empty"), Invoice.StatusHistory.open(), List.of(), ZonedDateTime.now(), ZonedDateTime.now());
+ return new Invoice(Invoice.Id.of("empty"), TenantName.defaultName(), Invoice.StatusHistory.open(), List.of(), ZonedDateTime.now(), ZonedDateTime.now());
}
}