diff options
author | Andreas Eriksen <andreer@pvv.ntnu.no> | 2019-03-29 12:57:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-29 12:57:06 +0100 |
commit | c80efa549d928994d9de5b2ff03804b11d1e7e04 (patch) | |
tree | 93f03bc0c0041a074519d6c73e20fbb6b0076174 | |
parent | 399a5dc9b483ca40690b940ecebb6fea96cdbc7d (diff) | |
parent | 9f3ba8ddb5093b2f3164d338d46d005977098aba (diff) |
Merge pull request #8956 from vespa-engine/andreer/cost-api-other-clouds
cost api by cloud
3 files changed, 24 insertions, 20 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/CostReportMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/CostReportMaintainer.java index a76d472cc89..2b26e93aeb8 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/CostReportMaintainer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/CostReportMaintainer.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.hosted.controller.maintenance; import com.google.inject.Inject; +import com.yahoo.config.provision.CloudName; import com.yahoo.config.provision.SystemName; import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeRepositoryClientInterface; @@ -46,6 +47,6 @@ public class CostReportMaintainer extends Maintainer { @Override protected void maintain() { - consumer.Consume(CostCalculator.resourceShareByPropertyToCsv(nodeRepository, controller(), clock, selfHostedCostConfig)); + consumer.Consume(CostCalculator.resourceShareByPropertyToCsv(nodeRepository, controller(), clock, selfHostedCostConfig, CloudName.from("yahoo"))); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/cost/CostApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/cost/CostApiHandler.java index 444153089da..a82d2f22e74 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/cost/CostApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/cost/CostApiHandler.java @@ -1,5 +1,6 @@ package com.yahoo.vespa.hosted.controller.restapi.cost; +import com.yahoo.config.provision.CloudName; import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.jdisc.LoggingRequestHandler; @@ -11,6 +12,7 @@ import com.yahoo.vespa.hosted.controller.restapi.StringResponse; import com.yahoo.vespa.hosted.controller.restapi.cost.config.SelfHostedCostConfig; import java.time.Clock; +import java.util.Optional; import static com.yahoo.jdisc.http.HttpRequest.Method.GET; @@ -36,7 +38,9 @@ public class CostApiHandler extends LoggingRequestHandler { Path path = new Path(request.getUri().getPath()); if (path.matches("/cost/v1/csv")) { - return new StringResponse(CostCalculator.resourceShareByPropertyToCsv(nodeRepository, controller, Clock.systemUTC(), selfHostedCostConfig)); + Optional<String> cloudProperty = Optional.ofNullable(request.getProperty("cloud")); + CloudName cloud = cloudProperty.map(CloudName::from).orElse(CloudName.defaultName()); + return new StringResponse(CostCalculator.resourceShareByPropertyToCsv(nodeRepository, controller, Clock.systemUTC(), selfHostedCostConfig, cloud)); } return ErrorResponse.notFoundError("Nothing at " + path); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/cost/CostCalculator.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/cost/CostCalculator.java index fc30ecc97bb..18c00d69b62 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/cost/CostCalculator.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/cost/CostCalculator.java @@ -3,7 +3,6 @@ package com.yahoo.vespa.hosted.controller.restapi.cost; import com.yahoo.config.provision.CloudName; import com.yahoo.config.provision.Environment; import com.yahoo.vespa.hosted.controller.Controller; -import com.yahoo.vespa.hosted.controller.api.identifiers.ApplicationId; import com.yahoo.vespa.hosted.controller.api.identifiers.Property; import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeOwner; import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeRepositoryClientInterface; @@ -14,9 +13,7 @@ import com.yahoo.vespa.hosted.controller.tenant.AthenzTenant; import java.time.Clock; import java.time.LocalDate; -import java.util.ArrayList; import java.util.Comparator; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -29,30 +26,32 @@ public class CostCalculator { private static final double SELF_HOSTED_DISCOUNT = .5; public static String resourceShareByPropertyToCsv(NodeRepositoryClientInterface nodeRepository, - Controller controller, - Clock clock, - SelfHostedCostConfig selfHostedCostConfig) { + Controller controller, + Clock clock, + SelfHostedCostConfig selfHostedCostConfig, + CloudName cloudName) { String date = LocalDate.now(clock).toString(); List<NodeRepositoryNode> nodes = controller.zoneRegistry().zones() - .reachable().in(Environment.prod).ofCloud(CloudName.from("yahoo")).ids().stream() + .reachable().in(Environment.prod).ofCloud(cloudName).ids().stream() .flatMap(zoneId -> uncheck(() -> nodeRepository.listNodes(zoneId, true).nodes().stream())) .filter(node -> node.getOwner() != null && !node.getOwner().getTenant().equals("hosted-vespa")) .collect(Collectors.toList()); - selfHostedCostConfig.properties().stream().map(property -> { - NodeRepositoryNode selfHostedNode = new NodeRepositoryNode(); + if (cloudName.equals(CloudName.from("yahoo"))) + selfHostedCostConfig.properties().stream().map(property -> { + NodeRepositoryNode selfHostedNode = new NodeRepositoryNode(); - NodeOwner owner = new NodeOwner(); - owner.tenant = property.name(); - selfHostedNode.setOwner(owner); - selfHostedNode.setMinCpuCores(property.cpuCores() * SELF_HOSTED_DISCOUNT); - selfHostedNode.setMinMainMemoryAvailableGb(property.memoryGb() * SELF_HOSTED_DISCOUNT); - selfHostedNode.setMinDiskAvailableGb(property.diskGb() * SELF_HOSTED_DISCOUNT); + NodeOwner owner = new NodeOwner(); + owner.tenant = property.name(); + selfHostedNode.setOwner(owner); + selfHostedNode.setMinCpuCores(property.cpuCores() * SELF_HOSTED_DISCOUNT); + selfHostedNode.setMinMainMemoryAvailableGb(property.memoryGb() * SELF_HOSTED_DISCOUNT); + selfHostedNode.setMinDiskAvailableGb(property.diskGb() * SELF_HOSTED_DISCOUNT); - return selfHostedNode; - }).forEach(nodes::add); + return selfHostedNode; + }).forEach(nodes::add); ResourceAllocation totalResourceAllocation = ResourceAllocation.from(nodes); @@ -73,7 +72,7 @@ public class CostCalculator { node -> propertyByTenantName.get(node.getOwner().tenant), Collectors.collectingAndThen( Collectors.toList(), - (tenantNodes) -> ResourceAllocation.from(tenantNodes) + ResourceAllocation::from ) )); |