summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorandreer <andreer@verizonmedia.com>2019-11-05 15:32:40 +0100
committerandreer <andreer@verizonmedia.com>2019-11-05 15:32:40 +0100
commitec4dee51a04fbf0fa637f2c98c96598cf513e726 (patch)
treec9a4eb6c6260f7a57f1bfc1461f38cb6ebff8446 /node-repository
parentb0c27ed75420e2fb3c7a290a338fe34c66b2d7f2 (diff)
add metrics for application allocations
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java23
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java21
2 files changed, 44 insertions, 0 deletions
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 c2f815b9d5d..5c8aab4d0aa 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
@@ -63,6 +63,7 @@ public class MetricsReporter extends Maintainer {
updateStateMetrics(nodes);
updateMaintenanceMetrics();
updateDockerMetrics(nodes);
+ updateTenantUsageMetrics(nodes);
}
private void updateMaintenanceMetrics() {
@@ -212,6 +213,28 @@ public class MetricsReporter extends Maintainer {
metric.set("hostedVespa.docker.freeCapacityDisk", totalFreeCapacity.diskGb(), null);
}
+ private void updateTenantUsageMetrics(NodeList nodes) {
+ nodes.nodeType(NodeType.tenant).stream()
+ .filter(node -> node.allocation().isPresent())
+ .collect(Collectors.groupingBy(node -> node.allocation().get().owner()))
+ .forEach(
+ (applicationId, applicationNodes) -> {
+ var allocatedCapacity = applicationNodes.stream()
+ .map(node -> node.allocation().get().requestedResources().withDiskSpeed(any))
+ .reduce(new NodeResources(0, 0, 0, 0, any), NodeResources::add);
+
+ var context = getContextAt(
+ "tenantName", applicationId.tenant().value(),
+ "applicationId", applicationId.serializedForm().replace(':', '.'),
+ "app", toApp(applicationId));
+
+ metric.set("hostedVespa.docker.allocatedCapacityCpu", allocatedCapacity.vcpu(), context);
+ metric.set("hostedVespa.docker.allocatedCapacityMem", allocatedCapacity.memoryGb(), context);
+ metric.set("hostedVespa.docker.allocatedCapacityDisk", allocatedCapacity.diskGb(), context);
+ }
+ );
+ }
+
private static NodeResources getCapacityTotal(NodeList nodes) {
return nodes.nodeType(NodeType.host).asList().stream()
.map(host -> host.flavor().resources())
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 ed6e6c6e9a7..539d8c7cff2 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
@@ -162,6 +162,16 @@ public class MetricsReporterTest {
assertEquals(6.0, metric.values.get("hostedVespa.docker.freeCapacityDisk"));
assertEquals(3.0, metric.values.get("hostedVespa.docker.freeCapacityMem"));
assertEquals(4.0, metric.values.get("hostedVespa.docker.freeCapacityCpu"));
+
+ Metric.Context app1context = metric.createContext(Map.of("app", "test.default", "tenantName", "app1", "applicationId", "app1.test.default"));
+ assertEquals(2.0, metric.sumDoubleValues("hostedVespa.docker.allocatedCapacityDisk", app1context), 0.01d);
+ assertEquals(3.0, metric.sumDoubleValues("hostedVespa.docker.allocatedCapacityMem", app1context), 0.01d);
+ assertEquals(1.0, metric.sumDoubleValues("hostedVespa.docker.allocatedCapacityCpu", app1context), 0.01d);
+
+ Metric.Context app2context = metric.createContext(Map.of("app", "test.default", "tenantName", "app2", "applicationId", "app2.test.default"));
+ assertEquals(4.0, metric.sumDoubleValues("hostedVespa.docker.allocatedCapacityDisk", app2context), 0.01d);
+ assertEquals(4.0, metric.sumDoubleValues("hostedVespa.docker.allocatedCapacityMem", app2context), 0.01d);
+ assertEquals(2.0, metric.sumDoubleValues("hostedVespa.docker.allocatedCapacityCpu", app2context), 0.01d);
}
private ApplicationId app(String tenant) {
@@ -221,6 +231,17 @@ public class MetricsReporterTest {
return new TestContext(properties);
}
+ double sumDoubleValues(String key, Context sumContext) {
+ double sum = 0.0;
+ for(Context c : context.get(key)) {
+ TestContext tc = (TestContext) c;
+ if (tc.value instanceof Double && tc.properties.equals(((TestContext) sumContext).properties)) {
+ sum += (double) tc.value;
+ }
+ }
+ return sum;
+ }
+
/**
* Context where the propertymap is not shared - but unique to each value.
*/