diff options
author | gjoranv <gjoranv@gmail.com> | 2023-11-01 21:41:43 +0100 |
---|---|---|
committer | gjoranv <gjoranv@gmail.com> | 2023-11-01 21:43:28 +0100 |
commit | abaa1da8fce463f86aa007de5461bc8570aed196 (patch) | |
tree | e5ce975d090649b465004051745595cfeb508a63 /controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance | |
parent | dd51bd4fa5d3b6abe423a0d54e38be3d3c9cd4a7 (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.java | 32 |
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); } |