diff options
author | Jon Bratseth <bratseth@gmail.com> | 2021-03-24 22:30:06 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2021-03-24 22:30:06 +0100 |
commit | 748f6279d83e25183e9ed1053f81f4ea0204008b (patch) | |
tree | e59fa2fe1818ed6eb6cc962bfd84cf65fa5fb157 /controller-api/src | |
parent | b88d6461ef52af5c11866f425898cc0251ae4e75 (diff) |
Add stats to node repo client
Diffstat (limited to 'controller-api/src')
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); |