aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance
diff options
context:
space:
mode:
authorgjoranv <gjoranv@gmail.com>2023-11-01 21:41:43 +0100
committergjoranv <gjoranv@gmail.com>2023-11-01 21:43:28 +0100
commitabaa1da8fce463f86aa007de5461bc8570aed196 (patch)
treee5ce975d090649b465004051745595cfeb508a63 /controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance
parentdd51bd4fa5d3b6abe423a0d54e38be3d3c9cd4a7 (diff)
Restructure invoice updates and implement propagation of status from the external system into the database.
Diffstat (limited to 'controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/BillingReportMaintainer.java32
1 files changed, 23 insertions, 9 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/BillingReportMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/BillingReportMaintainer.java
index 5c37e0e4d0b..64631799804 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/BillingReportMaintainer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/BillingReportMaintainer.java
@@ -10,9 +10,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.billing.BillStatus;
import com.yahoo.vespa.hosted.controller.api.integration.billing.BillingController;
import com.yahoo.vespa.hosted.controller.api.integration.billing.BillingDatabaseClient;
import com.yahoo.vespa.hosted.controller.api.integration.billing.BillingReporter;
-import com.yahoo.vespa.hosted.controller.api.integration.billing.FailedInvoiceUpdate;
import com.yahoo.vespa.hosted.controller.api.integration.billing.InvoiceUpdate;
-import com.yahoo.vespa.hosted.controller.api.integration.billing.ModifiableInvoiceUpdate;
import com.yahoo.vespa.hosted.controller.api.integration.billing.Plan;
import com.yahoo.vespa.hosted.controller.api.integration.billing.PlanRegistry;
import com.yahoo.vespa.hosted.controller.tenant.CloudTenant;
@@ -73,18 +71,34 @@ public class BillingReportMaintainer extends ControllerMaintainer {
var tenants = cloudTenants();
var billsNeedingMaintenance = databaseClient.readBills().stream()
.filter(bill -> bill.getExportedId().isPresent())
- .filter(exported -> exported.status() == BillStatus.OPEN)
+ .filter(exported -> ! exported.status().isFinal())
.toList();
for (var bill : billsNeedingMaintenance) {
var exportedId = bill.getExportedId().orElseThrow();
var update = reporter.maintainInvoice(tenants.get(bill.tenant()), bill);
- if (update instanceof ModifiableInvoiceUpdate modifiable && ! modifiable.isEmpty()) {
- log.fine(invoiceMessage(bill.id(), exportedId) + " was updated with " + modifiable.itemsUpdate());
- } else if (update instanceof FailedInvoiceUpdate failed && failed.reason == FailedInvoiceUpdate.Reason.REMOVED) {
- log.fine(invoiceMessage(bill.id(), exportedId) + " has been deleted in the external system");
- // Reset the exportedId to null, so that we don't maintain it again
- databaseClient.setExportedInvoiceId(bill.id(), null);
+ switch (update.type()) {
+ case UNMODIFIED -> log.finer(() ->invoiceMessage(bill.id(), exportedId) + " was not modified");
+ case MODIFIED -> log.fine(invoiceMessage(bill.id(), exportedId) + " was updated with " + update.itemsUpdate().get());
+ case UNMODIFIABLE -> {
+ if (bill.status() != BillStatus.FROZEN) {
+ log.fine(() -> invoiceMessage(bill.id(), exportedId) + " is now unmodifiable");
+ databaseClient.setStatus(bill.id(), "system", BillStatus.FROZEN);
+ }
+ }
+ case REMOVED -> {
+ log.fine(() -> invoiceMessage(bill.id(), exportedId) + " has been deleted in the external system");
+ // Reset the exportedId to null, so that we don't maintain it again
+ databaseClient.setExportedInvoiceId(bill.id(), null);
+ }
+ case PAID -> {
+ log.fine(() -> invoiceMessage(bill.id(), exportedId) + " has been paid in the external system");
+ databaseClient.setStatus(bill.id(), "system", BillStatus.SUCCESSFUL);
+ }
+ case VOIDED -> {
+ log.fine(() -> invoiceMessage(bill.id(), exportedId) + " has been voided in the external system");
+ databaseClient.setStatus(bill.id(), "system", BillStatus.VOID);
+ }
}
updates.add(update);
}