diff options
author | Jon Bratseth <bratseth@oath.com> | 2021-03-25 14:12:01 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-25 14:12:01 +0100 |
commit | 330d40558ae24aabe1a99ab24d3914c583da44c2 (patch) | |
tree | 5de03c0788f102da60e18c9f0921fb764a454712 /controller-api | |
parent | d23759152545871a436fe7b325b74c73cf15e695 (diff) | |
parent | 3005309253c59f458dfe5d431cb8b6ecdb5fc6a4 (diff) |
Merge pull request #17176 from vespa-engine/bratseth/propagate-node-repo-stats
Bratseth/propagate node repo stats
Diffstat (limited to 'controller-api')
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); |