aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2021-02-16 21:42:34 +0100
committerJon Bratseth <bratseth@gmail.com>2021-02-16 21:42:34 +0100
commitbbd2558265dd80455f6b03285be926017c20a6ab (patch)
tree1247e512df60f9760052da5fa9337d74c8f5de43
parent713f51ff61a8eeafc0844741a3d4c91b903af84c (diff)
Expose the last hour average utilization
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterTimeseries.java1
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java13
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application1.json5
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application2.json5
4 files changed, 23 insertions, 1 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterTimeseries.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterTimeseries.java
index 147335753eb..e359579117f 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterTimeseries.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterTimeseries.java
@@ -49,6 +49,7 @@ public class ClusterTimeseries {
/** Returns the average load of this resource in this */
public double averageLoad(Resource resource) {
int measurementCount = allTimeseries.stream().mapToInt(m -> m.size()).sum();
+ if (measurementCount == 0) return 0;
double measurementSum = allTimeseries.stream().flatMap(m -> m.asList().stream()).mapToDouble(m -> value(resource, m)).sum();
return measurementSum / measurementCount;
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java
index 9206f80080b..ceaf88dd7d9 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java
@@ -10,9 +10,12 @@ import com.yahoo.vespa.hosted.provision.applications.Application;
import com.yahoo.vespa.hosted.provision.applications.Cluster;
import com.yahoo.vespa.hosted.provision.applications.ScalingEvent;
import com.yahoo.vespa.hosted.provision.autoscale.AllocatableClusterResources;
+import com.yahoo.vespa.hosted.provision.autoscale.ClusterTimeseries;
import com.yahoo.vespa.hosted.provision.autoscale.MetricsDb;
+import com.yahoo.vespa.hosted.provision.autoscale.Resource;
import java.net.URI;
+import java.time.Duration;
import java.util.Collection;
import java.util.List;
@@ -59,7 +62,7 @@ public class ApplicationSerializer {
if (cluster.shouldSuggestResources(currentResources))
cluster.suggestedResources().ifPresent(suggested -> toSlime(suggested.resources(), clusterObject.setObject("suggested")));
cluster.targetResources().ifPresent(target -> toSlime(target, clusterObject.setObject("target")));
- //toSlime(metricsDb.getNodeTimeseries(NodeList.copyOf(nodes),))
+ clusterUtilizationToSlime(cluster, NodeList.copyOf(applicationNodes), metricsDb, clusterObject.setObject("utilization"));
scalingEventsToSlime(cluster.scalingEvents(), clusterObject.setArray("scalingEvents"));
clusterObject.setString("autoscalingStatus", cluster.autoscalingStatus());
}
@@ -70,6 +73,14 @@ public class ApplicationSerializer {
NodeResourcesSerializer.toSlime(resources.nodeResources(), clusterResourcesObject.setObject("resources"));
}
+ private static void clusterUtilizationToSlime(Cluster cluster, NodeList nodes, MetricsDb metricsDb, Cursor utilizationObject) {
+ var timeseries = new ClusterTimeseries(Duration.ofHours(1), cluster, nodes, metricsDb);
+
+ utilizationObject.setDouble("cpu", timeseries.averageLoad(Resource.cpu));
+ utilizationObject.setDouble("memory", timeseries.averageLoad(Resource.memory));
+ utilizationObject.setDouble("disk", timeseries.averageLoad(Resource.disk));
+ }
+
private static void scalingEventsToSlime(List<ScalingEvent> scalingEvents, Cursor scalingEventsArray) {
for (ScalingEvent scalingEvent : scalingEvents) {
Cursor scalingEventObject = scalingEventsArray.addObject();
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application1.json
index 82f7e04f92b..a35c742bc2a 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application1.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application1.json
@@ -63,6 +63,11 @@
"storageType" : "any"
}
},
+ "utilization" : {
+ "cpu" : 0.0,
+ "memory" : 0.0,
+ "disk" : 0.0
+ },
"scalingEvents" : [
{
"from": {
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application2.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application2.json
index 0ee590f60e0..baf2528c74a 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application2.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application2.json
@@ -39,6 +39,11 @@
"storageType": "local"
}
},
+ "utilization" : {
+ "cpu" : 0.0,
+ "memory" : 0.0,
+ "disk" : 0.0
+ },
"scalingEvents" : [
{
"from": {