summaryrefslogtreecommitdiffstats
path: root/controller-api/src
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2021-03-24 22:30:06 +0100
committerJon Bratseth <bratseth@gmail.com>2021-03-24 22:30:06 +0100
commit748f6279d83e25183e9ed1053f81f4ea0204008b (patch)
treee59fa2fe1818ed6eb6cc962bfd84cf65fa5fb157 /controller-api/src
parentb88d6461ef52af5c11866f425898cc0251ae4e75 (diff)
Add stats to node repo client
Diffstat (limited to 'controller-api/src')
-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.java27
-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/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
8 files changed, 178 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..a16d05a7310
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Load.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.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;
+ }
+
+}
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..31e5730b6a6
--- /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 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/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..d3a81201c78
--- /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("applicationStats")
+ public List<ApplicationStatsData> applicationStats;
+
+ public NodeRepoStats toNodeRepoStats() {
+ return new NodeRepoStats(load.toLoad(), activeLoad.toLoad(),
+ applicationStats.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);