diff options
Diffstat (limited to 'controller-api')
5 files changed, 93 insertions, 2 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/ClusterMetrics.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/ClusterMetrics.java index f16e2e403ed..cc10041992c 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/ClusterMetrics.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/ClusterMetrics.java @@ -10,7 +10,7 @@ import java.util.Optional; */ public class ClusterMetrics { - // These field names originate from the MetricsResponse class + // These field names originate from the DeploymentMetricsResponse class public static final String QUERIES_PER_SECOND = "queriesPerSecond"; public static final String FEED_PER_SECOND = "feedPerSecond"; public static final String DOCUMENT_COUNT = "documentCount"; diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/ProtonMetrics.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/ProtonMetrics.java new file mode 100644 index 00000000000..c6d907ec7fc --- /dev/null +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/ProtonMetrics.java @@ -0,0 +1,63 @@ +package com.yahoo.vespa.hosted.controller.api.application.v4.model; + +import java.util.HashMap; +import java.util.Map; +import java.util.logging.LogManager; +import java.util.logging.Logger; +import org.json.JSONException; +import org.json.JSONObject; + +public class ProtonMetrics { + + private static final Logger logger = LogManager.getLogManager().getLogger(ProtonMetrics.class.getName()); + + public static final String DOCUMENTS_ACTIVE_COUNT = "documentsActiveCount"; + public static final String DOCUMENTS_READY_COUNT = "documentsReadyCount"; + public static final String DOCUMENTS_TOTAL_COUNT = "documentsTotalCount"; + public static final String DOCUMENT_DISK_USAGE = "documentDiskUsage"; + public static final String RESOURCE_DISK_USAGE_AVERAGE = "resourceDiskUsageAverage"; + public static final String RESOURCE_MEMORY_USAGE_AVERAGE = "resourceMemoryUsageAverage"; + + private final String clusterId; + private final Map<String, Double> metrics; + + public ProtonMetrics(String clusterId) { + this.clusterId = clusterId; + metrics = new HashMap<>(); + } + + public String getClusterId() { return clusterId; } + + public double documentsActiveCount() { return metrics.get(DOCUMENTS_ACTIVE_COUNT); } + + public double documentsReadyCount() { return metrics.get(DOCUMENTS_READY_COUNT); } + + public double documentsTotalCount() { return metrics.get(DOCUMENTS_TOTAL_COUNT); } + + public double documentDiskUsage() { return metrics.get(DOCUMENT_DISK_USAGE); } + + public double resourceDiskUsageAverage() { return metrics.get(RESOURCE_DISK_USAGE_AVERAGE); } + + public double resourceMemoryUsageAverage() { return metrics.get(RESOURCE_MEMORY_USAGE_AVERAGE); } + + public ProtonMetrics addMetric(String name, double value) { + metrics.put(name, value); + return this; + } + + public JSONObject toJson() { + try { + JSONObject protonMetrics = new JSONObject(); + protonMetrics.put("clusterId", clusterId); + JSONObject jsonMetrics = new JSONObject(); + for (Map.Entry<String, Double> entry : metrics.entrySet()) { + jsonMetrics.put(entry.getKey(), entry.getValue()); + } + protonMetrics.put("metrics", jsonMetrics); + return protonMetrics; + } catch (JSONException e) { + logger.severe("Unable to convert Proton Metrics to JSON Object"); + } + return new JSONObject(); + } +} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/MetricsType.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/MetricsType.java new file mode 100644 index 00000000000..aeb828a21f3 --- /dev/null +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/MetricsType.java @@ -0,0 +1,24 @@ +// 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.identifiers; + +/** + * @author akvalsvik + */ +public class MetricsType extends SerializedIdentifier { + + public MetricsType(String id) { + super(id); + } + + @Override + public void validate() { + super.validate(); + validateNoUpperCase(); + } + + public static void validate(String id) { + if (!(id.equals("deployment") || id.equals("proton"))) { + throwInvalidId(id, "MetricsType be \"deployment\" or \"proton\""); + } + } +} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ConfigServer.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ConfigServer.java index c04adcec594..9ad9324e216 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ConfigServer.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ConfigServer.java @@ -8,6 +8,7 @@ import com.yahoo.vespa.flags.json.FlagData; import com.yahoo.vespa.hosted.controller.api.application.v4.model.ClusterMetrics; import com.yahoo.vespa.hosted.controller.api.application.v4.model.DeploymentData; import com.yahoo.vespa.hosted.controller.api.application.v4.model.EndpointStatus; +import com.yahoo.vespa.hosted.controller.api.application.v4.model.ProtonMetrics; import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId; import com.yahoo.vespa.hosted.controller.api.identifiers.Hostname; import com.yahoo.vespa.hosted.controller.api.integration.LogEntry; @@ -54,7 +55,9 @@ public interface ConfigServer { */ InputStream getLogs(DeploymentId deployment, Map<String, String> queryParameters); - List<ClusterMetrics> getMetrics(DeploymentId deployment); + List<ClusterMetrics> getDeploymentMetrics(DeploymentId deployment); + + List<ProtonMetrics> getProtonMetrics(DeploymentId deployment); List<String> getContentClusters(DeploymentId deployment); diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java index aaddd3811bc..571fd649f04 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java @@ -118,6 +118,7 @@ enum PathGroup { "/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{ignored}/nodes", "/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{ignored}/clusters", "/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{ignored}/logs", + "/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{ignored}/metrics", "/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{ignored}/suspended", "/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{ignored}/service/{*}", "/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{ignored}/global-rotation/{*}", |