From 35c53b6804caae849e2385e20307446e5ffc8d2c Mon Sep 17 00:00:00 2001 From: Ales Justin Date: Fri, 30 Aug 2024 11:35:31 +0200 Subject: [PATCH] Add LGTM traces test / check (cherry picked from commit e92d99f89abfe64e7a36300ac201e0506719412b) --- .../src/main/resources/application.properties | 3 -- .../observability/test/LgtmTestBase.java | 3 ++ .../test/support/GrafanaClient.java | 19 ++++++++++ .../test/support/TempoResult.java | 38 +++++++++++++++++++ 4 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 integration-tests/observability-lgtm/src/test/java/io/quarkus/observability/test/support/TempoResult.java diff --git a/integration-tests/observability-lgtm/src/main/resources/application.properties b/integration-tests/observability-lgtm/src/main/resources/application.properties index b88a2d3f9bb17..8715ab7947e24 100644 --- a/integration-tests/observability-lgtm/src/main/resources/application.properties +++ b/integration-tests/observability-lgtm/src/main/resources/application.properties @@ -6,12 +6,9 @@ quarkus.micrometer.export.otlp.enabled=true quarkus.micrometer.export.otlp.publish=true quarkus.micrometer.export.otlp.step=PT5S quarkus.micrometer.export.otlp.default-registry=true -%dev.quarkus.micrometer.export.otlp.url=http://${quarkus.otel-collector.url}/v1/metrics %prod.quarkus.micrometer.export.otlp.url=http://localhost:4318/v1/metrics #opentelemetry -quarkus.otel.exporter.otlp.traces.protocol=http/protobuf -%dev.quarkus.otel.exporter.otlp.traces.endpoint=http://${quarkus.otel-collector.url} %prod.quarkus.otel.exporter.otlp.traces.endpoint=http://localhost:4318 #quarkus.observability.lgtm.image-name=grafana/otel-lgtm diff --git a/integration-tests/observability-lgtm/src/test/java/io/quarkus/observability/test/LgtmTestBase.java b/integration-tests/observability-lgtm/src/test/java/io/quarkus/observability/test/LgtmTestBase.java index ee49956a5a296..b30d11c6f7160 100644 --- a/integration-tests/observability-lgtm/src/test/java/io/quarkus/observability/test/LgtmTestBase.java +++ b/integration-tests/observability-lgtm/src/test/java/io/quarkus/observability/test/LgtmTestBase.java @@ -28,6 +28,9 @@ public void testTracing() { Awaitility.await().atMost(61, TimeUnit.SECONDS).until( () -> client.query("xvalue_X"), result -> !result.data.result.isEmpty()); + Awaitility.await().atMost(61, TimeUnit.SECONDS).until( + () -> client.traces("quarkus-integration-test-observability-lgtm", 20, 3), + result -> !result.traces.isEmpty()); } } diff --git a/integration-tests/observability-lgtm/src/test/java/io/quarkus/observability/test/support/GrafanaClient.java b/integration-tests/observability-lgtm/src/test/java/io/quarkus/observability/test/support/GrafanaClient.java index 40f31cc689589..f0b9938101b76 100644 --- a/integration-tests/observability-lgtm/src/test/java/io/quarkus/observability/test/support/GrafanaClient.java +++ b/integration-tests/observability-lgtm/src/test/java/io/quarkus/observability/test/support/GrafanaClient.java @@ -89,4 +89,23 @@ public QueryResult query(String query) { }); return ref.get(); } + + public TempoResult traces(String service, int limit, int spss) { + AtomicReference ref = new AtomicReference<>(); + String path = "/api/datasources/proxy/uid/tempo/api/search?q=%7Bresource.service.name%3D%22" + + service + "%22%7D&limit=" + limit + "&spss=" + spss; + handle( + path, + HttpRequest.Builder::GET, + HttpResponse.BodyHandlers.ofString(), + (r, b) -> { + try { + TempoResult result = MAPPER.readValue(b, TempoResult.class); + ref.set(result); + } catch (JsonProcessingException e) { + throw new UncheckedIOException(e); + } + }); + return ref.get(); + } } diff --git a/integration-tests/observability-lgtm/src/test/java/io/quarkus/observability/test/support/TempoResult.java b/integration-tests/observability-lgtm/src/test/java/io/quarkus/observability/test/support/TempoResult.java new file mode 100644 index 0000000000000..480b04b5a8d92 --- /dev/null +++ b/integration-tests/observability-lgtm/src/test/java/io/quarkus/observability/test/support/TempoResult.java @@ -0,0 +1,38 @@ +package io.quarkus.observability.test.support; + +import java.util.List; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class TempoResult { + public List> traces; + public Metrics metrics; + + // getters and setters + + @Override + public String toString() { + return "TempoResult{" + + "traces=" + traces + + ", metrics=" + metrics + + '}'; + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Metrics { + public int inspectedBytes; + public int completedJobs; + public int totalJobs; + + @Override + public String toString() { + return "Metrics{" + + "inspectedBytes=" + inspectedBytes + + ", completedJobs=" + completedJobs + + ", totalJobs=" + totalJobs + + '}'; + } + } +} \ No newline at end of file