diff options
author | Ola Aunrønning <olaa@verizonmedia.com> | 2021-09-13 14:38:28 +0200 |
---|---|---|
committer | Ola Aunrønning <olaa@verizonmedia.com> | 2021-09-13 14:38:28 +0200 |
commit | 1de655ebf3fc597b4813f552999942a6d800373c (patch) | |
tree | ef11a79f3e7c5e1ddcb8184acd08ed2465f1ecdd /controller-server | |
parent | 15e9813f5b0ca000e19fba529a02dd695d5d00f4 (diff) |
Consider feature flag and plan
Diffstat (limited to 'controller-server')
2 files changed, 15 insertions, 5 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/horizon/HorizonApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/horizon/HorizonApiHandler.java index 19a5024833b..c116aa43c0d 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/horizon/HorizonApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/horizon/HorizonApiHandler.java @@ -14,6 +14,8 @@ import com.yahoo.vespa.flags.FetchVector; import com.yahoo.vespa.flags.FlagSource; import com.yahoo.vespa.flags.Flags; import com.yahoo.vespa.hosted.controller.Controller; +import com.yahoo.vespa.hosted.controller.api.integration.billing.BillingController; +import com.yahoo.vespa.hosted.controller.api.integration.billing.PlanId; import com.yahoo.vespa.hosted.controller.api.integration.horizon.HorizonClient; import com.yahoo.vespa.hosted.controller.api.integration.horizon.HorizonResponse; import com.yahoo.vespa.hosted.controller.api.role.Role; @@ -26,6 +28,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.EnumSet; +import java.util.HashSet; import java.util.Optional; import java.util.Set; import java.util.logging.Level; @@ -38,6 +41,7 @@ import java.util.stream.Collectors; */ public class HorizonApiHandler extends LoggingRequestHandler { + private final BillingController billingController; private final SystemName systemName; private final HorizonClient client; private final BooleanFlag enabledHorizonDashboard; @@ -48,6 +52,7 @@ public class HorizonApiHandler extends LoggingRequestHandler { @Inject public HorizonApiHandler(LoggingRequestHandler.Context parentCtx, Controller controller, FlagSource flagSource) { super(parentCtx); + this.billingController = controller.serviceRegistry().billingController(); this.systemName = controller.system(); this.client = controller.serviceRegistry().horizonClient(); this.enabledHorizonDashboard = Flags.ENABLED_HORIZON_DASHBOARD.bindTo(flagSource); @@ -121,11 +126,13 @@ public class HorizonApiHandler extends LoggingRequestHandler { } private Set<TenantName> getAuthorizedTenants(Set<Role> roles) { - return roles.stream() + var horizonEnabled = roles.stream() .filter(TenantRole.class::isInstance) .map(role -> ((TenantRole) role).tenant()) .filter(tenant -> enabledHorizonDashboard.with(FetchVector.Dimension.TENANT_ID, tenant.value()).value()) - .collect(Collectors.toUnmodifiableSet()); + .collect(Collectors.toList()); + + return new HashSet<>(billingController.tenantsWithPlan(horizonEnabled, PlanId.from("pay-as-you-go"))); } private static class JsonInputStreamResponse extends HttpResponse { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/HorizonApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/HorizonApiTest.java index ae2e57d1529..8e51f8210c7 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/HorizonApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/HorizonApiTest.java @@ -1,10 +1,10 @@ package com.yahoo.vespa.hosted.controller.restapi.horizon; -import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.TenantName; import com.yahoo.vespa.flags.Flags; import com.yahoo.vespa.flags.InMemoryFlagSource; +import com.yahoo.vespa.hosted.controller.api.integration.billing.PlanId; import com.yahoo.vespa.hosted.controller.api.role.Role; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerCloudTest; @@ -20,20 +20,23 @@ public class HorizonApiTest extends ControllerContainerCloudTest { @Test public void only_operators_and_flag_enabled_tenants_allowed() { ContainerTester tester = new ContainerTester(container, ""); + TenantName tenantName = TenantName.defaultName(); tester.assertResponse(request("/horizon/v1/config/dashboard/topFolders") .roles(Set.of(Role.hostedOperator())), "", 200); tester.assertResponse(request("/horizon/v1/config/dashboard/topFolders") - .roles(Set.of(Role.reader(TenantName.from("tenant")))), + .roles(Set.of(Role.reader(tenantName))), "{\"error-code\":\"FORBIDDEN\",\"message\":\"No tenant with enabled metrics view\"}", 403); ((InMemoryFlagSource) tester.controller().flagSource()) .withBooleanFlag(Flags.ENABLED_HORIZON_DASHBOARD.id(), true); + tester.controller().serviceRegistry().billingController().setPlan(tenantName, PlanId.from("pay-as-you-go"), true); + tester.assertResponse(request("/horizon/v1/config/dashboard/topFolders") - .roles(Set.of(Role.reader(TenantName.from("tenant")))), + .roles(Set.of(Role.reader(tenantName))), "", 200); } |