summaryrefslogtreecommitdiffstats
path: root/metrics-proxy
diff options
context:
space:
mode:
authorAmund Bergland Kvalsvik <akvalsvik@verizonmedia.com>2020-06-26 12:01:42 +0200
committerAmund Bergland Kvalsvik <akvalsvik@verizonmedia.com>2020-06-26 12:01:42 +0200
commit2132ab285831f368f204210be8de409714573df3 (patch)
treef749c2b6540578564140b4cd8b99867c24cc425c /metrics-proxy
parent17d9107ee01a679ccbe591efbff959f603baebdc (diff)
Updated ApplicationMetricsHandler. Removed PrometheusV1Handler
Diffstat (limited to 'metrics-proxy')
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandler.java35
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java8
2 files changed, 35 insertions, 8 deletions
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandler.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandler.java
index c3231daab5f..46f3a1b18c4 100644
--- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandler.java
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandler.java
@@ -3,7 +3,12 @@
package ai.vespa.metricsproxy.http.application;
import ai.vespa.metricsproxy.core.MetricsConsumers;
+import ai.vespa.metricsproxy.http.TextResponse;
import ai.vespa.metricsproxy.metric.model.ConsumerId;
+import ai.vespa.metricsproxy.metric.model.MetricsPacket;
+import ai.vespa.metricsproxy.metric.model.json.GenericJsonModel;
+import ai.vespa.metricsproxy.metric.model.json.GenericJsonUtil;
+import ai.vespa.metricsproxy.metric.model.prometheus.PrometheusUtil;
import com.google.inject.Inject;
import com.yahoo.container.handler.metrics.ErrorResponse;
import com.yahoo.container.handler.metrics.HttpHandlerBase;
@@ -16,9 +21,12 @@ import java.util.List;
import java.util.Optional;
import java.util.concurrent.Executor;
import java.util.logging.Level;
+import java.util.stream.Collectors;
import static ai.vespa.metricsproxy.http.ValuesFetcher.getConsumerOrDefault;
import static ai.vespa.metricsproxy.metric.model.json.GenericJsonUtil.toGenericApplicationModel;
+import static ai.vespa.metricsproxy.metric.model.json.GenericJsonUtil.toGenericJsonModel;
+import static ai.vespa.metricsproxy.metric.model.json.GenericJsonUtil.toMetricsPackets;
import static com.yahoo.jdisc.Response.Status.INTERNAL_SERVER_ERROR;
import static com.yahoo.jdisc.Response.Status.OK;
@@ -29,8 +37,11 @@ import static com.yahoo.jdisc.Response.Status.OK;
*/
public class ApplicationMetricsHandler extends HttpHandlerBase {
- public static final String V1_PATH = "/applicationmetrics/v1";
- public static final String VALUES_PATH = V1_PATH + "/values";
+ public static final String V1_METRICS = "/applicationmetrics/v1";
+ public static final String METRICS_VALUES_PATH = V1_METRICS + "/values";
+
+ public static final String V1_PROMETHEUS = "/applicationprometheus/v1";
+ public static final String PROMETHEUS_VALUES_PATH = V1_PROMETHEUS + "/values";
private final ApplicationMetricsRetriever metricsRetriever;
private final MetricsConsumers metricsConsumers;
@@ -46,8 +57,12 @@ public class ApplicationMetricsHandler extends HttpHandlerBase {
@Override
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(applicationMetricsResponse(consumer));
+ if (apiPath.matches(V1_METRICS)) return Optional.of(resourceListResponse(requestUri, List.of(METRICS_VALUES_PATH)));
+ if (apiPath.matches(METRICS_VALUES_PATH)) return Optional.of(applicationMetricsResponse(consumer));
+
+ if (apiPath.matches(V1_PROMETHEUS)) return Optional.of(resourceListResponse(requestUri, List.of(PROMETHEUS_VALUES_PATH)));
+ if (apiPath.matches(PROMETHEUS_VALUES_PATH)) return Optional.of(applicationPrometheusResponse(consumer));
+
return Optional.empty();
}
@@ -64,4 +79,16 @@ public class ApplicationMetricsHandler extends HttpHandlerBase {
}
}
+ private TextResponse applicationPrometheusResponse(String requestedConsumer) {
+ ConsumerId consumer = getConsumerOrDefault(requestedConsumer, metricsConsumers);
+ var metricsByNode = metricsRetriever.getMetrics(consumer);
+
+
+ return new TextResponse(200, PrometheusUtil.toPrometheusModel(toGenericApplicationModel(metricsByNode).nodes.stream()
+ .flatMap(element -> GenericJsonUtil.toMetricsPackets(element).stream()
+ .map(MetricsPacket.Builder::build))
+ .collect(Collectors.toList()))
+ .serialize());
+ }
+
}
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java
index 155bbf094a1..cb0178b1aef 100644
--- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java
+++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java
@@ -25,8 +25,8 @@ import java.util.concurrent.Executors;
import static ai.vespa.metricsproxy.TestUtil.getFileContents;
import static ai.vespa.metricsproxy.http.ValuesFetcher.DEFAULT_PUBLIC_CONSUMER_ID;
-import static ai.vespa.metricsproxy.http.application.ApplicationMetricsHandler.V1_PATH;
-import static ai.vespa.metricsproxy.http.application.ApplicationMetricsHandler.VALUES_PATH;
+import static ai.vespa.metricsproxy.http.application.ApplicationMetricsHandler.V1_METRICS;
+import static ai.vespa.metricsproxy.http.application.ApplicationMetricsHandler.METRICS_VALUES_PATH;
import static ai.vespa.metricsproxy.metric.model.json.JacksonUtil.createObjectMapper;
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
@@ -48,8 +48,8 @@ public class ApplicationMetricsHandlerTest {
private static final String HOST = "localhost";
private static final String URI_BASE = "http://" + HOST;
- private static final String APP_METRICS_V1_URI = URI_BASE + V1_PATH;
- private static final String APP_METRICS_VALUES_URI = URI_BASE + VALUES_PATH;
+ private static final String APP_METRICS_V1_URI = URI_BASE + V1_METRICS;
+ private static final String APP_METRICS_VALUES_URI = URI_BASE + METRICS_VALUES_PATH;
private static final String TEST_FILE = "generic-sample.json";
private static final String RESPONSE = getFileContents(TEST_FILE);