aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorn.christian@seime.no>2023-10-31 13:42:26 +0100
committerGitHub <noreply@github.com>2023-10-31 13:42:26 +0100
commita06b9c56ec1d65e951b94473c49e746c736dc19c (patch)
tree4ca1220e3e0f39324f10e7ed161fb47680efc1aa
parent2b1738649f29851b57e527d07967054ea25c9273 (diff)
parent2d37b346ddcf213aa6957d487860f45840602ff7 (diff)
Merge pull request #29165 from vespa-engine/ogronnesby/bill-summarizer-2
Fix bill ID in API output
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Bill.java8
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2.java17
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java2
3 files changed, 21 insertions, 6 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Bill.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Bill.java
index aac6d986a6e..7c95a2138d2 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Bill.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Bill.java
@@ -409,6 +409,14 @@ public class Bill {
architecture(item -> {
var arch = item.getArchitecture();
return arch.orElse(null);
+ }),
+ application(item -> {
+ var app = item.applicationId();
+ return app.orElse(null);
+ }),
+ environment(item -> {
+ var zone = item.zoneId();
+ return zone.map(ZoneId::environment).orElse(null);
});
private final Function<LineItem, Object> extractor;
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2.java
index eacc156f3e0..7f3ff06ce88 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2.java
@@ -42,12 +42,10 @@ import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Comparator;
-import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.logging.Logger;
-import java.util.stream.Collectors;
/**
* @author ogronnesby
@@ -450,7 +448,7 @@ public class BillingApiHandlerV2 extends RestApiRequestHandler<BillingApiHandler
var response = bill.summarizeBy(requestKeys);
var slime = new Slime();
- toSlime(slime.setObject(), bill, response);
+ toSlime(slime.setObject(), bill, response, bill.lineItems().stream().filter(Bill.LineItem::isAdditional).toList());
return slime;
}
@@ -596,12 +594,21 @@ public class BillingApiHandlerV2 extends RestApiRequestHandler<BillingApiHandler
}
}
- private void toSlime(Cursor slime, Bill bill, Map<Bill.ItemKey, Bill.ItemSummary> summaries) {
- slime.setString("id", bill.id().toString());
+ private void toSlime(Cursor slime, Bill bill, Map<Bill.ItemKey, Bill.ItemSummary> summaries, List<Bill.LineItem> additional) {
+ slime.setString("id", bill.id().value());
var summaryCursor = slime.setArray("summary");
summaries.forEach((key, summary) -> {
toSlime(summaryCursor.addObject(), key, summary);
});
+ var additionalCursor = slime.setArray("additional");
+ additional.forEach(item -> {
+ additionalSummaryToSlime(additionalCursor, item);
+ });
+ }
+
+ private void additionalSummaryToSlime(Cursor slime, Bill.LineItem item) {
+ slime.setString("description", item.description());
+ slime.setString("amount", item.amount().toPlainString());
}
private void toSlime(Cursor slime, Bill.ItemKey key, Bill.ItemSummary summary) {
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java
index f09588bdf19..2a1f6a79645 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java
@@ -263,7 +263,7 @@ public class BillingApiHandlerV2Test extends ControllerContainerCloudTest {
var req = request("/billing/v2/accountant/bill/id-1/summary?keys=plan,architecture")
.roles(Role.hostedAccountant());
tester.assertResponse(req, """
- {"id":"BillId{value='id-1'}","summary":[{"key":{"plan":"paid","architecture":null},"summary":{"cpu":{"cost":"0","hours":"0"},"memory":{"cost":"0","hours":"0"},"disk":{"cost":"0","hours":"0"},"gpu":{"cost":"0","hours":"0"}}}]}""");
+ {"id":"id-1","summary":[{"key":{"plan":"paid","architecture":null},"summary":{"cpu":{"cost":"0","hours":"0"},"memory":{"cost":"0","hours":"0"},"disk":{"cost":"0","hours":"0"},"gpu":{"cost":"0","hours":"0"}}}],"additional":[]}""");
}
private static Bill createBill() {