SingleHasEntryNoExitNoRefSpan.java 4.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/*
 * Copyright 2017, OpenSkywalking Organization All rights reserved.
 *
 * Licensed 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.
 *
 * Project repository: https://github.com/OpenSkywalking/skywalking
 */

19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
package org.skywalking.apm.collector.agentstream.mock.grpc;

import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.grpc.stub.StreamObserver;
import org.skywalking.apm.network.proto.Downstream;
import org.skywalking.apm.network.proto.SpanLayer;
import org.skywalking.apm.network.proto.SpanObject;
import org.skywalking.apm.network.proto.SpanType;
import org.skywalking.apm.network.proto.TraceSegmentObject;
import org.skywalking.apm.network.proto.TraceSegmentServiceGrpc;
import org.skywalking.apm.network.proto.UniqueId;
import org.skywalking.apm.network.proto.UpstreamSegment;
import org.skywalking.apm.network.trace.component.ComponentsDefine;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author pengys5
 */
public class SingleHasEntryNoExitNoRefSpan {

    public static void main(String[] args) {
        Post post = new Post();
        post.send();

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
    }

    static class Post {
        private final Logger logger = LoggerFactory.getLogger(Post.class);

        public void send() {
            ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 11800).maxInboundMessageSize(1024 * 1024 * 50).usePlaintext(true).build();

            int applicationId = 0;
            int instanceId = 0;
            int entryServiceId = 0;
            while (applicationId == 0) {
                applicationId = ApplicationRegister.register(channel, "consumer");
            }

            while (instanceId == 0) {
                instanceId = InstanceRegister.register(channel, "ConsumerUUID", applicationId, "consumer_host_name", 1);
            }

            while (entryServiceId == 0) {
                entryServiceId = ServiceRegister.register(channel, applicationId, "/dubbox-case/case/dubbox-rest");
            }

            TraceSegmentServiceGrpc.TraceSegmentServiceStub stub = TraceSegmentServiceGrpc.newStub(channel);
            StreamObserver<UpstreamSegment> streamObserver = stub.collect(new StreamObserver<Downstream>() {
                @Override public void onNext(Downstream downstream) {
                }

                @Override public void onError(Throwable throwable) {
                    logger.error(throwable.getMessage(), throwable);
                }

                @Override public void onCompleted() {
                }
            });

            long now = System.currentTimeMillis();

            int id = 1;
            UniqueId.Builder builder = UniqueId.newBuilder();
            builder.addIdParts(id);
            builder.addIdParts(id);
            builder.addIdParts(id);
            UniqueId segmentId = builder.build();

            UpstreamSegment.Builder upstream = UpstreamSegment.newBuilder();
            upstream.addGlobalTraceIds(segmentId);

            TraceSegmentObject.Builder segmentBuilder = TraceSegmentObject.newBuilder();
            segmentBuilder.setApplicationId(applicationId);
            segmentBuilder.setApplicationInstanceId(instanceId);
            segmentBuilder.setTraceSegmentId(segmentId);

            SpanObject.Builder entrySpan = SpanObject.newBuilder();
            entrySpan.setSpanId(0);
            entrySpan.setSpanType(SpanType.Entry);
            entrySpan.setSpanLayer(SpanLayer.Http);
            entrySpan.setParentSpanId(-1);
            entrySpan.setStartTime(now);
            entrySpan.setEndTime(now + 3000);
            entrySpan.setComponentId(ComponentsDefine.TOMCAT.getId());
            entrySpan.setOperationNameId(entryServiceId);
            entrySpan.setIsError(false);
            segmentBuilder.addSpans(entrySpan);

            upstream.setSegment(segmentBuilder.build().toByteString());

            streamObserver.onNext(upstream.build());
            streamObserver.onCompleted();
        }
    }
}