This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch feature/add-traceql-promql-logql-e2e
in repository https://gitbox.apache.org/repos/asf/skywalking-graalvm-distro.git

commit cc6f71ca96be87af9ffe0f063d1cbd9322585b35
Author: Wu Sheng <[email protected]>
AuthorDate: Mon Mar 16 10:44:39 2026 +0800

    Add TraceQL module and PromQL/LogQL/TraceQL e2e tests
    
    - Integrate TraceQL module (Tempo-compatible trace query API) into the
      distro: application.yml, GraalVMOAPServerStartUp, POM dependencies,
      precompiler handler scan, distro-policy docs.
    - Fix Armeria handler scan to use getMethods() instead of
      getDeclaredMethods() so handlers with inherited @Get/@Path annotations
      (like TraceQL) are detected for reflect-config.
    - Add 3 new e2e test cases: PromQL, LogQL, TraceQL.
    - Update changes/changes.md with 0.2.0 entries.
---
 .github/workflows/ci.yml                           |   6 +
 build-tools/precompiler/pom.xml                    |   4 +
 .../server/buildtools/precompiler/Precompiler.java |   4 +-
 changes/changes.md                                 |  11 ++
 docs/distro-policy.md                              |   4 +-
 oap-graalvm-server/pom.xml                         |   4 +
 .../server/graalvm/GraalVMOAPServerStartUp.java    |   5 +
 .../src/main/resources/application.yml             |  12 ++
 pom.xml                                            |   5 +
 test/e2e/cases/logql/docker-compose.yml            | 162 +++++++++++++++++++++
 test/e2e/cases/logql/e2e.yaml                      |  51 +++++++
 test/e2e/cases/promql/docker-compose.yml           | 130 +++++++++++++++++
 test/e2e/cases/promql/e2e.yaml                     |  51 +++++++
 test/e2e/cases/traceql/docker-compose.yml          |  74 ++++++++++
 test/e2e/cases/traceql/e2e.yaml                    |  48 ++++++
 15 files changed, 567 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a86a61a..1879cc3 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -321,6 +321,12 @@ jobs:
             case: vm-zabbix
           - name: Zipkin
             case: zipkin
+          - name: PromQL
+            case: promql
+          - name: LogQL
+            case: logql
+          - name: TraceQL
+            case: traceql
           - name: Baseline
             case: baseline
     steps:
diff --git a/build-tools/precompiler/pom.xml b/build-tools/precompiler/pom.xml
index 816c205..c520b68 100644
--- a/build-tools/precompiler/pom.xml
+++ b/build-tools/precompiler/pom.xml
@@ -111,6 +111,10 @@
             <groupId>org.apache.skywalking</groupId>
             <artifactId>logql-plugin</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.skywalking</groupId>
+            <artifactId>traceql-plugin</artifactId>
+        </dependency>
 
         <!-- Health checker (HealthCheckerHttpService) -->
         <dependency>
diff --git 
a/build-tools/precompiler/src/main/java/org/apache/skywalking/oap/server/buildtools/precompiler/Precompiler.java
 
