You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ha...@apache.org on 2024/03/20 23:51:32 UTC

(skywalking) branch data-generator updated: Fix service order

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

hanahmily pushed a commit to branch data-generator
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/data-generator by this push:
     new ab05bdfa89 Fix service order
ab05bdfa89 is described below

commit ab05bdfa896d0f18fcee2564aaf76bd2fdd98481
Author: Gao Hongtao <ha...@gmail.com>
AuthorDate: Thu Mar 21 07:51:10 2024 +0800

    Fix service order
    
    Signed-off-by: Gao Hongtao <ha...@gmail.com>
---
 docs/en/setup/backend/segment-template.json        | 42 ++++++++--------------
 .../restapi/SegmentGeneratorHandler.java           | 15 +++++++-
 .../apache/skywalking/restapi/SegmentRequest.java  | 19 ++++++----
 .../skywalking/restapi/SegmentGeneratorTest.java   |  1 +
 .../src/test/resources/segment.tpl.json            |  8 ++---
 5 files changed, 45 insertions(+), 40 deletions(-)

diff --git a/docs/en/setup/backend/segment-template.json b/docs/en/setup/backend/segment-template.json
index 0cfc9c1a39..7539775670 100644
--- a/docs/en/setup/backend/segment-template.json
+++ b/docs/en/setup/backend/segment-template.json
@@ -3,25 +3,25 @@
         "type": "uuid",
         "changingFrequency": "1"
     },
