aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-07-12 13:59:42 +0200
committerJon Bratseth <bratseth@gmail.com>2022-07-12 13:59:42 +0200
commit548b8ed3214c5c637017038f837b3cc527de7045 (patch)
tree766a38bb89b50fab1276347811180d915ad0368d /node-repository
parent321ed2244e6cd5f785f5a7a83ad534fe2c716073 (diff)
Add total cost to stats
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java17
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepoStatsTest.java23
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/stats.json2
4 files changed, 35 insertions, 9 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java
index 085b89d1253..1460ce70686 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java
@@ -26,16 +26,23 @@ import java.util.Set;
*/
public class NodeRepoStats {
+ private final double totalCost;
+ private final double totalAllocatedCost;
private final Load load;
private final Load activeLoad;
private final List<ApplicationStats> applicationStats;
- private NodeRepoStats(Load load, Load activeLoad, List<ApplicationStats> applicationStats) {
+ private NodeRepoStats(double totalCost, double totalAllocatedCost, Load load, Load activeLoad, List<ApplicationStats> applicationStats) {
+ this.totalCost = totalCost;
+ this.totalAllocatedCost = totalAllocatedCost;
this.load = load;
this.activeLoad = activeLoad;
this.applicationStats = List.copyOf(applicationStats);
}
+ public double totalCost() { return totalCost; }
+ public double totalAllocatedCost() { return totalAllocatedCost; }
+
/**
* Returns the current average work-extracting utilization in this node repo over all nodes.
* Capacity not allocated to active nodes are taken to have 0 utilization as it provides no useful work.
@@ -50,11 +57,15 @@ public class NodeRepoStats {
public static NodeRepoStats computeOver(NodeRepository nodeRepository) {
NodeList allNodes = nodeRepository.nodes().list();
- List<NodeTimeseries> allNodeTimeseries = nodeRepository.metricsDb().getNodeTimeseries(Duration.ofHours(1), Set.of());
+ double totalCost = allNodes.hosts().stream().mapToDouble(host -> host.resources().cost()).sum();
+ double totalAllocatedCost = allNodes.not().hosts().stream()
+ .filter(node -> node.allocation().isPresent())
+ .mapToDouble(node -> node.resources().cost()).sum();
+ List<NodeTimeseries> allNodeTimeseries = nodeRepository.metricsDb().getNodeTimeseries(Duration.ofHours(1), Set.of());
Pair<Load, Load> load = computeLoad(allNodes, allNodeTimeseries);
List<ApplicationStats> applicationStats = computeApplicationStats(allNodes, allNodeTimeseries);
- return new NodeRepoStats(load.getFirst(), load.getSecond(), applicationStats);
+ return new NodeRepoStats(totalCost, totalAllocatedCost, load.getFirst(), load.getSecond(), applicationStats);
}
private static Pair<Load, Load> computeLoad(NodeList allNodes, List<NodeTimeseries> allNodeTimeseries) {
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java
index c5d8b2518e5..dcfdb32e374 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java
@@ -453,6 +453,8 @@ public class NodesV2ApiHandler extends ThreadedHttpRequestHandler {
Slime slime = new Slime();
Cursor root = slime.setObject();
+ root.setDouble("total-cost", stats.totalCost());
+ root.setDouble("total-allocated-cost", stats.totalAllocatedCost());
toSlime(stats.load(), root.setObject("load"));
toSlime(stats.activeLoad(), root.setObject("activeLoad"));
Cursor applicationsArray = root.setArray("applications");
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepoStatsTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepoStatsTest.java
index 62c96af7629..788c56e08c6 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepoStatsTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepoStatsTest.java
@@ -31,9 +31,13 @@ public class NodeRepoStatsTest {
@Test
public void testEmpty() {
var tester = new NodeRepositoryTester();
- assertLoad(Load.zero(), tester.nodeRepository().computeStats().load());
- assertLoad(Load.zero(), tester.nodeRepository().computeStats().activeLoad());
- assertTrue(tester.nodeRepository().computeStats().applicationStats().isEmpty());
+ var stats = tester.nodeRepository().computeStats();
+
+ assertEquals(0, stats.totalCost(), delta);
+ assertEquals(0, stats.totalAllocatedCost(), delta);
+ assertLoad(Load.zero(), stats.load());
+ assertLoad(Load.zero(), stats.activeLoad());
+ assertTrue(stats.applicationStats().isEmpty());
}
@Test
@@ -42,9 +46,13 @@ public class NodeRepoStatsTest {
tester.addHost("host1", "default");
tester.addHost("host2", "default");
tester.addHost("host3", "small");
- assertLoad(Load.zero(), tester.nodeRepository().computeStats().load());
- assertLoad(Load.zero(), tester.nodeRepository().computeStats().activeLoad());
- assertTrue(tester.nodeRepository().computeStats().applicationStats().isEmpty());
+ var stats = tester.nodeRepository().computeStats();
+
+ assertEquals(0.76, stats.totalCost(), delta);
+ assertEquals(0, stats.totalAllocatedCost(), delta);
+ assertLoad(Load.zero(), stats.load());
+ assertLoad(Load.zero(), stats.activeLoad());
+ assertTrue(stats.applicationStats().isEmpty());
}
@Test
@@ -97,6 +105,9 @@ public class NodeRepoStatsTest {
var stats = tester.nodeRepository().computeStats();
+ assertEquals(26, stats.totalCost(), delta);
+ assertEquals(8.319999999999999, stats.totalAllocatedCost(), delta);
+
assertLoad(new Load(0.6180,0.5562,0.4944), stats.load());
assertLoad(new Load(0.4682,0.4214,0.3745), stats.activeLoad());
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/stats.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/stats.json
index 8a46f8115be..017a45d2bbe 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/stats.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/stats.json
@@ -1,4 +1,6 @@
{
+ "total-cost" : 8.591999999999999,
+ "total-allocated-cost": 5.356,
"load": {
"cpu": 0.0,
"memory": 0.0,