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

hanahmily pushed a commit to branch trace
in repository 
https://gitbox.apache.org/repos/asf/skywalking-banyandb-java-client.git

commit 6562746b8e512678df06b92fc023933332460b50
Author: Gao Hongtao <hanahm...@gmail.com>
AuthorDate: Fri Jun 28 11:34:33 2024 +0800

    Add trace to response
    
    Signed-off-by: Gao Hongtao <hanahm...@gmail.com>
---
 .../banyandb/v1/client/MeasureQueryResponse.java   |  4 ++
 .../apache/skywalking/banyandb/v1/client/Span.java | 58 ++++++++++++++++++++++
 .../banyandb/v1/client/StreamQueryResponse.java    | 10 ++--
 .../client/{StreamQueryResponse.java => Tag.java}  | 34 ++++++-------
 .../{StreamQueryResponse.java => Trace.java}       | 39 ++++++++-------
 .../v1/client/BanyanDBClientMeasureQueryTest.java  | 10 ++++
 .../v1/client/BanyanDBClientStreamQueryTest.java   | 10 ++++
 7 files changed, 124 insertions(+), 41 deletions(-)

diff --git 
a/src/main/java/org/apache/skywalking/banyandb/v1/client/MeasureQueryResponse.java
 
b/src/main/java/org/apache/skywalking/banyandb/v1/client/MeasureQueryResponse.java
index ba483d4..b371c4f 100644
--- 
a/src/main/java/org/apache/skywalking/banyandb/v1/client/MeasureQueryResponse.java
+++ 
b/src/main/java/org/apache/skywalking/banyandb/v1/client/MeasureQueryResponse.java
@@ -31,12 +31,16 @@ public class MeasureQueryResponse {
     @Getter
     private final List<DataPoint> dataPoints;
 
+    @Getter
+    private final Trace trace;
+
     MeasureQueryResponse(BanyandbMeasure.QueryResponse response) {
         final List<BanyandbMeasure.DataPoint> dataPointList = 
response.getDataPointsList();
         this.dataPoints = new ArrayList<>(dataPointList.size());
         for (final BanyandbMeasure.DataPoint dp : dataPointList) {
             dataPoints.add(DataPoint.create(dp));
         }
+        this.trace = Trace.convertFromProto(response.getTrace());
     }
 
     /**
diff --git a/src/main/java/org/apache/skywalking/banyandb/v1/client/Span.java 
b/src/main/java/org/apache/skywalking/banyandb/v1/client/Span.java
new file mode 100644
index 0000000..293051d
--- /dev/null
+++ b/src/main/java/org/apache/skywalking/banyandb/v1/client/Span.java
@@ -0,0 +1,58 @@
+/*
+ * 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.
+ *
+ */
+
+package org.apache.skywalking.banyandb.v1.client;
+
+import com.google.protobuf.Timestamp;
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Span represents the span of a {@link Trace}.
+ */
+@Getter
+@Setter(value = AccessLevel.PRIVATE)
+public class Span {
+    private Timestamp startTime;
+    private Timestamp endTime;
+    private boolean error;
+    private List<Tag> tags;
+    private String message;
+    private List<Span> children;
+    private long duration;
+
+    static Span 
convertSpanFromProto(org.apache.skywalking.banyandb.common.v1.BanyandbCommon.Span
 protoSpan) {
+        Span spanBean = new Span();
+        spanBean.setStartTime(protoSpan.getStartTime());
+        spanBean.setEndTime(protoSpan.getEndTime());
+        spanBean.setError(protoSpan.getError());
+        spanBean.setMessage(protoSpan.getMessage());
+        spanBean.setDuration(protoSpan.getDuration());
+        spanBean.setTags(protoSpan.getTagsList().stream()
+                .map(Tag::convertTagFromProto)
+                .collect(Collectors.toList()));
+        spanBean.setChildren(protoSpan.getChildrenList().stream()
+                .map(Span::convertSpanFromProto)
+                .collect(Collectors.toList()));
+        return spanBean;
+    }
+}
diff --git 
a/src/main/java/org/apache/skywalking/banyandb/v1/client/StreamQueryResponse.java
 
b/src/main/java/org/apache/skywalking/banyandb/v1/client/StreamQueryResponse.java
index c5a5546..b1b19aa 100644
--- 
a/src/main/java/org/apache/skywalking/banyandb/v1/client/StreamQueryResponse.java
+++ 
b/src/main/java/org/apache/skywalking/banyandb/v1/client/StreamQueryResponse.java
@@ -18,12 +18,12 @@
 
 package org.apache.skywalking.banyandb.v1.client;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import lombok.Getter;
 import org.apache.skywalking.banyandb.stream.v1.BanyandbStream;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * StreamQueryResponse represents the stream query result.
  */
@@ -31,10 +31,14 @@ public class StreamQueryResponse {
     @Getter
     private final List<Element> elements;
 
+    @Getter
+    private final Trace trace;
+
     StreamQueryResponse(BanyandbStream.QueryResponse response) {
         final List<BanyandbStream.Element> elementsList = 
response.getElementsList();
         elements = new ArrayList<>(elementsList.size());
         elementsList.forEach(element -> elements.add(Element.create(element)));
+        this.trace = Trace.convertFromProto(response.getTrace());
     }
 
     /**
diff --git 
a/src/main/java/org/apache/skywalking/banyandb/v1/client/StreamQueryResponse.java
 b/src/main/java/org/apache/skywalking/banyandb/v1/client/Tag.java
similarity index 57%
copy from 
src/main/java/org/apache/skywalking/banyandb/v1/client/StreamQueryResponse.java
copy to src/main/java/org/apache/skywalking/banyandb/v1/client/Tag.java
index c5a5546..bc1c8a8 100644
--- 
a/src/main/java/org/apache/skywalking/banyandb/v1/client/StreamQueryResponse.java
+++ b/src/main/java/org/apache/skywalking/banyandb/v1/client/Tag.java
@@ -18,29 +18,25 @@
 
 package org.apache.skywalking.banyandb.v1.client;
 
-import java.util.ArrayList;
-import java.util.List;
-
+import lombok.AccessLevel;
 import lombok.Getter;
-import org.apache.skywalking.banyandb.stream.v1.BanyandbStream;
+import lombok.Setter;
+
 
 /**
- * StreamQueryResponse represents the stream query result.
+ * Tag represents the key-value pair of a tag in a {@link Span}.
  */
-public class StreamQueryResponse {
-    @Getter
-    private final List<Element> elements;
+@Getter
+@Setter(value = AccessLevel.PRIVATE)
+public class Tag {
+    private String key;
+    private String value;
 
-    StreamQueryResponse(BanyandbStream.QueryResponse response) {
-        final List<BanyandbStream.Element> elementsList = 
response.getElementsList();
-        elements = new ArrayList<>(elementsList.size());
-        elementsList.forEach(element -> elements.add(Element.create(element)));
-    }
-
-    /**
-     * @return size of the response set.
-     */
-    public int size() {
-        return elements.size();
+    static Tag 
convertTagFromProto(org.apache.skywalking.banyandb.common.v1.BanyandbCommon.Tag 
protoTag) {
+        Tag tagBean = new Tag();
+        tagBean.setKey(protoTag.getKey());
+        tagBean.setValue(protoTag.getValue());
+        return tagBean;
     }
 }
+
diff --git 
a/src/main/java/org/apache/skywalking/banyandb/v1/client/StreamQueryResponse.java
 b/src/main/java/org/apache/skywalking/banyandb/v1/client/Trace.java
similarity index 56%
copy from 
src/main/java/org/apache/skywalking/banyandb/v1/client/StreamQueryResponse.java
copy to src/main/java/org/apache/skywalking/banyandb/v1/client/Trace.java
index c5a5546..9c33a55 100644
--- 
a/src/main/java/org/apache/skywalking/banyandb/v1/client/StreamQueryResponse.java
+++ b/src/main/java/org/apache/skywalking/banyandb/v1/client/Trace.java
@@ -18,29 +18,30 @@
 
 package org.apache.skywalking.banyandb.v1.client;
 
-import java.util.ArrayList;
-import java.util.List;
-
+import lombok.AccessLevel;
 import lombok.Getter;
-import org.apache.skywalking.banyandb.stream.v1.BanyandbStream;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
- * StreamQueryResponse represents the stream query result.
+ * Trace represents the trace of a request.
  */
-public class StreamQueryResponse {
-    @Getter
-    private final List<Element> elements;
-
-    StreamQueryResponse(BanyandbStream.QueryResponse response) {
-        final List<BanyandbStream.Element> elementsList = 
response.getElementsList();
-        elements = new ArrayList<>(elementsList.size());
-        elementsList.forEach(element -> elements.add(Element.create(element)));
-    }
+@Getter
+@Setter(value = AccessLevel.PRIVATE)
+public class Trace {
+    private String traceId;
+    private List<Span> spans;
+    private boolean error;
 
-    /**
-     * @return size of the response set.
-     */
-    public int size() {
-        return elements.size();
+    static Trace 
convertFromProto(org.apache.skywalking.banyandb.common.v1.BanyandbCommon.Trace 
protoTrace) {
+        Trace traceBean = new Trace();
+        traceBean.setTraceId(protoTrace.getTraceId());
+        traceBean.setError(protoTrace.getError());
+        traceBean.setSpans(protoTrace.getSpansList().stream()
+                .map(Span::convertSpanFromProto)
+                .collect(Collectors.toList()));
+        return traceBean;
     }
 }
diff --git 
a/src/test/java/org/apache/skywalking/banyandb/v1/client/BanyanDBClientMeasureQueryTest.java
 
b/src/test/java/org/apache/skywalking/banyandb/v1/client/BanyanDBClientMeasureQueryTest.java
index 624c356..5c28741 100644
--- 
a/src/test/java/org/apache/skywalking/banyandb/v1/client/BanyanDBClientMeasureQueryTest.java
+++ 
b/src/test/java/org/apache/skywalking/banyandb/v1/client/BanyanDBClientMeasureQueryTest.java
@@ -22,6 +22,7 @@ import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
 import com.google.protobuf.Timestamp;
 import io.grpc.stub.StreamObserver;
+import org.apache.skywalking.banyandb.common.v1.BanyandbCommon;
 import org.apache.skywalking.banyandb.measure.v1.BanyandbMeasure;
 import org.apache.skywalking.banyandb.measure.v1.MeasureServiceGrpc;
 import org.apache.skywalking.banyandb.model.v1.BanyandbModel;
@@ -124,6 +125,10 @@ public class BanyanDBClientMeasureQueryTest extends 
AbstractBanyanDBClientTest {
         final String entityIDValue = "entity_id_a";
         final Instant now = Instant.now();
         final BanyandbMeasure.QueryResponse responseObj = 
BanyandbMeasure.QueryResponse.newBuilder()
+                
.setTrace(BanyandbCommon.Trace.newBuilder().addSpans(BanyandbCommon.Span.newBuilder()
+                        .setMessage("test")
+                                
.addTags(BanyandbCommon.Tag.newBuilder().setKey("b").setValue("a").build())
+                        .build()).build())
                 .addDataPoints(BanyandbMeasure.DataPoint.newBuilder()
                         .setTimestamp(Timestamp.newBuilder()
                                 .setSeconds(now.toEpochMilli() / 1000)
@@ -151,6 +156,11 @@ public class BanyanDBClientMeasureQueryTest extends 
AbstractBanyanDBClientTest {
         Assert.assertEquals(entityIDValue, 
resp.getDataPoints().get(0).getTagValue("entity_id"));
         Assert.assertEquals(10L,
                 (Number) resp.getDataPoints().get(0).getFieldValue("total"));
+        Assert.assertEquals(1, resp.getTrace().getSpans().size());
+        Assert.assertEquals("test", 
resp.getTrace().getSpans().get(0).getMessage());
+        Assert.assertEquals(1, 
resp.getTrace().getSpans().get(0).getTags().size());
+        Assert.assertEquals("b", 
resp.getTrace().getSpans().get(0).getTags().get(0).getKey());
+        Assert.assertEquals("a", 
resp.getTrace().getSpans().get(0).getTags().get(0).getValue());
     }
 
     @Test
diff --git 
a/src/test/java/org/apache/skywalking/banyandb/v1/client/BanyanDBClientStreamQueryTest.java
 
b/src/test/java/org/apache/skywalking/banyandb/v1/client/BanyanDBClientStreamQueryTest.java
index d98a618..15c59cb 100644
--- 
a/src/test/java/org/apache/skywalking/banyandb/v1/client/BanyanDBClientStreamQueryTest.java
+++ 
b/src/test/java/org/apache/skywalking/banyandb/v1/client/BanyanDBClientStreamQueryTest.java
@@ -24,6 +24,7 @@ import com.google.protobuf.ByteString;
 import com.google.protobuf.NullValue;
 import com.google.protobuf.Timestamp;
 import io.grpc.stub.StreamObserver;
+import org.apache.skywalking.banyandb.common.v1.BanyandbCommon;
 import org.apache.skywalking.banyandb.model.v1.BanyandbModel;
 import org.apache.skywalking.banyandb.stream.v1.BanyandbStream;
 import org.apache.skywalking.banyandb.stream.v1.StreamServiceGrpc;
@@ -318,6 +319,10 @@ public class BanyanDBClientStreamQueryTest extends 
AbstractBanyanDBClientTest {
         final long duration = 200L;
         final Instant now = Instant.now();
         final BanyandbStream.QueryResponse responseObj = 
BanyandbStream.QueryResponse.newBuilder()
+                
.setTrace(BanyandbCommon.Trace.newBuilder().addSpans(BanyandbCommon.Span.newBuilder()
+                        .setMessage("test")
+                        
.addTags(BanyandbCommon.Tag.newBuilder().setKey("b").setValue("a").build())
+                        .build()).build())
                 .addElements(BanyandbStream.Element.newBuilder()
                         .setElementId(elementId)
                         .setTimestamp(Timestamp.newBuilder()
@@ -362,6 +367,11 @@ public class BanyanDBClientStreamQueryTest extends 
AbstractBanyanDBClientTest {
         Assert.assertNull(resp.getElements().get(0).getTagValue("mq.broker"));
         Assert.assertArrayEquals(binaryData,
                 resp.getElements().get(0).getTagValue("data_binary"));
+        Assert.assertEquals(1, resp.getTrace().getSpans().size());
+        Assert.assertEquals("test", 
resp.getTrace().getSpans().get(0).getMessage());
+        Assert.assertEquals(1, 
resp.getTrace().getSpans().get(0).getTags().size());
+        Assert.assertEquals("b", 
resp.getTrace().getSpans().get(0).getTags().get(0).getKey());
+        Assert.assertEquals("a", 
resp.getTrace().getSpans().get(0).getTags().get(0).getValue());
     }
 
     @Test

Reply via email to