summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--annotations/pom.xml1
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/yamas/YamasHandler.java35
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/yamas/YamasHandlerTest.java55
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerInstance.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java8
5 files changed, 87 insertions, 16 deletions
diff --git a/annotations/pom.xml b/annotations/pom.xml
index 067a6966a11..3e232a9c64f 100644
--- a/annotations/pom.xml
+++ b/annotations/pom.xml
@@ -64,6 +64,7 @@
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Version>${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}</Bundle-Version>
<Export-Package>com.yahoo.component.annotation;version=1.0.0;-noimport:=true</Export-Package>
+ <X-JDisc-PublicApi-Package>com.yahoo.component.annotation</X-JDisc-PublicApi-Package>
<_nouses>true</_nouses> <!-- Don't include 'uses' directives for package exports -->
</instructions>
</configuration>
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 41c7542b613..f6da31ac20b 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
@@ -8,16 +8,18 @@ import ai.vespa.metricsproxy.metric.dimensions.ApplicationDimensions;
import ai.vespa.metricsproxy.metric.dimensions.NodeDimensions;
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.node.NodeMetricGatherer;
import ai.vespa.metricsproxy.service.VespaServices;
import com.yahoo.component.annotation.Inject;
import com.yahoo.container.handler.metrics.ErrorResponse;
import com.yahoo.container.handler.metrics.HttpHandlerBase;
-import com.yahoo.container.handler.metrics.JsonResponse;
import com.yahoo.container.jdisc.HttpResponse;
import com.yahoo.restapi.Path;
+import com.yahoo.slime.JsonFormat;
+import com.yahoo.slime.Slime;
+import java.io.IOException;
+import java.io.OutputStream;
import java.net.URI;
import java.util.List;
import java.util.Optional;
@@ -33,10 +35,12 @@ import static com.yahoo.jdisc.Response.Status.OK;
public class YamasHandler extends HttpHandlerBase {
public static final String V1_PATH = "/yamas/v1";
- private static final String VALUES_PATH = V1_PATH + "/values";
+ public static final String VALUES_PATH = V1_PATH + "/values";
+ public static final String CONSUMERS_PATH = V1_PATH + "/consumers";
private final ValuesFetcher valuesFetcher;
private final NodeMetricGatherer nodeMetricGatherer;
+ private final MetricsConsumers metricsConsumers;
@Inject
public YamasHandler(Executor executor,
@@ -48,23 +52,44 @@ public class YamasHandler extends HttpHandlerBase {
super(executor);
valuesFetcher = new ValuesFetcher(metricsManager, vespaServices, metricsConsumers);
this.nodeMetricGatherer = new NodeMetricGatherer(metricsManager, vespaServices, applicationDimensions, nodeDimensions);
+ this.metricsConsumers = metricsConsumers;
}
@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(V1_PATH)) return Optional.of(resourceListResponse(requestUri, List.of(VALUES_PATH, CONSUMERS_PATH)));
if (apiPath.matches(VALUES_PATH)) return Optional.of(valuesResponse(consumer));
+ if (apiPath.matches(CONSUMERS_PATH)) return Optional.of(consumersResponse());
return Optional.empty();
}
private HttpResponse valuesResponse(String consumer) {
try {
List<MetricsPacket> metrics = consumer == null ? valuesFetcher.fetchAllMetrics() : valuesFetcher.fetch(consumer);
- metrics.addAll(nodeMetricGatherer.gatherMetrics()); // TODO: Currently only add these metrics in this handler. Eventually should be included in all handlers
+ if (consumer == null || "Vespa".equalsIgnoreCase(consumer)) {
+ metrics.addAll(nodeMetricGatherer.gatherMetrics()); // TODO: Currently only add these metrics in this handler. Eventually should be included in all handlers
+ }
return new YamasResponse(OK, metrics);
} catch (JsonRenderingException e) {
return new ErrorResponse(INTERNAL_SERVER_ERROR, e.getMessage());
}
}
+ private HttpResponse consumersResponse() {
+ var slime = new Slime();
+ var consumers = slime.setObject().setArray("consumers");
+ metricsConsumers.getAllConsumers().forEach(consumer -> consumers.addString(consumer.id));
+ return new HttpResponse(OK) {
+ @Override
+ public String getContentType() {
+ return "application/json";
+ }
+
+ @Override
+ public void render(OutputStream outputStream) throws IOException {
+ new JsonFormat(true).encode(outputStream, slime);
+ }
+ };
+ }
+
} \ No newline at end of file
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/yamas/YamasHandlerTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/yamas/YamasHandlerTest.java
new file mode 100644
index 00000000000..a4e61d5965e
--- /dev/null
+++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/yamas/YamasHandlerTest.java
@@ -0,0 +1,55 @@
+// Copyright Yahoo. 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.http.HttpHandlerTestBase;
+import com.yahoo.container.jdisc.RequestHandlerTestDriver;
+import com.yahoo.slime.ArrayTraverser;
+import com.yahoo.slime.SlimeUtils;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Executors;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class YamasHandlerTest extends HttpHandlerTestBase {
+
+ private static final String VALUES_URI = URI_BASE + YamasHandler.VALUES_PATH;
+ private static final String CONSUMERS_URI = URI_BASE + YamasHandler.CONSUMERS_PATH;
+
+ private static String valuesResponse;
+ private static String consumerResponse;
+
+ @BeforeClass
+ public static void setup() {
+ YamasHandler handler = new YamasHandler(Executors.newSingleThreadExecutor(),
+ getMetricsManager(),
+ vespaServices,
+ getMetricsConsumers(),
+ getApplicationDimensions(),
+ getNodeDimensions());
+ testDriver = new RequestHandlerTestDriver(handler);
+ valuesResponse = testDriver.sendRequest(VALUES_URI).readAll();
+ consumerResponse = testDriver.sendRequest(CONSUMERS_URI).readAll();
+ }
+
+
+ @Test
+ public void response_contains_consumer_list() {
+ var slime = SlimeUtils.jsonToSlime(consumerResponse.getBytes());
+ var consumers = new ArrayList<>();
+ slime.get().field("consumers").traverse((ArrayTraverser) (idx, object) ->
+ consumers.add(object.asString())
+ );
+ assertEquals(List.of("default", "custom-consumer"), consumers);
+ }
+
+ @Test
+ public void value_response_contains_coredump_metric() {
+ assertTrue(valuesResponse.contains("\"application\":\"system-coredumps-processing\",\"routing\":{\"yamas\":{\"namespaces\":[\"Vespa\"]}}"));
+ }
+
+}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerInstance.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerInstance.java
index 5284511af47..e228d31384c 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerInstance.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerInstance.java
@@ -119,10 +119,6 @@ public class LoadBalancerInstance {
cloudAccount);
}
- public LoadBalancerInstance with(CloudAccount cloudAccount) {
- return new LoadBalancerInstance(hostname, ipAddress, dnsZone, ports, networks, reals, settings, serviceIds, cloudAccount);
- }
-
/** Prepends the given service IDs, possibly changing the order of those we have in this. */
public LoadBalancerInstance withServiceIds(List<PrivateServiceId> serviceIds) {
List<PrivateServiceId> ids = new ArrayList<>(serviceIds);
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java
index fe40b2c5001..ae1edab7fad 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java
@@ -70,16 +70,10 @@ public class LoadBalancerProvisioner {
this.deactivateRouting = PermanentFlags.DEACTIVATE_ROUTING.bindTo(nodeRepository.flagSource());
// Read and write all load balancers to make sure they are stored in the latest version of the serialization format
- CloudAccount zoneAccount = nodeRepository.zone().cloud().account();
for (var id : db.readLoadBalancerIds()) {
try (var lock = db.lock(id.application())) {
var loadBalancer = db.readLoadBalancer(id);
- loadBalancer.ifPresent(lb -> {
- // TODO (freva): Remove after 8.166
- if (!zoneAccount.isUnspecified() && lb.instance().isPresent() && lb.instance().get().cloudAccount().isUnspecified())
- lb = lb.with(Optional.of(lb.instance().get().with(zoneAccount)));
- db.writeLoadBalancer(lb, lb.state());
- });
+ loadBalancer.ifPresent(lb -> db.writeLoadBalancer(lb, lb.state()));
}
}
}