diff options
author | Valerij Fredriksen <valerij92@gmail.com> | 2021-05-27 15:07:29 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@verizonmedia.com> | 2021-05-27 15:44:26 +0200 |
commit | 1aa55fe6dab3fb6c8696625e28fe910e67009f44 (patch) | |
tree | f59cb080eb7fbda375c168e6704b48d74ce34903 /node-repository | |
parent | 2cfd9a73adee4d2b6d3d446f19e61167e31bd043 (diff) |
Expose current load in node-repo
Diffstat (limited to 'node-repository')
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" : [ { |