summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorØyvind Grønnesby <oyving@verizonmedia.com>2019-08-20 16:53:50 +0200
committerGitHub <noreply@github.com>2019-08-20 16:53:50 +0200
commit272c6dc7543f71a2a9b4311e1e7e4db4daa8b742 (patch)
tree16c78db6b4cf958b419ec258c099ad58d4caf346
parent2f80bbf78040338b4f81166b25e70d1f316a7d0d (diff)
parent08f55d40d35098af8db1f7969ad0239943777468 (diff)
Merge pull request #10345 from vespa-engine/olaa/response-fix
Fix metering response
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMeteringClient.java17
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java8
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java18
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-metering.json36
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}
+ ]
}
}
}