b/build-tools/precompiler/src/main/java/org/apache/skywalking/oap/server/buildtools/precompiler/Precompiler.java
index 25e4878..a1bfc56 100644
--- 
a/build-tools/precompiler/src/main/java/org/apache/skywalking/oap/server/buildtools/precompiler/Precompiler.java
+++ 
b/build-tools/precompiler/src/main/java/org/apache/skywalking/oap/server/buildtools/precompiler/Precompiler.java
@@ -837,8 +837,8 @@ public class Precompiler {
                 if (aClass.isInterface() || 
Modifier.isAbstract(aClass.getModifiers())) {
                     continue;
                 }
-                // Check if any method has Armeria routing annotations
-                for (Method method : aClass.getDeclaredMethods()) {
+                // Check if any method (including inherited) has Armeria 
routing annotations
+                for (Method method : aClass.getMethods()) {
                     if ((postAnno != null && 
method.isAnnotationPresent(postAnno))
                         || (getAnno != null && 
method.isAnnotationPresent(getAnno))
                         || (pathAnno != null && 
method.isAnnotationPresent(pathAnno))) {
diff --git a/changes/changes.md b/changes/changes.md
index 9836004..a31ea23 100644
--- a/changes/changes.md
+++ b/changes/changes.md
@@ -32,16 +32,27 @@ Upgrade to the latest Apache SkyWalking OAP server, with 
documentation restructu
 - `release/full-release.sh`: end-to-end release script.
 - Generate vote email template with GPG signer info and submodule commit IDs.
 
+### New Module
+
+- Add TraceQL module (Tempo-compatible trace query API) with Zipkin and 
SkyWalking datasource support.
+
 ### Testing
 
 - Replacement class staleness detector: add auto-discovery coverage check for 
untracked same-FQCN replacements in `oap-libs-for-graalvm/`.
 
 ### E2E Tests
 
+- Add PromQL e2e test case (Prometheus-compatible query API).
+- Add LogQL e2e test case (Loki-compatible log query API).
+- Add TraceQL e2e test case (Tempo-compatible trace query API with Zipkin 
datasource).
 - Update BanyanDB to `e1ba421` (fixes Zipkin `minDuration` trace query).
 - Bump Istio to 1.28.0.
 - Add Baseline e2e test case.
 
+### Build
+
+- Fix Armeria handler scan to detect inherited `@Get`/`@Path` annotations 
(precompiler).
+
 ## 0.1.0
 
 ### Highlights
diff --git a/docs/distro-policy.md b/docs/distro-policy.md
index 6168eb4..dcbd9e5 100644
--- a/docs/distro-policy.md
+++ b/docs/distro-policy.md
@@ -18,7 +18,7 @@ Build and package Apache SkyWalking OAP server as a GraalVM 
native image on JDK
 | **Configuration** | ConfigurationModule | Kubernetes |
 | **Receivers** | SharingServerModule, TraceModule, JVMModule, 
MeterReceiverModule, LogModule, RegisterModule, ProfileModule, BrowserModule, 
EventModule, OtelMetricReceiverModule, MeshReceiverModule, 
EnvoyMetricReceiverModule, ZipkinReceiverModule, ZabbixReceiverModule, 
TelegrafReceiverModule, AWSFirehoseReceiverModule, CiliumFetcherModule, 
EBPFReceiverModule, AsyncProfilerModule, PprofModule, CLRModule, 
ConfigurationDiscoveryModule, KafkaFetcherModule | default providers |
 | **Analyzers** | AnalyzerModule, LogAnalyzerModule, EventAnalyzerModule | 
default providers |
-| **Query** | QueryModule (GraphQL), PromQLModule, LogQLModule, 
ZipkinQueryModule, StatusQueryModule | default providers |
+| **Query** | QueryModule (GraphQL), PromQLModule, LogQLModule, TraceQLModule, 
ZipkinQueryModule, StatusQueryModule | default providers |
 | **Alarm** | AlarmModule | default |
 | **Telemetry** | TelemetryModule | Prometheus |
 | **Other** | ExporterModule, HealthCheckerModule, AIPipelineModule | default 
providers |
@@ -289,7 +289,7 @@ All four DSL compilers (OAL/MAL/LAL/Hierarchy) use ANTLR4 + 
Javassist v2 engines
 
 ### Remaining Verification
 - Verify all receiver plugins work (gRPC + HTTP endpoints)
-- Verify all query APIs work (GraphQL, PromQL, LogQL, Zipkin)
+- Verify all query APIs work (GraphQL, PromQL, LogQL, TraceQL, Zipkin)
 - Verify cluster mode (K8s)
 - Verify alarm module
 - Performance benchmarking vs JVM
diff --git a/oap-graalvm-server/pom.xml b/oap-graalvm-server/pom.xml
index ef5ed9b..ec00bdc 100644
--- a/oap-graalvm-server/pom.xml
+++ b/oap-graalvm-server/pom.xml
@@ -316,6 +316,10 @@
             <groupId>org.apache.skywalking</groupId>
             <artifactId>zipkin-query-plugin</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.skywalking</groupId>
+            <artifactId>traceql-plugin</artifactId>
+        </dependency>
         <!-- Alarm -->
         <dependency>
             <groupId>org.apache.skywalking</groupId>
diff --git 
a/oap-graalvm-server/src/main/java/org/apache/skywalking/oap/server/graalvm/GraalVMOAPServerStartUp.java
 
b/oap-graalvm-server/src/main/java/org/apache/skywalking/oap/server/graalvm/GraalVMOAPServerStartUp.java
index ff31bd3..be81a02 100644
--- 
a/oap-graalvm-server/src/main/java/org/apache/skywalking/oap/server/graalvm/GraalVMOAPServerStartUp.java
+++ 
b/oap-graalvm-server/src/main/java/org/apache/skywalking/oap/server/graalvm/GraalVMOAPServerStartUp.java
@@ -111,6 +111,8 @@ import org.apache.skywalking.oap.query.promql.PromQLModule;
 import org.apache.skywalking.oap.query.promql.PromQLProvider;
 import org.apache.skywalking.oap.query.logql.LogQLModule;
 import org.apache.skywalking.oap.query.logql.LogQLProvider;
+import org.apache.skywalking.oap.query.traceql.TraceQLModule;
+import org.apache.skywalking.oap.query.traceql.TraceQLProvider;
 import org.apache.skywalking.oap.query.debug.StatusQueryModule;
 import org.apache.skywalking.oap.query.debug.StatusQueryProvider;
 // Exporter
@@ -252,6 +254,9 @@ public class GraalVMOAPServerStartUp {
         }
         manager.register(new PromQLModule(), new PromQLProvider());
         manager.register(new LogQLModule(), new LogQLProvider());
+        if (configuration.has("traceQL")) {
+            manager.register(new TraceQLModule(), new TraceQLProvider());
+        }
         manager.register(new StatusQueryModule(), new StatusQueryProvider());
 
         // Alarm
diff --git a/oap-graalvm-server/src/main/resources/application.yml 
b/oap-graalvm-server/src/main/resources/application.yml
index 1248b0a..ab08eaf 100644
--- a/oap-graalvm-server/src/main/resources/application.yml
+++ b/oap-graalvm-server/src/main/resources/application.yml
@@ -300,6 +300,18 @@ logql:
     restIdleTimeOut: ${SW_LOGQL_REST_IDLE_TIMEOUT:30000}
     restAcceptQueueSize: ${SW_LOGQL_REST_QUEUE_SIZE:0}
 
+traceQL:
+  selector: ${SW_TRACEQL:-}
+  default:
+    restHost: ${SW_TRACEQL_REST_HOST:0.0.0.0}
+    restPort: ${SW_TRACEQL_REST_PORT:3200}
+    enableDatasourceZipkin: ${SW_TRACEQL_ENABLE_DATASOURCE_ZIPKIN:false}
+    enableDatasourceSkywalking: 
${SW_TRACEQL_ENABLE_DATASOURCE_SKYWALKING:false}
+    restContextPathZipkin: ${SW_TRACEQL_REST_CONTEXT_PATH_ZIPKIN:/zipkin}
+    restContextPathSkywalking: 
${SW_TRACEQL_REST_CONTEXT_PATH_SKYWALKING:/skywalking}
+    restIdleTimeOut: ${SW_TRACEQL_REST_IDLE_TIMEOUT:30000}
+    restAcceptQueueSize: ${SW_TRACEQL_REST_QUEUE_SIZE:0}
+
 alarm:
   selector: ${SW_ALARM:default}
   default:
diff --git a/pom.xml b/pom.xml
index e0d97d6..e8733c1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -295,6 +295,11 @@
                 <artifactId>logql-plugin</artifactId>
                 <version>${skywalking.version}</version>
             </dependency>
+            <dependency>
+                <groupId>org.apache.skywalking</groupId>
+                <artifactId>traceql-plugin</artifactId>
+                <version>${skywalking.version}</version>
+            </dependency>
             <dependency>
                 <groupId>org.apache.skywalking</groupId>
                 <artifactId>zipkin-query-plugin</artifactId>
diff --git a/test/e2e/cases/logql/docker-compose.yml 
b/test/e2e/cases/logql/docker-compose.yml
new file mode 100644
index 0000000..cfa4b50
--- /dev/null
+++ b/test/e2e/cases/logql/docker-compose.yml
@@ -0,0 +1,162 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+services:
+  banyandb:
+    extends:
+      file: 
../../../../skywalking/test/e2e-v2/script/docker-compose/base-compose.yml
+      service: banyandb
+    ports:
+      - 17912
+
+  oap:
+    image: skywalking-oap-native:latest
+    expose:
+      - 11800
+      - 12800
+      - 3100
+    networks:
+      - e2e
+    ports:
+      - 12800
+      - 3100
+    environment:
+      SW_HEALTH_CHECKER: default
+      SW_STORAGE_BANYANDB_TARGETS: banyandb:17912
+      SW_CONFIGURATION: none
+      SW_LOG_LAL_FILES: default
+      SW_LOG_MAL_FILES: ""
+    depends_on:
+      banyandb:
+        condition: service_healthy
+    healthcheck:
+      test: ["CMD-SHELL", "nc -nz 127.0.0.1 11800 || exit 1"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  # Init containers: copy pre-built service JARs into a shared volume
+  provider-jar:
+    image: 
"ghcr.io/apache/skywalking/e2e-service-provider:${SW_E2E_SERVICE_COMMIT}"
+    entrypoint: ["cp", "/app.jar", "/jars/services_provider.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+
+  consumer-jar:
+    image: 
"ghcr.io/apache/skywalking/e2e-service-consumer:${SW_E2E_SERVICE_COMMIT}"
+    entrypoint: ["cp", "/app.jar", "/jars/services_consumer.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+
+  provider:
+    image: 
"ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+    command: ["java", "-jar", "/jars/services_provider.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+    expose:
+      - 9090
+    ports:
+      - 9090
+    environment:
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+      SW_LOGGING_OUTPUT: CONSOLE
+      SW_AGENT_NAME: e2e-service-provider
+      SW_AGENT_INSTANCE_NAME: provider1
+      SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+      SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+      SW_METER_ACTIVE: 'false'
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9090"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+    depends_on:
+      oap:
+        condition: service_healthy
+      provider-jar:
+        condition: service_completed_successfully
+
+  provider2:
+    image: 
"ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+    command: ["java", "-jar", "/jars/services_provider.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+    expose:
+      - 9090
+    ports:
+      - 9090
+    environment:
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+      SW_LOGGING_OUTPUT: CONSOLE
+      SW_AGENT_NAME: e2e-service-provider
+      SW_AGENT_INSTANCE_NAME: provider2
+      SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+      SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+      SW_METER_ACTIVE: 'false'
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9090"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+    depends_on:
+      oap:
+        condition: service_healthy
+      provider-jar:
+        condition: service_completed_successfully
+
+  consumer:
+    image: 
"ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+    command: ["java", "-jar", "/jars/services_consumer.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+    expose:
+      - 9092
+    ports:
+      - 9092
+    environment:
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+      SW_LOGGING_OUTPUT: CONSOLE
+      PROVIDER_URL: http://provider:9090
+      SW_AGENT_NAME: e2e-service-consumer
+      SW_AGENT_INSTANCE_NAME: consumer1
+      SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+      SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+      SW_METER_ACTIVE: 'false'
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9092"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+    depends_on:
+      provider:
+        condition: service_healthy
+      consumer-jar:
+        condition: service_completed_successfully
+
+volumes:
+  service-jars:
+
+networks:
+  e2e:
diff --git a/test/e2e/cases/logql/e2e.yaml b/test/e2e/cases/logql/e2e.yaml
new file mode 100644
index 0000000..1e76432
--- /dev/null
+++ b/test/e2e/cases/logql/e2e.yaml
@@ -0,0 +1,51 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# LogQL E2E — native OAP with BanyanDB
+# Tests the Loki-compatible log query API (LogQL module).
+# Upstream uses Elasticsearch but LogQL is storage-agnostic;
+# BanyanDB supports the same log query operations.
+# Reuses upstream verification cases and expected files.
+
+setup:
+  env: compose
+  file: docker-compose.yml
+  timeout: 20m
+  init-system-environment: ../../script/env
+  steps:
+    - name: set PATH
+      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+    - name: install yq
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh yq
+    - name: install swctl
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh swctl
+
+trigger:
+  action: http
+  interval: 3s
+  times: -1
+  url: http://${consumer_host}:${consumer_9092}/users
+  method: POST
+  body: '{"id":"123","name":"skywalking"}'
+  headers:
+    "Content-Type": "application/json"
+
+verify:
+  retry:
+    count: 20
+    interval: 3s
+  cases:
+    - includes:
+        - ../../../../skywalking/test/e2e-v2/cases/logql/logql-cases.yaml
diff --git a/test/e2e/cases/promql/docker-compose.yml 
b/test/e2e/cases/promql/docker-compose.yml
new file mode 100644
index 0000000..7d334ac
--- /dev/null
+++ b/test/e2e/cases/promql/docker-compose.yml
@@ -0,0 +1,130 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+services:
+  banyandb:
+    extends:
+      file: 
../../../../skywalking/test/e2e-v2/script/docker-compose/base-compose.yml
+      service: banyandb
+    ports:
+      - 17912
+
+  oap:
+    image: skywalking-oap-native:latest
+    expose:
+      - 11800
+      - 12800
+      - 9090
+    networks:
+      - e2e
+    ports:
+      - 12800
+      - 9090
+    environment:
+      SW_HEALTH_CHECKER: default
+      SW_STORAGE_BANYANDB_TARGETS: banyandb:17912
+      SW_CONFIGURATION: none
+    depends_on:
+      banyandb:
+        condition: service_healthy
+    healthcheck:
+      test: ["CMD-SHELL", "nc -nz 127.0.0.1 11800 || exit 1"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  # Init containers: copy pre-built service JARs into a shared volume
+  provider-jar:
+    image: 
"ghcr.io/apache/skywalking/e2e-service-provider:${SW_E2E_SERVICE_COMMIT}"
+    entrypoint: ["cp", "/app.jar", "/jars/services_provider.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+
+  consumer-jar:
+    image: 
"ghcr.io/apache/skywalking/e2e-service-consumer:${SW_E2E_SERVICE_COMMIT}"
+    entrypoint: ["cp", "/app.jar", "/jars/services_consumer.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+
+  provider:
+    image: 
"ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+    command: ["java", "-jar", "/jars/services_provider.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+    expose:
+      - 9090
+    ports:
+      - 9090
+    environment:
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+      SW_LOGGING_OUTPUT: CONSOLE
+      SW_AGENT_NAME: e2e-service-provider
+      SW_AGENT_INSTANCE_NAME: provider1
+      SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+      SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+      SW_METER_ACTIVE: 'false'
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9090"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+    depends_on:
+      oap:
+        condition: service_healthy
+      provider-jar:
+        condition: service_completed_successfully
+
+  consumer:
+    image: 
"ghcr.io/apache/skywalking-java/skywalking-java:${SW_AGENT_JAVA_COMMIT}-java${SW_AGENT_JDK_VERSION}"
+    command: ["java", "-jar", "/jars/services_consumer.jar"]
+    volumes:
+      - service-jars:/jars
+    networks:
+      - e2e
+    expose:
+      - 9092
+    ports:
+      - 9092
+    environment:
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: oap:11800
+      SW_LOGGING_OUTPUT: CONSOLE
+      PROVIDER_URL: http://provider:9090
+      SW_AGENT_NAME: e2e-service-consumer
+      SW_AGENT_INSTANCE_NAME: consumer1
+      SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL: 1
+      SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL: 1
+      SW_METER_ACTIVE: 'false'
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9092"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+    depends_on:
+      provider:
+        condition: service_healthy
+      consumer-jar:
+        condition: service_completed_successfully
+
+volumes:
+  service-jars:
+
+networks:
+  e2e:
diff --git a/test/e2e/cases/promql/e2e.yaml b/test/e2e/cases/promql/e2e.yaml
new file mode 100644
index 0000000..bcf66e9
--- /dev/null
+++ b/test/e2e/cases/promql/e2e.yaml
@@ -0,0 +1,51 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# PromQL E2E — native OAP with BanyanDB
+# Tests the Prometheus-compatible query API (PromQL module).
+# Reuses upstream verification cases and expected files.
+# Note: upstream mounts a custom core.oal but our native image uses
+# pre-compiled OAL which is a superset — all queried metrics exist.
+
+setup:
+  env: compose
+  file: docker-compose.yml
+  timeout: 20m
+  init-system-environment: ../../script/env
+  steps:
+    - name: set PATH
+      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+    - name: install yq
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh yq
+    - name: install swctl
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh swctl
+
+trigger:
+  action: http
+  interval: 3s
+  times: -1
+  url: http://${consumer_host}:${consumer_9092}/users
+  method: POST
+  body: '{"id":"123","name":"skywalking"}'
+  headers:
+    "Content-Type": "application/json"
+
+verify:
+  retry:
+    count: 20
+    interval: 3s
+  cases:
+    - includes:
+        - ../../../../skywalking/test/e2e-v2/cases/promql/promql-cases.yaml
diff --git a/test/e2e/cases/traceql/docker-compose.yml 
b/test/e2e/cases/traceql/docker-compose.yml
new file mode 100644
index 0000000..5a1ad54
--- /dev/null
+++ b/test/e2e/cases/traceql/docker-compose.yml
@@ -0,0 +1,74 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+services:
+  banyandb:
+    extends:
+      file: 
../../../../skywalking/test/e2e-v2/script/docker-compose/base-compose.yml
+      service: banyandb
+    ports:
+      - 17912
+
+  oap:
+    image: skywalking-oap-native:latest
+    expose:
+      - 11800
+      - 12800
+      - 9411
+      - 3200
+    networks:
+      - e2e
+    ports:
+      - 9412
+      - 3200
+    environment:
+      SW_HEALTH_CHECKER: default
+      SW_STORAGE_BANYANDB_TARGETS: banyandb:17912
+      SW_CONFIGURATION: none
+      SW_QUERY_ZIPKIN: default
+      SW_RECEIVER_ZIPKIN: default
+      SW_TRACEQL: default
+      SW_TRACEQL_ENABLE_DATASOURCE_ZIPKIN: "true"
+    depends_on:
+      banyandb:
+        condition: service_healthy
+    healthcheck:
+      test: ["CMD-SHELL", "nc -nz 127.0.0.1 11800 || exit 1"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  frontend:
+    extends:
+      file: 
../../../../skywalking/test/e2e-v2/cases/zipkin/docker-compose-brave.yml
+      service: frontend
+    depends_on:
+      backend:
+        condition: service_healthy
+      oap:
+        condition: service_healthy
+    ports:
+      - 8081
+
+  backend:
+    extends:
+      file: 
../../../../skywalking/test/e2e-v2/cases/zipkin/docker-compose-brave.yml
+      service: backend
+    depends_on:
+      oap:
+        condition: service_healthy
+
+networks:
+  e2e:
diff --git a/test/e2e/cases/traceql/e2e.yaml b/test/e2e/cases/traceql/e2e.yaml
new file mode 100644
index 0000000..ca9046c
--- /dev/null
+++ b/test/e2e/cases/traceql/e2e.yaml
@@ -0,0 +1,48 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# TraceQL E2E — native OAP with BanyanDB
+# Tests the Tempo-compatible TraceQL query API with Zipkin datasource.
+# Reuses upstream verification cases and expected files.
+
+setup:
+  env: compose
+  file: docker-compose.yml
+  timeout: 20m
+  init-system-environment: ../../script/env
+  steps:
+    - name: set PATH
+      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+    - name: install yq
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh yq
+    - name: install swctl
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh swctl
+    - name: install jq
+      command: bash 
skywalking/test/e2e-v2/script/prepare/setup-e2e-shell/install.sh jq
+
+trigger:
+  action: http
+  interval: 3s
+  times: -1
+  url: http://${frontend_host}:${frontend_8081}/
+  method: POST
+
+verify:
+  retry:
+    count: 20
+    interval: 10s
+  cases:
+    - includes:
+        - 
../../../../skywalking/test/e2e-v2/cases/traceql/zipkin/traceql-cases.yaml

Reply via email to