summaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2021-03-25 14:12:01 +0100
committerGitHub <noreply@github.com>2021-03-25 14:12:01 +0100
commit330d40558ae24aabe1a99ab24d3914c583da44c2 (patch)
tree5de03c0788f102da60e18c9f0921fb764a454712 /controller-api
parentd23759152545871a436fe7b325b74c73cf15e695 (diff)
parent3005309253c59f458dfe5d431cb8b6ecdb5fc6a4 (diff)
Merge pull request #17176 from vespa-engine/bratseth/propagate-node-repo-stats
Bratseth/propagate node repo stats
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ApplicationStats.java28
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Cluster.java1
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Load.java29
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepoStats.java25
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java2
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ApplicationStatsData.java33
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/LoadData.java27
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/NodeRepoStatsData.java33
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ProvisionResource.java5
9 files changed, 182 insertions, 1 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ApplicationStats.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ApplicationStats.java
new file mode 100644
index 00000000000..281641e863f
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ApplicationStats.java
@@ -0,0 +1,28 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.api.integration.configserver;
+
+import com.yahoo.config.provision.ApplicationId;
+
+/**
+ * @author bratseth
+ */
+public class ApplicationStats {
+
+ private final ApplicationId id;
+ private final Load load;
+ private final double cost;
+ private final double unutilizedCost;
+
+ public ApplicationStats(ApplicationId id, Load load, double cost, double unutilizedCost) {
+ this.id = id;
+ this.load = load;
+ this.cost = cost;
+ this.unutilizedCost = unutilizedCost;
+ }
+
+ public ApplicationId id() { return id; }
+ public Load load() { return load; }
+ public double cost() { return cost; }
+ public double unutilizedCost() { return unutilizedCost; }
+
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Cluster.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Cluster.java
index 86f649d08ab..d356f5eb89f 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Cluster.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Cluster.java
@@ -28,7 +28,6 @@ public class Cluster {
private final double maxQueryGrowthRate;
private final double currentQueryFractionOfMax;
-
public Cluster(ClusterSpec.Id id,
ClusterSpec.Type type,
ClusterResources min,
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Load.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Load.java
new file mode 100644
index 00000000000..d3fef13aa77
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Load.java
@@ -0,0 +1,29 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.api.integration.configserver;
+
+/**
+ * @author bratseth
+ */
+public class Load {
+
+ private final double cpu;
+ private final double memory;
+ private final double disk;
+
+ public Load(double cpu, double memory, double disk) {
+ this.cpu = cpu;
+ this.memory = memory;
+ this.disk = disk;
+ }
+
+ public double cpu() { return cpu; }
+ public double memory() { return memory; }
+ public double disk() { return disk; }
+
+ public String toString() {
+ return "load: cpu " + cpu + ", memory " + memory + ", disk " + disk;
+ }
+
+ public static Load zero() { return new Load(0, 0, 0); }
+
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepoStats.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepoStats.java
new file mode 100644
index 00000000000..5b5ac21b500
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepoStats.java
@@ -0,0 +1,25 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.api.integration.configserver;
+
+import java.util.List;
+
+/**
+ * @author bratseth
+ */
+public class NodeRepoStats {
+
+ private final Load load;
+ private final Load activeLoad;
+ private final List<ApplicationStats> applicationStats;
+
+ public NodeRepoStats(Load load, Load activeLoad, List<ApplicationStats> applicationStats) {
+ this.load = load;
+ this.activeLoad = activeLoad;
+ this.applicationStats = List.copyOf(applicationStats);
+ }
+
+ public Load load() { return load; }
+ public Load activeLoad() { return activeLoad; }
+ public List<ApplicationStats> applicationStats() { return applicationStats; }
+
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java
index bbe982bd5fe..7d454b2134f 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java
@@ -79,6 +79,8 @@ public interface NodeRepository {
void patchApplication(ZoneId zone, ApplicationId application,
double currentReadShare, double maxReadShare);
+ NodeRepoStats getStats(ZoneId zone);
+
Map<TenantName, URI> getArchiveUris(ZoneId zone);
void setArchiveUri(ZoneId zone, TenantName tenantName, URI archiveUri);
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ApplicationStatsData.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ApplicationStatsData.java
new file mode 100644
index 00000000000..1daf3dd5aaf
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ApplicationStatsData.java
@@ -0,0 +1,33 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.api.integration.noderepository;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.vespa.hosted.controller.api.integration.configserver.ApplicationStats;
+
+/**
+ * @author bratseth
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ApplicationStatsData {
+
+ @JsonProperty("id")
+ public String id;
+
+ @JsonProperty("load")
+ public LoadData load;
+
+ @JsonProperty("cost")
+ public Double cost;
+
+ @JsonProperty("unutilizedCost")
+ public Double unutilizedCost;
+
+ public ApplicationStats toApplicationStats() {
+ return new ApplicationStats(ApplicationId.fromFullString(id), load.toLoad(), cost, unutilizedCost);
+ }
+
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/LoadData.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/LoadData.java
new file mode 100644
index 00000000000..ac60ea19134
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/LoadData.java
@@ -0,0 +1,27 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.api.integration.noderepository;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.yahoo.vespa.hosted.controller.api.integration.configserver.Load;
+
+/**
+ * @author bratseth
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class LoadData {
+
+ @JsonProperty("cpu")
+ private Double cpu;
+ @JsonProperty("memory")
+ private Double memory;
+ @JsonProperty("disk")
+ private Double disk;
+
+ public Load toLoad() {
+ return new Load(cpu, memory, disk);
+ }
+
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/NodeRepoStatsData.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/NodeRepoStatsData.java
new file mode 100644
index 00000000000..a4b3174b442
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/NodeRepoStatsData.java
@@ -0,0 +1,33 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.api.integration.noderepository;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.yahoo.vespa.hosted.controller.api.integration.configserver.NodeRepoStats;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author bratseth
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class NodeRepoStatsData {
+
+ @JsonProperty("load")
+ public LoadData load;
+
+ @JsonProperty("activeLoad")
+ public LoadData activeLoad;
+
+ @JsonProperty("applications")
+ public List<ApplicationStatsData> applications;
+
+ public NodeRepoStats toNodeRepoStats() {
+ return new NodeRepoStats(load.toLoad(), activeLoad.toLoad(),
+ applications.stream().map(stats -> stats.toApplicationStats()).collect(Collectors.toList()));
+ }
+
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ProvisionResource.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ProvisionResource.java
index 2bfcc20dbd1..26243a28ee0 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ProvisionResource.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ProvisionResource.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.hosted.controller.api.integration.noderepository;
import com.yahoo.config.provision.TenantName;
+import com.yahoo.vespa.hosted.controller.api.integration.configserver.NodeRepoStats;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
@@ -68,6 +69,10 @@ public interface ProvisionResource {
String patchApplication(@PathParam("application") String applicationId, ApplicationPatch applicationPatch,
@HeaderParam("X-HTTP-Method-Override") String patchOverride);
+ @GET
+ @Path("/stats")
+ NodeRepoStatsData getStats();
+
@PUT
@Path("/state/{state}/{hostname}")
String setState(@PathParam("state") NodeState state, @PathParam("hostname") String hostname);