public SegmentResult next()

in oap-server/server-tools/data-generator/src/main/java/org/apache/skywalking/restapi/SegmentGenerator.java [57:132]


    public SegmentResult next(SegmentContext ctx) {
        long n = now.next(null);
        final String serviceName = ctx.serviceName;
        final String serviceInstanceName = ctx.serviceInstanceName;
        final String endpointName = getEndpointName().next(null);
        if (segmentId == null) {
            StringGenerator.Builder segmentIdBuilder = new StringGenerator.Builder();
            segmentIdBuilder.setLength(20);
            segmentIdBuilder.setNumbers(true);
            segmentIdBuilder.setLetters(true);
            segmentId = segmentIdBuilder.build();
        }

        final SegmentReference sr = Optional.ofNullable(ctx.parentSegment).flatMap(parentSegment -> parentSegment.segmentObject.getSpansList().stream()
                        .filter(span -> !Strings.isNullOrEmpty(span.getPeer()))
                        .findFirst().map(span -> SegmentReference
                                .newBuilder()
                                .setTraceId(ctx.traceId)
                                .setParentServiceInstance(parentSegment.segmentObject.getServiceInstance())
                                .setParentService(parentSegment.segmentObject.getService())
                                .setParentSpanId(span.getSpanId())
                                .setParentTraceSegmentId(parentSegment.segment.getSegmentId())
                                .setParentEndpoint(IDManager.EndpointID.analysisId(parentSegment.segment.getEndpointId()).getEndpointName())
                                .setNetworkAddressUsedAtPeer(serviceInstanceName)
                                .build()))
                .orElse(null);
        final String segmentId = getSegmentId().next(null);

        final List<SpanGenerator> spanGenerators = getSpans().next(null);
        int size = spanGenerators.size();
        final SegmentObject segmentObj = SegmentObject
                .newBuilder()
                .setTraceId(ctx.traceId)
                .setTraceSegmentId(segmentId)
                .addAllSpans(
                        IntStream.range(0, size)
                                .mapToObj(i -> {
                                    SpanGenerator sg = spanGenerators.get(i);
                                    return sg.next(new SpanGenerator.SpanGeneratorContext(i, size, sr, ctx.peer, n));
                                })
                                .collect(Collectors.<SpanObject>toList()))
                .setService(serviceName)
                .setServiceInstance(serviceInstanceName)
                .build();

        // Reset the span generator to generate the span id from 0
        getSpans().reset();

        Long latency = segmentObj.getSpansList().stream().reduce(0L, (l, span) -> l + (span.getEndTime() - span.getStartTime()), Long::sum);

        final Segment segment = new Segment();
        segment.setSegmentId(segmentId);
        segment.setTraceId(ctx.traceId);
        segment.setServiceId(
                IDManager.ServiceID.buildId(serviceName, true));
        segment.setServiceInstanceId(
                IDManager.ServiceInstanceID.buildId(
                        segment.getServiceId(),
                        serviceInstanceName));
        segment.setEndpointId(
                IDManager.EndpointID.buildId(
                        segment.getServiceId(),
                        endpointName));
        segment.setStartTime(n - latency);
        segment.setLatency(latency.intValue());
        segment.setIsError(getError().next(null).intValue());
        segment.setTimeBucket(TimeBucket.getRecordTimeBucket(segment.getStartTime()));
        segment.setTags(
                getTags()
                        .next(null)
                        .stream()
                        .map(tg -> tg.next(null))
                        .collect(Collectors.<Tag>toList()));

        return new SegmentResult(segment, segmentObj);
    }