aboutsummaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorØyvind Grønnesby <oyving@verizonmedia.com>2021-05-04 15:42:02 +0200
committerØyvind Grønnesby <oyving@verizonmedia.com>2021-05-04 15:42:02 +0200
commitde02247aea4521aa923b2e62284d5200dd4fe57f (patch)
tree02a30e68d3e55f8fa609d054357424a889a9c024 /controller-api
parent0d1ae535057f3884fc4c438a5886c2af85347781 (diff)
Accountant methods for BillingApiHandlerV2
- Create the accountant methods to preview and create bills - Make sure classes take a Clock through constructor to help with testing - Update path groups for accountant view
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Invoice.java7
-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/role/PathGroup.java2
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/Policy.java2
4 files changed, 12 insertions, 6 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 39d974378b4..f8ef2958f63 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
@@ -6,6 +6,8 @@ import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.zone.ZoneId;
import java.math.BigDecimal;
+import java.time.Clock;
+import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.List;
import java.util.Map;
@@ -325,9 +327,10 @@ public class Invoice {
this.history = history;
}
- public static StatusHistory open() {
+ public static StatusHistory open(Clock clock) {
+ var now = clock.instant().atZone(ZoneOffset.UTC);
return new StatusHistory(
- new TreeMap<>(Map.of(ZonedDateTime.now(), "OPEN"))
+ new TreeMap<>(Map.of(now, "OPEN"))
);
}
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 ab2d8b8dce5..535f344d352 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
@@ -70,7 +70,7 @@ public class MockBillingController implements BillingController {
.add(new Invoice(
invoiceId,
tenant,
- Invoice.StatusHistory.open(),
+ Invoice.StatusHistory.open(clock),
List.of(),
startTime,
endTime
@@ -111,10 +111,11 @@ public class MockBillingController implements BillingController {
@Override
public void updateInvoiceStatus(Invoice.Id invoiceId, String agent, String status) {
+ var now = clock.instant().atZone(ZoneOffset.UTC);
committedInvoices.values().stream()
.flatMap(List::stream)
.filter(invoice -> invoiceId.equals(invoice.id()))
- .forEach(invoice -> invoice.statusHistory().history.put(ZonedDateTime.now(), status));
+ .forEach(invoice -> invoice.statusHistory().history.put(now, status));
}
@Override
@@ -201,6 +202,6 @@ public class MockBillingController implements BillingController {
private Invoice emptyInvoice() {
var start = clock.instant().atZone(ZoneOffset.UTC);
var end = clock.instant().atZone(ZoneOffset.UTC);
- return new Invoice(Invoice.Id.of("empty"), TenantName.defaultName(), Invoice.StatusHistory.open(), List.of(), start, end);
+ return new Invoice(Invoice.Id.of("empty"), TenantName.defaultName(), Invoice.StatusHistory.open(clock), List.of(), start, end);
}
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java
index 558beb20e66..9f6c0a79455 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java
@@ -81,6 +81,8 @@ enum PathGroup {
billing(Matcher.tenant,
"/billing/v2/tenant/{tenant}/{*}"),
+ accountant("/billing/v2/accountant/{*}"),
+
applicationKeys(Matcher.tenant,
Matcher.application,
"/application/v4/tenant/{tenant}/application/{application}/key/"),
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/Policy.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/Policy.java
index 8bfb10c2e3e..ee5f1d806ab 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/Policy.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/Policy.java
@@ -190,7 +190,7 @@ enum Policy {
/** Invoice management */
hostedAccountant(Privilege.grant(Action.all())
- .on(PathGroup.hostedAccountant)
+ .on(PathGroup.hostedAccountant, PathGroup.accountant)
.in(SystemName.PublicCd, SystemName.Public)),
/** Listing endpoint certificate request info */