summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorValerij Fredriksen <valerij92@gmail.com>2021-05-27 15:07:29 +0200
committerValerij Fredriksen <valerijf@verizonmedia.com>2021-05-27 15:44:26 +0200
commit1aa55fe6dab3fb6c8696625e28fe910e67009f44 (patch)
treef59cb080eb7fbda375c168e6704b48d74ce34903 /node-repository
parent2cfd9a73adee4d2b6d3d446f19e61167e31bd043 (diff)
Expose current load in node-repo
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java8
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationSerializer.java20
-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
5 files changed, 33 insertions, 11 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java
index f5eb67f0979..e4b85b5317e 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java
@@ -19,6 +19,8 @@ import java.util.OptionalDouble;
*/
public class ClusterModel {
+ private static final Duration CURRENT_LOAD_DURATION = Duration.ofMinutes(5);
+
static final double idealQueryCpuLoad = 0.8;
static final double idealWriteCpuLoad = 0.95;
static final double idealMemoryLoad = 0.7;
@@ -96,7 +98,11 @@ public class ClusterModel {
return queryFractionOfMax = clusterTimeseries().queryFractionOfMax(scalingDuration(), clock);
}
- public Load averageLoad() { return nodeTimeseries().averageLoad(); }
+ /** Returns average load during the last {@link #CURRENT_LOAD_DURATION} */
+ public Load currentLoad() { return nodeTimeseries().averageLoad(clock.instant().minus(CURRENT_LOAD_DURATION)); }
+
+ /** Returns average load during the last {@link #scalingDuration()} */
+ public Load averageLoad() { return nodeTimeseries().averageLoad(clock.instant().minus(scalingDuration())); }
public Load idealLoad() {
return new Load(idealCpuLoad(), idealMemoryLoad, idealDiskLoad);
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java
index a7396f29d92..5f974abd84f 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterNodesTimeseries.java
@@ -5,6 +5,7 @@ import com.yahoo.vespa.hosted.provision.NodeList;
import com.yahoo.vespa.hosted.provision.applications.Cluster;
import java.time.Duration;
+import java.time.Instant;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -42,12 +43,13 @@ public class ClusterNodesTimeseries {
/** Returns the number of nodes measured in this */
public int nodesMeasured() { return timeseries.size(); }
- /** Returns the average load in this */
- public Load averageLoad() {
+ /** Returns the average load after the given instant */
+ public Load averageLoad(Instant start) {
Load total = Load.zero();
int count = 0;
for (var nodeTimeseries : timeseries) {
for (var snapshot : nodeTimeseries.asList()) {
+ if (snapshot.at().isBefore(start)) continue;
total = total.add(snapshot.load());
count++;
}
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 95909a64b52..380003affb3 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,6 +10,7 @@ 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.ClusterModel;
+import com.yahoo.vespa.hosted.provision.autoscale.Load;
import com.yahoo.vespa.hosted.provision.autoscale.MetricsDb;
import java.net.URI;
@@ -85,12 +86,19 @@ public class ApplicationSerializer {
}
private static void clusterUtilizationToSlime(ClusterModel clusterModel, Cursor utilizationObject) {
- utilizationObject.setDouble("cpu", clusterModel.averageLoad().cpu());
- utilizationObject.setDouble("idealCpu", clusterModel.idealLoad().cpu());
- utilizationObject.setDouble("memory", clusterModel.averageLoad().memory());
- utilizationObject.setDouble("idealMemory", clusterModel.idealLoad().memory());
- utilizationObject.setDouble("disk", clusterModel.averageLoad().disk());
- utilizationObject.setDouble("idealDisk", clusterModel.idealLoad().disk());
+ Load idealLoad = clusterModel.idealLoad();
+ Load averageLoad = clusterModel.averageLoad();
+ Load currentLoad = clusterModel.currentLoad();
+
+ utilizationObject.setDouble("cpu", averageLoad.cpu());
+ utilizationObject.setDouble("idealCpu", idealLoad.cpu());
+ utilizationObject.setDouble("currentCpu", currentLoad.cpu());
+ utilizationObject.setDouble("memory", averageLoad.memory());
+ utilizationObject.setDouble("idealMemory", idealLoad.memory());
+ utilizationObject.setDouble("currentMemory", currentLoad.memory());
+ utilizationObject.setDouble("disk", averageLoad.disk());
+ utilizationObject.setDouble("idealDisk", idealLoad.disk());
+ utilizationObject.setDouble("currentDisk", currentLoad.disk());
}
private static void scalingEventsToSlime(List<ScalingEvent> scalingEvents, Cursor scalingEventsArray) {
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 65e07c46242..1083930e294 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
@@ -67,10 +67,13 @@
"utilization" : {
"cpu" : 0.0,
"idealCpu": 0.275,
+ "currentCpu": 0.0,
"memory" : 0.0,
"idealMemory": 0.7,
+ "currentMemory": 0.0,
"disk" : 0.0,
- "idealDisk": 0.6
+ "idealDisk": 0.6,
+ "currentDisk": 0.0
},
"scalingEvents" : [
{
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 ecab55d19d4..61e0569d349 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
@@ -43,10 +43,13 @@
"utilization" : {
"cpu" : 0.0,
"idealCpu": 0.2664285714285714,
+ "currentCpu": 0.0,
"memory" : 0.0,
"idealMemory": 0.7,
+ "currentMemory": 0.0,
"disk" : 0.0,
- "idealDisk": 0.6
+ "idealDisk": 0.6,
+ "currentDisk": 0.0
},
"scalingEvents" : [
{