diff options
Diffstat (limited to 'metrics-proxy')
-rw-r--r-- | metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/ValuesFetcher.java | 2 | ||||
-rw-r--r-- | metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/Yamas/YamasHandler.java | 41 | ||||
-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 |
4 files changed, 24 insertions, 36 deletions
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; |