diff options
author | Ola Aunronning <olaa@yahooinc.com> | 2023-10-19 15:27:23 +0200 |
---|---|---|
committer | Ola Aunronning <olaa@yahooinc.com> | 2023-10-19 15:27:23 +0200 |
commit | 33f6a3df544a3c7915158251471372a0453ecc5c (patch) | |
tree | 45f4e7f7b9ceb34776cf23a49603084eadc3de05 /controller-api | |
parent | 5e02a90eb9a74228e1dcc6728cbb3b2c730c3486 (diff) |
Move bill exporting to BillingReporter
Diffstat (limited to 'controller-api')
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; + } } } |