summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeandro Alves <ldalves@gmail.com>2017-09-22 13:27:25 +0200
committerGitHub <noreply@github.com>2017-09-22 13:27:25 +0200
commit87d4f61947b51b969e2c7219bb957868def958c9 (patch)
tree0fc6c8c877b762f1e3af8bf776ad5f15505d33e4
parent04a72cd36e8b1163acfc02df6fd7348600687839 (diff)
parentd98eca3239d8d531dcb93504daeee2c01190ee2f (diff)
Merge pull request #3487 from vespa-engine/ldalves/cost-metrics
adds cluster cost metrics class
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java80
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MockMetricsService.java10
2 files changed, 80 insertions, 10 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java
index 2068bc7e92d..5547f94c8cf 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java
@@ -4,25 +4,29 @@ package com.yahoo.vespa.hosted.controller.api.integration;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.Zone;
+import java.util.List;
+
/**
* A service which returns metric values on request
- *
+ *
* @author bratseth
*/
public interface MetricsService {
-
+
ApplicationMetrics getApplicationMetrics(ApplicationId application);
DeploymentMetrics getDeploymentMetrics(ApplicationId application, Zone zone);
+ List<ClusterCostMetrics> getClusterCostMetrics(ApplicationId application, Zone zone);
+
class DeploymentMetrics {
-
+
private final double queriesPerSecond;
private final double writesPerSecond;
private final long documentCount;
private final double queryLatencyMillis;
private final double writeLatencyMillis;
-
+
public DeploymentMetrics(double queriesPerSecond, double writesPerSecond,
long documentCount,
double queryLatencyMillis, double writeLatencyMillis) {
@@ -32,9 +36,9 @@ public interface MetricsService {
this.queryLatencyMillis = queryLatencyMillis;
this.writeLatencyMillis = writeLatencyMillis;
}
-
+
public double queriesPerSecond() { return queriesPerSecond; }
-
+
public double writesPerSecond() { return writesPerSecond; }
public long documentCount() { return documentCount; }
@@ -44,17 +48,17 @@ public interface MetricsService {
public double writeLatencyMillis() { return writeLatencyMillis; }
}
-
+
class ApplicationMetrics {
private final double queryServiceQuality;
private final double writeServiceQuality;
-
+
public ApplicationMetrics(double queryServiceQuality, double writeServiceQuality) {
this.queryServiceQuality = queryServiceQuality;
this.writeServiceQuality = writeServiceQuality;
}
-
+
/** Returns the quality of service for queries as a number between 1 (perfect) and 0 (none) */
public double queryServiceQuality() { return queryServiceQuality; }
@@ -62,5 +66,61 @@ public interface MetricsService {
public double writeServiceQuality() { return writeServiceQuality; }
}
-
+
+ class CostMetrics {
+
+ private final double cpuUtil;
+ private final double memUtil;
+ private final double diskUtil;
+
+ public CostMetrics(double cpuUtil, double memUtil, double diskUtil) {
+ this.cpuUtil = cpuUtil;
+ this.memUtil = memUtil;
+ this.diskUtil = diskUtil;
+ }
+
+ public double cpuUtil() { return cpuUtil; }
+
+ public double memUtil() { return memUtil; }
+
+ public double diskUtil() { return diskUtil; }
+
+ public static class Builder {
+ private double cpuUtil;
+ private double memUtil;
+ private double diskUtil;
+
+ public void setCpuUtil(double cpuUtil) {
+ this.cpuUtil = cpuUtil;
+ }
+
+ public void setMemUtil(double memUtil) {
+ this.memUtil = memUtil;
+ }
+
+ public void setDiskUtil(double diskUtil) {
+ this.diskUtil = diskUtil;
+ }
+
+ public CostMetrics build() { return new CostMetrics(cpuUtil, memUtil, diskUtil); }
+ }
+
+ }
+
+ class ClusterCostMetrics {
+
+ private final String clusterId;
+ private final CostMetrics costMetrics;
+
+ public ClusterCostMetrics(String clusterId, CostMetrics costMetrics) {
+ this.clusterId = clusterId;
+ this.costMetrics = costMetrics;
+ }
+
+ public String clusterId() { return clusterId; }
+
+ public CostMetrics costMetrics() { return costMetrics; }
+
+ }
+
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MockMetricsService.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MockMetricsService.java
index 360fd8616d3..79b4c5f6d6a 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MockMetricsService.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MockMetricsService.java
@@ -4,6 +4,9 @@ package com.yahoo.vespa.hosted.controller.integration;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.Zone;
+import java.util.Collections;
+import java.util.List;
+
/**
* @author bratseth
*/
@@ -19,4 +22,11 @@ public class MockMetricsService implements com.yahoo.vespa.hosted.controller.api
return new DeploymentMetrics(1, 2, 3, 4, 5);
}
+ @Override
+ public List<ClusterCostMetrics> getClusterCostMetrics(ApplicationId application, Zone zone) {
+ CostMetrics costMetrics = new CostMetrics(55.54, 69.90, 34.59);
+ ClusterCostMetrics clusterCostMetrics = new ClusterCostMetrics("default", costMetrics);
+ return Collections.singletonList(clusterCostMetrics);
+ }
+
}