summaryrefslogtreecommitdiffstats
path: root/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/PartitionStateRequest.java
diff options
context:
space:
mode:
Diffstat (limited to 'clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/PartitionStateRequest.java')
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/PartitionStateRequest.java69
1 files changed, 69 insertions, 0 deletions
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/PartitionStateRequest.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/PartitionStateRequest.java
new file mode 100644
index 00000000000..bb42af45ef3
--- /dev/null
+++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/PartitionStateRequest.java
@@ -0,0 +1,69 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.clustercontroller.core.restapiv2.requests;
+
+import com.yahoo.vdslib.state.DiskState;
+import com.yahoo.vdslib.state.NodeState;
+import com.yahoo.vespa.clustercontroller.core.RemoteClusterControllerTask;
+import com.yahoo.vespa.clustercontroller.core.hostinfo.Metrics;
+import com.yahoo.vespa.clustercontroller.core.restapiv2.Id;
+import com.yahoo.vespa.clustercontroller.core.restapiv2.Request;
+import com.yahoo.vespa.clustercontroller.core.restapiv2.Response;
+import com.yahoo.vespa.clustercontroller.utils.staterestapi.errors.StateRestApiException;
+
+import java.util.Set;
+import java.util.logging.Logger;
+
+public class PartitionStateRequest extends Request<Response.PartitionResponse> {
+ private static final Logger log = Logger.getLogger(PartitionStateRequest.class.getName());
+ private final Id.Partition id;
+ private final Set<VerboseReport> verboseReports;
+
+ public PartitionStateRequest(Id.Partition id, Set<VerboseReport> verboseReports) {
+ super(MasterState.MUST_BE_MASTER);
+ this.id = id;
+ this.verboseReports = verboseReports;
+ }
+
+ @Override
+ public Response.PartitionResponse calculateResult(RemoteClusterControllerTask.Context context)
+ throws StateRestApiException {
+ Response.PartitionResponse result = new Response.PartitionResponse();
+ if (verboseReports.contains(VerboseReport.STATISTICS)) {
+ fillInMetrics(context.cluster.getNodeInfo(id.getNode()).getHostInfo().getMetrics(), result);
+ }
+ NodeState nodeState = context.currentConsolidatedState.getNodeState(id.getNode());
+ DiskState diskState = new DiskState();
+ result.addState("generated", new Response.UnitStateImpl(diskState));
+
+ return result;
+ }
+
+ private static void fillInMetrics(Metrics metrics, Response.PartitionResponse result) {
+ for (Metrics.Metric metric: metrics.getMetrics()) {
+ fillInMetricValue(metric.getName(), metric.getValue(), result);
+ }
+ }
+
+ private static void fillInMetricValue(
+ String name, Metrics.Value value, Response.PartitionResponse result) {
+ if (name.equals("vds.datastored.alldisks.docs")) {
+ if (value.getLast() == null) {
+ log.warning("Proper doc count value did not exist in value set.");
+ return;
+ }
+ result.addMetric("unique-document-count", value.getLast());
+ } else if (name.equals("vds.datastored.alldisks.bytes")) {
+ if (value.getLast() == null) {
+ log.warning("Proper doc size value did not exist in value set.");
+ return;
+ }
+ result.addMetric("unique-document-total-size", value.getLast());
+ } else if (name.equals("vds.datastored.alldisks.buckets")) {
+ if (value.getLast() == null) {
+ log.warning("Proper bucket count value did not exist in value set.");
+ return;
+ }
+ result.addMetric("bucket-count", value.getLast());
+ }
+ }
+}