From 2f558270cc3bb6ebe2567c2e5c5a9ccb5057c032 Mon Sep 17 00:00:00 2001 From: Øyvind Grønnesby Date: Tue, 31 Oct 2023 11:22:43 +0100 Subject: Fix bill ID in API output --- .../vespa/hosted/controller/restapi/billing/BillingApiHandlerV2.java | 2 +- .../hosted/controller/restapi/billing/BillingApiHandlerV2Test.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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..d26bf93334f 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 @@ -597,7 +597,7 @@ public class BillingApiHandlerV2 extends RestApiRequestHandler summaries) { - slime.setString("id", bill.id().toString()); + slime.setString("id", bill.id().value()); var summaryCursor = slime.setArray("summary"); summaries.forEach((key, summary) -> { toSlime(summaryCursor.addObject(), key, 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..1db0e248b76 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"}}}]}"""); } private static Bill createBill() { -- cgit v1.2.3 From c05faaedd1e469662ad3bb3b9796316efc9c4135 Mon Sep 17 00:00:00 2001 From: Øyvind Grønnesby Date: Tue, 31 Oct 2023 11:45:59 +0100 Subject: Expose additional items together with summaries --- .../controller/restapi/billing/BillingApiHandlerV2.java | 15 +++++++++++---- .../restapi/billing/BillingApiHandlerV2Test.java | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) 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 d26bf93334f..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 summaries) { + private void toSlime(Cursor slime, Bill bill, Map summaries, List 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 1db0e248b76..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":"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() { -- cgit v1.2.3 From 2d37b346ddcf213aa6957d487860f45840602ff7 Mon Sep 17 00:00:00 2001 From: Øyvind Grønnesby Date: Tue, 31 Oct 2023 11:58:43 +0100 Subject: Support more dimensions --- .../vespa/hosted/controller/api/integration/billing/Bill.java | 8 ++++++++ 1 file changed, 8 insertions(+) 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 extractor; -- cgit v1.2.3