diff options
4 files changed, 57 insertions, 22 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMeteringClient.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMeteringClient.java index ae3c4a579a2..ed9c95bb795 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMeteringClient.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMeteringClient.java @@ -1,15 +1,15 @@ // Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.api.integration.stubs; -import com.yahoo.config.provision.ApplicationId; import com.yahoo.vespa.hosted.controller.api.integration.resource.MeteringInfo; import com.yahoo.vespa.hosted.controller.api.integration.resource.ResourceAllocation; import com.yahoo.vespa.hosted.controller.api.integration.resource.ResourceSnapshot; import com.yahoo.vespa.hosted.controller.api.integration.resource.MeteringClient; import java.util.ArrayList; +import java.util.Collections; import java.util.List; -import java.util.Map; +import java.util.Optional; /** * @author olaa @@ -17,6 +17,7 @@ import java.util.Map; public class MockMeteringClient implements MeteringClient { private List<ResourceSnapshot> resources = new ArrayList<>(); + private Optional<MeteringInfo> meteringInfo; @Override public void consume(List<ResourceSnapshot> resources){ @@ -25,13 +26,17 @@ public class MockMeteringClient implements MeteringClient { @Override public MeteringInfo getResourceSnapshots(String tenantName, String applicationName) { - ResourceAllocation emptyAllocation = new ResourceAllocation(0, 0, 0); - ApplicationId applicationId = ApplicationId.from(tenantName, applicationName, "default"); - Map<ApplicationId, List<ResourceSnapshot>> snapshotHistory = Map.of(applicationId, new ArrayList<>()); - return new MeteringInfo(emptyAllocation, emptyAllocation, emptyAllocation, snapshotHistory); + return meteringInfo.orElseGet(() -> { + ResourceAllocation emptyAllocation = new ResourceAllocation(0, 0, 0); + return new MeteringInfo(emptyAllocation, emptyAllocation, emptyAllocation, Collections.emptyMap()); + }); } public List<ResourceSnapshot> consumedResources() { return this.resources; } + + public void setMeteringInfo(MeteringInfo meteringInfo) { + this.meteringInfo = Optional.of(meteringInfo); + } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index 4772637ecfd..409a93a8f2d 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -826,12 +826,12 @@ public class ApplicationApiHandler extends LoggingRequestHandler { cpu.setDouble("value", resourceSnapshot.getCpuCores()); Cursor mem = detailsMemData.addObject(); - cpu.setLong("unixms", resourceSnapshot.getTimestamp().toEpochMilli()); - cpu.setDouble("value", resourceSnapshot.getMemoryGb()); + mem.setLong("unixms", resourceSnapshot.getTimestamp().toEpochMilli()); + mem.setDouble("value", resourceSnapshot.getMemoryGb()); Cursor disk = detailsDiskData.addObject(); - cpu.setLong("unixms", resourceSnapshot.getTimestamp().toEpochMilli()); - cpu.setDouble("value", resourceSnapshot.getDiskGb()); + disk.setLong("unixms", resourceSnapshot.getTimestamp().toEpochMilli()); + disk.setDouble("value", resourceSnapshot.getDiskGb()); }); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java index 8db820f6c83..79fd06b52aa 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java @@ -36,6 +36,10 @@ import com.yahoo.vespa.hosted.controller.api.integration.organization.Contact; import com.yahoo.vespa.hosted.controller.api.integration.organization.IssueId; import com.yahoo.vespa.hosted.controller.api.integration.organization.MockContactRetriever; import com.yahoo.vespa.hosted.controller.api.integration.organization.User; +import com.yahoo.vespa.hosted.controller.api.integration.resource.MeteringInfo; +import com.yahoo.vespa.hosted.controller.api.integration.resource.ResourceAllocation; +import com.yahoo.vespa.hosted.controller.api.integration.resource.ResourceSnapshot; +import com.yahoo.vespa.hosted.controller.api.integration.stubs.MockMeteringClient; import com.yahoo.vespa.hosted.controller.application.ApplicationPackage; import com.yahoo.vespa.hosted.controller.application.Change; import com.yahoo.vespa.hosted.controller.application.ClusterInfo; @@ -861,6 +865,20 @@ public class ApplicationApiTest extends ControllerContainerTest { @Test public void testMeteringResponses() { + MockMeteringClient mockMeteringClient = (MockMeteringClient) controllerTester.controller().meteringClient(); + + // Mock response for MeteringClient + ResourceAllocation currentSnapshot = new ResourceAllocation(1, 2, 3); + ResourceAllocation thisMonth = new ResourceAllocation(12, 24, 1000); + ResourceAllocation lastMonth = new ResourceAllocation(24, 48, 2000); + ApplicationId applicationId = ApplicationId.from("doesnotexist", "doesnotexist", "default"); + Map<ApplicationId, List<ResourceSnapshot>> snapshotHistory = Map.of(applicationId, List.of( + new ResourceSnapshot(applicationId, 1, 2,3, Instant.ofEpochMilli(123)), + new ResourceSnapshot(applicationId, 1, 2,3, Instant.ofEpochMilli(246)), + new ResourceSnapshot(applicationId, 1, 2,3, Instant.ofEpochMilli(492)))); + + mockMeteringClient.setMeteringInfo(new MeteringInfo(thisMonth, lastMonth, currentSnapshot, snapshotHistory)); + tester.assertResponse(request("/application/v4/tenant/doesnotexist/application/doesnotexist/metering", GET) .userIdentity(USER_ID) .oktaAccessToken(OKTA_AT), diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-metering.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-metering.json index 92d45c624fa..2e07a7e8a96 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-metering.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-metering.json @@ -1,33 +1,45 @@ { "currentrate": { - "cpu": 0.0, - "mem": 0.0, - "disk": 0.0 + "cpu": 1.0, + "mem": 2.0, + "disk": 3.0 }, "thismonth": { - "cpu": 0.0, - "mem": 0.0, - "disk": 0.0 + "cpu": 12.0, + "mem": 24.0, + "disk": 1000.0 }, "lastmonth": { - "cpu": 0.0, - "mem": 0.0, - "disk": 0.0 + "cpu": 24.0, + "mem": 48.0, + "disk": 2000.0 }, "details": { "cpu": { "default": { - "data": [] + "data": [ + {"unixms":123,"value":1.0}, + {"unixms":246,"value":1.0}, + {"unixms":492,"value":1.0} + ] } }, "mem": { "default": { - "data": [] + "data": [ + {"unixms":123,"value":2.0}, + {"unixms":246,"value":2.0}, + {"unixms":492,"value":2.0} + ] } }, "disk": { "default": { - "data": [] + "data": [ + {"unixms":123,"value":3.0}, + {"unixms":246,"value":3.0}, + {"unixms":492,"value":3.0} + ] } } } |