From 6d08ced9c0bec22d1c9d29aedad2b1f3c44747aa Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Fri, 12 May 2023 17:39:12 +0200 Subject: Add cluster.cost metric --- .../provision/maintenance/MetricsReporter.java | 25 ++++++++++++++++------ .../provision/maintenance/MetricsReporterTest.java | 4 ++++ 2 files changed, 23 insertions(+), 6 deletions(-) (limited to 'node-repository') diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java index e6cfe8ca6b5..97427b4baee 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.hosted.provision.maintenance; import com.yahoo.collections.Pair; import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; @@ -77,7 +78,8 @@ public class MetricsReporter extends NodeRepositoryMaintainer { updateTenantUsageMetrics(nodes); updateRepairTicketMetrics(nodes); updateAllocationMetrics(nodes); - updateExclusiveSwitchMetrics(nodes); + updateClusterMetrics(nodes); + updateClusterMetrics(nodes); return 1.0; } @@ -109,20 +111,31 @@ public class MetricsReporter extends NodeRepositoryMaintainer { }); } - private void updateExclusiveSwitchMetrics(NodeList nodes) { + private void updateClusterMetrics(NodeList nodes) { Map> byCluster = nodes.stream() .filter(node -> node.type() == NodeType.tenant) .filter(node -> node.state() == State.active) .filter(node -> node.allocation().isPresent()) .collect(Collectors.groupingBy(node -> new ClusterId(node.allocation().get().owner(), node.allocation().get().membership().cluster().id()))); byCluster.forEach((clusterId, clusterNodes) -> { - NodeList clusterHosts = nodes.parentsOf(NodeList.copyOf(clusterNodes)); - long nodesOnExclusiveSwitch = NodeList.copyOf(clusterNodes).onExclusiveSwitch(clusterHosts).size(); - double exclusiveSwitchRatio = nodesOnExclusiveSwitch / (double) clusterNodes.size(); - metric.set("nodes.exclusiveSwitchFraction", exclusiveSwitchRatio, getContext(dimensions(clusterId.application(), clusterId.cluster()))); + Metric.Context context = getContext(dimensions(clusterId.application(), clusterId.cluster())); + updateExclusiveSwitchMetrics(clusterNodes, nodes, context); + updateClusterCostMetrics(clusterNodes, context); }); } + private void updateExclusiveSwitchMetrics(List clusterNodes, NodeList allNodes, Metric.Context context) { + NodeList clusterHosts = allNodes.parentsOf(NodeList.copyOf(clusterNodes)); + long nodesOnExclusiveSwitch = NodeList.copyOf(clusterNodes).onExclusiveSwitch(clusterHosts).size(); + double exclusiveSwitchRatio = nodesOnExclusiveSwitch / (double) clusterNodes.size(); + metric.set("nodes.exclusiveSwitchFraction", exclusiveSwitchRatio,context); + } + + private void updateClusterCostMetrics(List clusterNodes, Metric.Context context) { + double cost = clusterNodes.stream().mapToDouble(node -> node.resources().cost()).sum(); + metric.set("cluster.cost", cost, context); + } + private void updateZoneMetrics() { metric.set("zone.working", nodeRepository().nodes().isWorking() ? 1 : 0, null); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java index 065c6e015b6..487355a0b75 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java @@ -257,6 +257,10 @@ public class MetricsReporterTest { assertEquals(4, getMetric("nodes.active", metric, dimensions)); assertEquals(0, getMetric("nodes.nonActive", metric, dimensions)); + Map clusterDimensions = Map.of("applicationId", application.toFullString(), + "clusterid", ProvisioningTester.contentClusterSpec().id().value()); + assertEquals(1.392, getMetric("cluster.cost", metric, clusterDimensions)); + // One node fails tester.fail(activeNodes.get(0).hostname()); metricsReporter.maintain(); -- cgit v1.2.3 From adce8de6e1d137fccc0de1aa8e1399b1e3dd3c70 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Fri, 12 May 2023 20:06:41 +0200 Subject: Remove spurious lines --- .../com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java | 2 -- 1 file changed, 2 deletions(-) (limited to 'node-repository') diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java index 97427b4baee..4f94f0fab53 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java @@ -4,7 +4,6 @@ package com.yahoo.vespa.hosted.provision.maintenance; import com.yahoo.collections.Pair; import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; @@ -79,7 +78,6 @@ public class MetricsReporter extends NodeRepositoryMaintainer { updateRepairTicketMetrics(nodes); updateAllocationMetrics(nodes); updateClusterMetrics(nodes); - updateClusterMetrics(nodes); return 1.0; } -- cgit v1.2.3