aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eriksen <andreer@verizonmedia.com>2019-11-06 12:42:02 +0100
committerGitHub <noreply@github.com>2019-11-06 12:42:02 +0100
commit623b4729ec84db076277976057a90f93d6e07f2d (patch)
tree4ade44afef3b3ddd3672548410d9280e6725a173
parenteb2386f4b3c7ac812c70df74f105573eb2721b6a (diff)
parentec4dee51a04fbf0fa637f2c98c96598cf513e726 (diff)
Merge pull request #11220 from vespa-engine/andreer/metric-for-tenant-allocations
add metrics for application allocations
-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.
*/