aboutsummaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorØyvind Grønnesby <oyving@yahooinc.com>2023-10-20 15:13:07 +0200
committerGitHub <noreply@github.com>2023-10-20 15:13:07 +0200
commit3e9ab5c48f01d35029fe9224c51c60ee96099f1d (patch)
tree533423b94173fbc5fed1bd69759dcd8933880261 /controller-api
parent9a3c43468a97ed26f24dc8d4783d54174afbc778 (diff)
parent33f6a3df544a3c7915158251471372a0453ecc5c (diff)
Merge pull request #29029 from vespa-engine/olaa/line-item-aggregation
Move bill exporting to BillingReporter
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java4
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporter.java5
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporterMock.java12
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/CostCalculator.java13
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/MockBillingController.java7
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/PlanRegistry.java4
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/PlanRegistryMock.java20
7 files changed, 53 insertions, 12 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java
index f5543002a26..45c22c0db28 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingController.java
@@ -130,8 +130,4 @@ public interface BillingController {
default void updateCache(List<TenantName> tenants) {}
- /** Export a bill to a payment service. Returns the invoice ID in the external system. */
- default String exportBill(Bill bill, String exportMethod, CloudTenant tenant) {
- return "NOT_IMPLEMENTED";
- }
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporter.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporter.java
index 0d6d840591c..676c29cec5d 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporter.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporter.java
@@ -9,4 +9,9 @@ public interface BillingReporter {
InvoiceUpdate maintainInvoice(Bill bill);
+ /** Export a bill to a payment service. Returns the invoice ID in the external system. */
+ default String exportBill(Bill bill, String exportMethod, CloudTenant tenant) {
+ return "NOT_IMPLEMENTED";
+ }
+
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporterMock.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporterMock.java
index 9531745556f..4985033d378 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporterMock.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/BillingReporterMock.java
@@ -9,9 +9,11 @@ import java.util.UUID;
public class BillingReporterMock implements BillingReporter {
private final Clock clock;
+ private final BillingDatabaseClient dbClient;
- public BillingReporterMock(Clock clock) {
+ public BillingReporterMock(Clock clock, BillingDatabaseClient dbClient) {
this.clock = clock;
+ this.dbClient = dbClient;
}
@Override
@@ -24,4 +26,12 @@ public class BillingReporterMock implements BillingReporter {
return new InvoiceUpdate(0,0,1);
}
+ @Override
+ public String exportBill(Bill bill, String exportMethod, CloudTenant tenant) {
+ // Replace bill with a copy with exportedId set
+ var exportedId = "EXT-ID-123";
+ dbClient.setExportedInvoiceId(bill.id(), exportedId);
+ return exportedId;
+ }
+
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/CostCalculator.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/CostCalculator.java
index e7f87d3a628..ddcd5308986 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/CostCalculator.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/CostCalculator.java
@@ -5,6 +5,8 @@ import com.yahoo.config.provision.NodeResources;
import com.yahoo.vespa.hosted.controller.api.integration.resource.CostInfo;
import com.yahoo.vespa.hosted.controller.api.integration.resource.ResourceUsage;
+import java.math.BigDecimal;
+
/**
* @author ogronnesby
*/
@@ -16,4 +18,15 @@ public interface CostCalculator {
/** Estimate the cost for the given resources */
double calculate(NodeResources resources);
+ /** CPU unit price */
+ BigDecimal getCpuPrice();
+
+ /** Memory unit price */
+ BigDecimal getMemoryPrice();
+
+ /** Disk unit price */
+ BigDecimal getDiskPrice();
+
+ /** GPU unit price */
+ BigDecimal getGpuPrice();
}
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 52a41f8da56..7a4a787fb11 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
@@ -206,13 +206,6 @@ public class MockBillingController implements BillingController {
return count < limit;
}
- @Override
- public String exportBill(Bill bill, String exportMethod, CloudTenant tenant) {
- // Replace bill with a copy with exportedId set
- var exportedId = "EXT-ID-123";
- dbClient.setExportedInvoiceId(bill.id(), exportedId);
- return exportedId;
- }
public void setTenants(List<TenantName> tenants) {
this.tenants = tenants;
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/PlanRegistry.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/PlanRegistry.java
index 686a239a138..c0bd0dd29cd 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/PlanRegistry.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/PlanRegistry.java
@@ -20,6 +20,10 @@ public interface PlanRegistry {
/** Get a set of all plans */
List<Plan> all();
+ default Plan require(String planId) {
+ return plan(planId).orElseThrow();
+ }
+
/** Get a plan give a plan ID */
default Optional<Plan> plan(String planId) {
if (planId == null || planId.isBlank())
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/PlanRegistryMock.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/PlanRegistryMock.java
index 3ae2b0aa495..5af4d0cff29 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/PlanRegistryMock.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/PlanRegistryMock.java
@@ -144,5 +144,25 @@ public class PlanRegistryMock implements PlanRegistry {
public double calculate(NodeResources resources) {
return resources.cost();
}
+
+ @Override
+ public BigDecimal getCpuPrice() {
+ return cpuHourCost;
+ }
+
+ @Override
+ public BigDecimal getMemoryPrice() {
+ return memHourCost;
+ }
+
+ @Override
+ public BigDecimal getDiskPrice() {
+ return dgbHourCost;
+ }
+
+ @Override
+ public BigDecimal getGpuPrice() {
+ return gpuHourCost;
+ }
}
}