+    "serviceInstanceName": {
+        "type": "randomString",
+        "length": "10",
+        "letters": true,
+        "numbers": true,
+        "domainSize": 10
+    },
+    "serviceName": {
+        "type": "randomString",
+        "prefix": "service_",
+        "length": "1",
+        "letters": false,
+        "numbers": true,
+        "domainSize": 10
+    },
     "segments": {
         "type": "randomList",
         "size": 5,
         "item": {
-            "serviceInstanceName": {
-                "type": "randomString",
-                "length": "10",
-                "letters": true,
-                "numbers": true,
-                "domainSize": 10
-            },
-            "serviceName": {
-                "type": "randomString",
-                "prefix": "service_",
-                "length": "1",
-                "letters": false,
-                "numbers": true,
-                "domainSize": 10
-            },
             "endpointName": {
                 "type": "randomString",
                 "length": "10",
@@ -73,18 +73,6 @@
                         "letters": true,
                         "numbers": true
                     },
-                    "peer": {
-                        "type": "randomString",
-                        "length": "10",
-                        "prefix": "test_peer_",
-                        "letters": true,
-                        "numbers": true
-                    },
-                    "spanLayer": {
-                        "type": "randomInt",
-                        "min": "0",
-                        "max": "4"
-                    },
                     "componentId": {
                         "type": "randomInt",
                         "min": "0",
diff --git a/oap-server/server-tools/data-generator/src/main/java/org/apache/skywalking/restapi/SegmentGeneratorHandler.java b/oap-server/server-tools/data-generator/src/main/java/org/apache/skywalking/restapi/SegmentGeneratorHandler.java
index 0b018324c3..e1038869dd 100644
--- a/oap-server/server-tools/data-generator/src/main/java/org/apache/skywalking/restapi/SegmentGeneratorHandler.java
+++ b/oap-server/server-tools/data-generator/src/main/java/org/apache/skywalking/restapi/SegmentGeneratorHandler.java
@@ -61,6 +61,8 @@ public class SegmentGeneratorHandler {
     public HttpResponse generateMockSegments(
         @Default("0") @Param("size") int size,
         @Default("0") @Param("qps") int qps,
+        @Default("0") @Param("duration") int duration,
+        @Default("") @Param("group") String group,
         @RequestObject SegmentRequest request) {
 
         if (size > 0 && qps > 0) {
@@ -71,8 +73,9 @@ public class SegmentGeneratorHandler {
         }
         log.info("Generate {} mock segments, qps: {}, template: {}", size, qps, request);
 
+        request.init();
         final IntConsumer generator = unused -> {
-            final List<SegmentGenerator.SegmentResult> segments = request.next(null);
+            final List<SegmentGenerator.SegmentResult> segments = request.next(group);
             log.debug("Generating segment: {}", (Object) segments);
             segments.forEach(s -> {
                 segmentParserService.send(s.segmentObject);
@@ -102,6 +105,16 @@ public class SegmentGeneratorHandler {
                 log.error("Exception in future: ", f.cause());
             }
         });
+        final int durationSeconds = duration > 0 ? duration : Integer.MAX_VALUE;
+        future.addListener(f -> {
+            try {
+                Thread.sleep(durationSeconds * 1000L);
+                future.cancel(true);
+                log.info("Generate mock segments is canceled: requestId: {}", requestId);
+            } catch (InterruptedException e) {
+                log.error("Interrupted", e);
+            }
+        });
 
         return HttpResponse.of(MediaType.PLAIN_TEXT, requestId);
     }
diff --git a/oap-server/server-tools/data-generator/src/main/java/org/apache/skywalking/restapi/SegmentRequest.java b/oap-server/server-tools/data-generator/src/main/java/org/apache/skywalking/restapi/SegmentRequest.java
index a1cecf7142..769be844c3 100644
--- a/oap-server/server-tools/data-generator/src/main/java/org/apache/skywalking/restapi/SegmentRequest.java
+++ b/oap-server/server-tools/data-generator/src/main/java/org/apache/skywalking/restapi/SegmentRequest.java
@@ -30,21 +30,28 @@ import java.util.stream.IntStream;
 
 @Data
 @JsonTypeInfo(use = JsonTypeInfo.Id.NONE)
-public final class SegmentRequest implements Generator<Object, List<SegmentGenerator.SegmentResult>> {
+public final class SegmentRequest implements Generator<String, List<SegmentGenerator.SegmentResult>> {
     private Generator<String, String> traceId;
     private Generator<String, String> serviceName;
     private Generator<String, String> serviceInstanceName;
     private Generator<Object, List<SegmentGenerator>> segments;
 
+    private List<String> serviceList;
+
+    void init() {
+        String prefix = getServiceName().next("");
+        final List<SegmentGenerator> segments = getSegments().next("");
+        serviceList = IntStream.range(0, segments.size()).mapToObj(i -> prefix + i).collect(Collectors.toList());
+    }
+
     @Override
-    public List<SegmentGenerator.SegmentResult> next(Object ignored) {
+    public List<SegmentGenerator.SegmentResult> next(String group) {
         final String traceId = getTraceId().next(null);
         final List<SegmentGenerator> segments = getSegments().next(traceId);
         SegmentGenerator.SegmentResult last = null;
-        List<SegmentGenerator.SegmentContext> context = IntStream.range(0, segments.size()).mapToObj(i -> {
-            String serviceName = getServiceName().next(null);
-            return new SegmentGenerator.SegmentContext(traceId, serviceName, getServiceInstanceName().next(serviceName));
-        }).collect(Collectors.toList());
+        List<SegmentGenerator.SegmentContext> context = IntStream.range(0, segments.size()).mapToObj(i ->
+            new SegmentGenerator.SegmentContext(traceId, serviceList.get(i), getServiceInstanceName().next(serviceList.get(i)))
+        ).collect(Collectors.toList());
         List<SegmentGenerator.SegmentResult> result = new ArrayList<>(segments.size());
         for (int i = 0; i < segments.size(); i++) {
             SegmentGenerator.SegmentContext ctx = context.get(i);
diff --git a/oap-server/server-tools/data-generator/src/test/java/org/apache/skywalking/restapi/SegmentGeneratorTest.java b/oap-server/server-tools/data-generator/src/test/java/org/apache/skywalking/restapi/SegmentGeneratorTest.java
index c202043b26..d55b4cd877 100644
--- a/oap-server/server-tools/data-generator/src/test/java/org/apache/skywalking/restapi/SegmentGeneratorTest.java
+++ b/oap-server/server-tools/data-generator/src/test/java/org/apache/skywalking/restapi/SegmentGeneratorTest.java
@@ -43,6 +43,7 @@ class SegmentGeneratorTest {
         assertNotNull(url);
         File jsonFile = new File(url.toURI());
         SegmentRequest sr = objectMapper.readValue(jsonFile, SegmentRequest.class);
+        sr.init();
         Set<String> serviceSet = new HashSet<>();
         Set<String> serviceInstanceSet = new HashSet<>();
         Set<String> endpointSet = new HashSet<>();
diff --git a/oap-server/server-tools/data-generator/src/test/resources/segment.tpl.json b/oap-server/server-tools/data-generator/src/test/resources/segment.tpl.json
index 90518347b4..3597234abf 100644
--- a/oap-server/server-tools/data-generator/src/test/resources/segment.tpl.json
+++ b/oap-server/server-tools/data-generator/src/test/resources/segment.tpl.json
@@ -11,12 +11,8 @@
     "domainSize": 10
   },
   "serviceName": {
-    "type": "randomString",
-    "prefix": "service_",
-    "length": "1",
-    "letters": false,
-    "numbers": true,
-    "domainSize": 10
+    "type": "fixedString",
+    "value": "service_"
   },
   "segments": {
     "type": "randomList",