aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOla Aunrønning <olaa@verizonmedia.com>2019-08-30 12:55:34 +0200
committerOla Aunrønning <olaa@verizonmedia.com>2019-08-30 15:51:51 +0200
commitdb285e6c2f388f76be495b65cb5cbe09ef4725e6 (patch)
treed51d3c46a99cbe09dde3654d4897f95b8067f922
parent6c658d24415dd5320edc5e8556f43a2d760d2173 (diff)
YamasHandler uses HttpHandlerBase
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java2
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/ValuesFetcher.java2
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/Yamas/YamasHandler.java41
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/NodeMetricGatherer.java (renamed from metrics-proxy/src/main/java/ai/vespa/metricsproxy/gatherer/NodeMetricGatherer.java)12
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/NodeMetricGathererTest.java (renamed from metrics-proxy/src/test/java/ai/vespa/metricsproxy/gatherer/NodeMetricGathererTest.java)5
5 files changed, 26 insertions, 36 deletions
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java
index db29dbba306..3c2b20c069b 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerClusterTest.java
@@ -6,6 +6,7 @@ package com.yahoo.vespa.model.admin.metricsproxy;
import ai.vespa.metricsproxy.core.ConsumersConfig;
import ai.vespa.metricsproxy.http.MetricsHandler;
+import ai.vespa.metricsproxy.http.Yamas.YamasHandler;
import ai.vespa.metricsproxy.http.prometheus.PrometheusHandler;
import ai.vespa.metricsproxy.metric.dimensions.ApplicationDimensionsConfig;
import com.yahoo.component.ComponentSpecification;
@@ -107,6 +108,7 @@ public class MetricsProxyContainerClusterTest {
assertThat(handlerClasses, hasItem(ComponentSpecification.fromString(MetricsHandler.class.getName())));
assertThat(handlerClasses, hasItem(ComponentSpecification.fromString(PrometheusHandler.class.getName())));
+ assertThat(handlerClasses, hasItem(ComponentSpecification.fromString(YamasHandler.class.getName())));
}
@Test
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/ValuesFetcher.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/ValuesFetcher.java
index 34fedfcfa7a..830e2201966 100644
--- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/ValuesFetcher.java
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/ValuesFetcher.java
@@ -9,7 +9,6 @@ import ai.vespa.metricsproxy.core.MetricsManager;
import ai.vespa.metricsproxy.metric.model.ConsumerId;
import ai.vespa.metricsproxy.metric.model.MetricsPacket;
import ai.vespa.metricsproxy.metric.model.json.JsonRenderingException;
-import ai.vespa.metricsproxy.metric.model.json.YamasJsonUtil;
import ai.vespa.metricsproxy.service.VespaServices;
import java.time.Instant;
@@ -18,7 +17,6 @@ import java.util.logging.Logger;
import java.util.stream.Collectors;
import static ai.vespa.metricsproxy.metric.model.ConsumerId.toConsumerId;
-import static ai.vespa.metricsproxy.metric.model.json.GenericJsonUtil.toGenericJsonModel;
/**
* Generates metrics values in json format for the metrics/v1 rest api.
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/Yamas/YamasHandler.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/Yamas/YamasHandler.java
index e29cf202bd9..3c22a2e1b3f 100644
--- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/Yamas/YamasHandler.java
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/Yamas/YamasHandler.java
@@ -1,15 +1,12 @@
-/*
-* Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-*/
-
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package ai.vespa.metricsproxy.http.Yamas;
import ai.vespa.metricsproxy.core.MetricsConsumers;
import ai.vespa.metricsproxy.core.MetricsManager;
-import ai.vespa.metricsproxy.gatherer.NodeMetricGatherer;
+import ai.vespa.metricsproxy.service.NodeMetricGatherer;
import ai.vespa.metricsproxy.http.ErrorResponse;
+import ai.vespa.metricsproxy.http.HttpHandlerBase;
import ai.vespa.metricsproxy.http.JsonResponse;
-import ai.vespa.metricsproxy.http.ValuesFetcher;
import ai.vespa.metricsproxy.metric.dimensions.ApplicationDimensions;
import ai.vespa.metricsproxy.metric.dimensions.NodeDimensions;
import ai.vespa.metricsproxy.metric.model.MetricsPacket;
@@ -17,32 +14,26 @@ import ai.vespa.metricsproxy.metric.model.json.JsonRenderingException;
import ai.vespa.metricsproxy.metric.model.json.YamasJsonUtil;
import ai.vespa.metricsproxy.service.VespaServices;
import com.google.inject.Inject;
-import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.container.jdisc.HttpResponse;
-import com.yahoo.container.jdisc.ThreadedHttpRequestHandler;
import com.yahoo.restapi.Path;
+import java.net.URI;
import java.util.List;
+import java.util.Optional;
import java.util.concurrent.Executor;
-import static ai.vespa.metricsproxy.http.RestApiUtil.resourceListResponse;
import static com.yahoo.jdisc.Response.Status.INTERNAL_SERVER_ERROR;
-import static com.yahoo.jdisc.Response.Status.METHOD_NOT_ALLOWED;
-import static com.yahoo.jdisc.Response.Status.NOT_FOUND;
import static com.yahoo.jdisc.Response.Status.OK;
-import static com.yahoo.jdisc.http.HttpRequest.Method.GET;
/**
* @author olaa
*/
-
-public class YamasHandler extends ThreadedHttpRequestHandler {
+public class YamasHandler extends HttpHandlerBase {
public static final String V1_PATH = "/yamas/v1";
private static final String VALUES_PATH = V1_PATH + "/values";
- private final ValuesFetcher valuesFetcher;
private final NodeMetricGatherer nodeMetricGatherer;
@Inject
@@ -52,26 +43,20 @@ public class YamasHandler extends ThreadedHttpRequestHandler {
MetricsConsumers metricsConsumers,
ApplicationDimensions applicationDimensions,
NodeDimensions nodeDimensions) {
- super(executor);
- this.valuesFetcher = new ValuesFetcher(metricsManager, vespaServices, metricsConsumers);
+ super(executor, metricsManager, vespaServices, metricsConsumers);
this.nodeMetricGatherer = new NodeMetricGatherer(metricsManager, vespaServices, applicationDimensions, nodeDimensions);
}
@Override
- public HttpResponse handle(HttpRequest request) {
- if (request.getMethod() != GET) return new JsonResponse(METHOD_NOT_ALLOWED, "Only GET is supported");
-
- Path path = new Path(request.getUri());
-
- if (path.matches(V1_PATH)) return resourceListResponse(request.getUri(), List.of(VALUES_PATH));
- if (path.matches(VALUES_PATH)) return valuesResponse(request);
-
- return new ErrorResponse(NOT_FOUND, "No content at given path");
+ public Optional<HttpResponse> doHandle(URI requestUri, Path apiPath, String consumer) {
+ if (apiPath.matches(V1_PATH)) return Optional.of(resourceListResponse(requestUri, List.of(VALUES_PATH)));
+ if (apiPath.matches(VALUES_PATH)) return Optional.of(valuesResponse(consumer));
+ return Optional.empty();
}
- private JsonResponse valuesResponse(HttpRequest request) {
+ private JsonResponse valuesResponse(String consumer) {
try {
- List<MetricsPacket> metrics = valuesFetcher.fetch(request.getProperty("consumer"));
+ List<MetricsPacket> metrics = valuesFetcher.fetch(consumer);
metrics.addAll(nodeMetricGatherer.gatherMetrics()); // TODO: Currently only add these metrics in this handler. Eventually should be included in all handlers
return new JsonResponse(OK, YamasJsonUtil.toYamasArray(metrics).serialize());
} catch (JsonRenderingException e) {
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/gatherer/NodeMetricGatherer.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/NodeMetricGatherer.java
index c6dfdf8fe9c..959b57c910f 100644
--- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/gatherer/NodeMetricGatherer.java
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/NodeMetricGatherer.java
@@ -1,5 +1,5 @@
// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package ai.vespa.metricsproxy.gatherer;
+package ai.vespa.metricsproxy.service;
import ai.vespa.metricsproxy.core.MetricsManager;
import ai.vespa.metricsproxy.metric.dimensions.ApplicationDimensions;
@@ -7,7 +7,6 @@ import ai.vespa.metricsproxy.metric.dimensions.NodeDimensions;
import ai.vespa.metricsproxy.metric.model.MetricsPacket;
import ai.vespa.metricsproxy.metric.model.StatusCode;
import ai.vespa.metricsproxy.metric.model.json.YamasJsonUtil;
-import ai.vespa.metricsproxy.service.VespaServices;
import com.google.inject.Inject;
import com.yahoo.vespa.defaults.Defaults;
import org.json.JSONException;
@@ -28,8 +27,15 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
+ * Fetches miscellaneous system metrics for node, including
+ * - Current coredump processing
+ * - Health of Vespa services
+ * - Host life
+ *
* @author olaa
*/
+
+
public class NodeMetricGatherer {
private static final int COREDUMP_AGE_IN_MINUTES = 12600;
@@ -123,7 +129,7 @@ public class NodeMetricGatherer {
int statusCode = 0;
String statusMessage = "OK";
try {
- upTime = getHostLife(Path.of("/proc/uptime")); // ??
+ upTime = getHostLife(Path.of("/proc/uptime"));
} catch (IOException e) {
upTime = 0d;
statusCode = 1;
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/gatherer/NodeMetricGathererTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/NodeMetricGathererTest.java
index 8752032b643..59a207bef0d 100644
--- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/gatherer/NodeMetricGathererTest.java
+++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/NodeMetricGathererTest.java
@@ -1,4 +1,5 @@
-package ai.vespa.metricsproxy.gatherer;
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package ai.vespa.metricsproxy.service;
import ai.vespa.metricsproxy.core.MetricsManager;
import ai.vespa.metricsproxy.metric.HealthMetric;
@@ -8,8 +9,6 @@ import ai.vespa.metricsproxy.metric.dimensions.NodeDimensions;
import ai.vespa.metricsproxy.metric.model.DimensionId;
import ai.vespa.metricsproxy.metric.model.MetricsPacket;
import ai.vespa.metricsproxy.metric.model.ServiceId;
-import ai.vespa.metricsproxy.service.VespaService;
-import ai.vespa.metricsproxy.service.VespaServices;
import org.junit.Test;
import java.nio.file.Path;