Search in sources :

Example 1 with PSpan

use of com.navercorp.pinpoint.grpc.trace.PSpan in project pinpoint by naver.

the class SpanClientMock method span.

public void span(int count) {
    final int size = 1000;
    final byte[] bytes = new byte[size];
    for (int i = 0; i < size; i++) {
        bytes[i] = (byte) i;
    }
    PAnnotationValue value = PAnnotationValue.newBuilder().setBinaryValue(ByteString.copyFrom(bytes)).build();
    PAnnotation annotation = PAnnotation.newBuilder().setValue(value).build();
    PSpanEvent spanEvent = PSpanEvent.newBuilder().addAnnotation(annotation).build();
    AtomicLong counter = new AtomicLong();
    service.execute(new Runnable() {

        @Override
        public void run() {
            // StreamObserver<PSpanMessage> requestObserver = spanStub.sendSpan(responseObserver);
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
            }
            for (int i = 0; i < count; i++) {
                final PSpan span = PSpan.newBuilder().setSpanId(i).addSpanEvent(spanEvent).build();
                final PSpanMessage spanMessage = PSpanMessage.newBuilder().setSpan(span).build();
                spanStream.onNext(spanMessage);
                // requestObserver.onNext(spanMessage);
                try {
                    TimeUnit.MILLISECONDS.sleep(10);
                } catch (InterruptedException e) {
                }
            // System.out.print("S");
            }
            spanStream.onCompleted();
        // requestObserver.onCompleted();
        }
    });
}
Also used : PAnnotationValue(com.navercorp.pinpoint.grpc.trace.PAnnotationValue) AtomicLong(java.util.concurrent.atomic.AtomicLong) PSpanMessage(com.navercorp.pinpoint.grpc.trace.PSpanMessage) PSpan(com.navercorp.pinpoint.grpc.trace.PSpan) PAnnotation(com.navercorp.pinpoint.grpc.trace.PAnnotation) PSpanEvent(com.navercorp.pinpoint.grpc.trace.PSpanEvent)

Example 2 with PSpan

use of com.navercorp.pinpoint.grpc.trace.PSpan in project pinpoint by naver.

the class GrpcSpanMessageConverter method buildPSpan.

@VisibleForTesting
PSpan buildPSpan(Span span) {
    final PSpan.Builder pSpan = PSpan.newBuilder();
    pSpan.setVersion(SpanVersion.TRACE_V2);
    pSpan.setApplicationServiceType(applicationServiceType);
    final TraceRoot traceRoot = span.getTraceRoot();
    final TraceId traceId = traceRoot.getTraceId();
    final PTransactionId transactionId = newTransactionId(traceId);
    pSpan.setTransactionId(transactionId);
    pSpan.setSpanId(traceId.getSpanId());
    pSpan.setParentSpanId(traceId.getParentSpanId());
    pSpan.setStartTime(span.getStartTime());
    pSpan.setElapsed(span.getElapsedTime());
    pSpan.setServiceType(span.getServiceType());
    PAcceptEvent pAcceptEvent = newAcceptEvent(span);
    pSpan.setAcceptEvent(pAcceptEvent);
    pSpan.setFlag(traceId.getFlags());
    Shared shared = span.getTraceRoot().getShared();
    pSpan.setErr(shared.getErrorCode());
    pSpan.setApiId(span.getApiId());
    final IntStringValue exceptionInfo = span.getExceptionInfo();
    if (exceptionInfo != null) {
        PIntStringValue pIntStringValue = buildPIntStringValue(exceptionInfo);
        pSpan.setExceptionInfo(pIntStringValue);
    }
    pSpan.setLoggingTransactionInfo(shared.getLoggingInfo());
    final List<Annotation<?>> annotations = span.getAnnotations();
    if (CollectionUtils.hasLength(annotations)) {
        final List<PAnnotation> tAnnotations = buildPAnnotation(annotations);
        pSpan.addAllAnnotation(tAnnotations);
    }
    this.spanProcessor.preProcess(span, pSpan);
    final List<SpanEvent> spanEventList = span.getSpanEventList();
    if (CollectionUtils.hasLength(spanEventList)) {
        final List<PSpanEvent> pSpanEvents = buildPSpanEventList(spanEventList);
        pSpan.addAllSpanEvent(pSpanEvents);
    }
    this.spanProcessor.postProcess(span, pSpan);
    return pSpan.build();
}
Also used : PAnnotation(com.navercorp.pinpoint.grpc.trace.PAnnotation) PTransactionId(com.navercorp.pinpoint.grpc.trace.PTransactionId) Shared(com.navercorp.pinpoint.profiler.context.id.Shared) Annotation(com.navercorp.pinpoint.profiler.context.Annotation) PAnnotation(com.navercorp.pinpoint.grpc.trace.PAnnotation) PSpan(com.navercorp.pinpoint.grpc.trace.PSpan) PIntStringValue(com.navercorp.pinpoint.grpc.trace.PIntStringValue) IntStringValue(com.navercorp.pinpoint.common.util.IntStringValue) PIntStringValue(com.navercorp.pinpoint.grpc.trace.PIntStringValue) PSpanEvent(com.navercorp.pinpoint.grpc.trace.PSpanEvent) SpanEvent(com.navercorp.pinpoint.profiler.context.SpanEvent) TraceId(com.navercorp.pinpoint.bootstrap.context.TraceId) TraceRoot(com.navercorp.pinpoint.profiler.context.id.TraceRoot) PAcceptEvent(com.navercorp.pinpoint.grpc.trace.PAcceptEvent) PSpanEvent(com.navercorp.pinpoint.grpc.trace.PSpanEvent) VisibleForTesting(com.navercorp.pinpoint.common.annotations.VisibleForTesting)

Example 3 with PSpan

use of com.navercorp.pinpoint.grpc.trace.PSpan in project pinpoint by naver.

the class GrpcSpanProcessorV2Test method postProcess.

@Test
public void postProcess() {
    Span span = newSpan();
    SpanEventBuilder factory = new SpanEventBuilder();
    factory.addSpanEvent();
    factory.addSpanEvent();
    factory.addSpanEvent();
    span.setSpanEventList(factory.getSpanEventList());
    PSpan.Builder builder = PSpan.newBuilder();
    for (SpanEvent spanEvent : span.getSpanEventList()) {
        PSpanEvent.Builder pSpanEvent = converter.buildPSpanEvent(spanEvent);
        builder.addSpanEvent(pSpanEvent);
    }
    spanProcessorProtoV2.postProcess(span, builder);
    PSpan pSpan = builder.build();
    List<PSpanEvent> pSpanEventList = pSpan.getSpanEventList();
    List<SpanEvent> spanEventList = span.getSpanEventList();
    long keyStartTime = span.getStartTime();
    for (int i = 0; i < pSpanEventList.size(); i++) {
        PSpanEvent pSpanEvent = pSpanEventList.get(i);
        SpanEvent next = spanEventList.get(i);
        long startTime = keyStartTime + pSpanEvent.getStartElapsed();
        Assert.assertEquals(startTime, next.getStartTime());
        keyStartTime = startTime;
    }
}
Also used : PSpan(com.navercorp.pinpoint.grpc.trace.PSpan) PSpanEvent(com.navercorp.pinpoint.grpc.trace.PSpanEvent) SpanEvent(com.navercorp.pinpoint.profiler.context.SpanEvent) PSpanEvent(com.navercorp.pinpoint.grpc.trace.PSpanEvent) PSpan(com.navercorp.pinpoint.grpc.trace.PSpan) Span(com.navercorp.pinpoint.profiler.context.Span) Test(org.junit.Test)

Example 4 with PSpan

use of com.navercorp.pinpoint.grpc.trace.PSpan in project pinpoint by naver.

the class ChannelFactoryTest method build.

@Test
public void build() throws InterruptedException {
    HeaderFactory headerFactory = new AgentHeaderFactory("agentId", "agentName", "appName", ServiceType.UNDEFINED.getCode(), System.currentTimeMillis());
    CountRecordClientInterceptor countRecordClientInterceptor = new CountRecordClientInterceptor();
    ChannelFactoryBuilder channelFactoryBuilder = new DefaultChannelFactoryBuilder(this.getClass().getSimpleName());
    channelFactoryBuilder.setHeaderFactory(headerFactory);
    channelFactoryBuilder.setNameResolverProvider(nameResolverProvider);
    channelFactoryBuilder.addClientInterceptor(countRecordClientInterceptor);
    channelFactoryBuilder.setClientOption(new ClientOption());
    ChannelFactory channelFactory = channelFactoryBuilder.build();
    ManagedChannel managedChannel = channelFactory.build("127.0.0.1", PORT);
    managedChannel.getState(false);
    SpanGrpc.SpanStub spanStub = SpanGrpc.newStub(managedChannel);
    final QueueingStreamObserver<Empty> responseObserver = new QueueingStreamObserver<>();
    logger.debug("sendSpan");
    StreamObserver<PSpanMessage> sendSpan = spanStub.sendSpan(responseObserver);
    PSpan pSpan = newSpan();
    PSpanMessage message = PSpanMessage.newBuilder().setSpan(pSpan).build();
    logger.debug("client-onNext");
    sendSpan.onNext(message);
    logger.debug("wait for response");
    Empty value = responseObserver.getValue();
    logger.debug("response:{}", value);
    logger.debug("client-onCompleted");
    sendSpan.onCompleted();
    Assert.assertEquals(1, countRecordClientInterceptor.getExecutedInterceptCallCount());
    logger.debug("state:{}", managedChannel.getState(true));
    spanService.awaitOnCompleted();
    logger.debug("managedChannel shutdown");
    managedChannel.shutdown();
    managedChannel.awaitTermination(1000, TimeUnit.MILLISECONDS);
    channelFactory.close();
}
Also used : HeaderFactory(com.navercorp.pinpoint.grpc.client.HeaderFactory) ChannelFactory(com.navercorp.pinpoint.grpc.client.ChannelFactory) ChannelFactoryBuilder(com.navercorp.pinpoint.grpc.client.ChannelFactoryBuilder) DefaultChannelFactoryBuilder(com.navercorp.pinpoint.grpc.client.DefaultChannelFactoryBuilder) DefaultChannelFactoryBuilder(com.navercorp.pinpoint.grpc.client.DefaultChannelFactoryBuilder) Empty(com.google.protobuf.Empty) PSpanMessage(com.navercorp.pinpoint.grpc.trace.PSpanMessage) PSpan(com.navercorp.pinpoint.grpc.trace.PSpan) ManagedChannel(io.grpc.ManagedChannel) SpanGrpc(com.navercorp.pinpoint.grpc.trace.SpanGrpc) ClientOption(com.navercorp.pinpoint.grpc.client.config.ClientOption) Test(org.junit.Test)

Example 5 with PSpan

use of com.navercorp.pinpoint.grpc.trace.PSpan in project pinpoint by naver.

the class SpanService method sendSpan.

@Override
public StreamObserver<PSpanMessage> sendSpan(final StreamObserver<Empty> responseObserver) {
    StreamObserver<PSpanMessage> observer = new StreamObserver<PSpanMessage>() {

        @Override
        public void onNext(PSpanMessage spanMessage) {
            if (isDebug) {
                logger.debug("Send PSpan={}", MessageFormatUtils.debugLog(spanMessage));
            }
            if (spanMessage.hasSpan()) {
                final Message<PSpan> message = newMessage(spanMessage.getSpan(), DefaultTBaseLocator.SPAN);
                send(message, responseObserver);
            } else if (spanMessage.hasSpanChunk()) {
                final Message<PSpanChunk> message = newMessage(spanMessage.getSpanChunk(), DefaultTBaseLocator.SPANCHUNK);
                send(message, responseObserver);
            } else {
                if (isDebug) {
                    logger.debug("Found empty span message {}", MessageFormatUtils.debugLog(spanMessage));
                }
            }
        }

        @Override
        public void onError(Throwable throwable) {
            com.navercorp.pinpoint.grpc.Header header = ServerContext.getAgentInfo();
            final StatusError statusError = StatusErrors.throwable(throwable);
            if (statusError.isSimpleError()) {
                logger.info("Failed to span stream, {} cause={}", header, statusError.getMessage(), statusError.getThrowable());
            } else {
                logger.warn("Failed to span stream, {} cause={}", header, statusError.getMessage(), statusError.getThrowable());
            }
        }

        @Override
        public void onCompleted() {
            com.navercorp.pinpoint.grpc.Header header = ServerContext.getAgentInfo();
            logger.info("onCompleted {}", header);
            Empty empty = Empty.newBuilder().build();
            responseObserver.onNext(empty);
            responseObserver.onCompleted();
        }
    };
    return observer;
}
Also used : StreamObserver(io.grpc.stub.StreamObserver) Empty(com.google.protobuf.Empty) PSpanMessage(com.navercorp.pinpoint.grpc.trace.PSpanMessage) PSpan(com.navercorp.pinpoint.grpc.trace.PSpan) Message(com.navercorp.pinpoint.io.request.Message) DefaultMessage(com.navercorp.pinpoint.io.request.DefaultMessage) PSpanMessage(com.navercorp.pinpoint.grpc.trace.PSpanMessage) StatusError(com.navercorp.pinpoint.grpc.StatusError)

Aggregations

PSpan (com.navercorp.pinpoint.grpc.trace.PSpan)5 PSpanEvent (com.navercorp.pinpoint.grpc.trace.PSpanEvent)3 PSpanMessage (com.navercorp.pinpoint.grpc.trace.PSpanMessage)3 Empty (com.google.protobuf.Empty)2 PAnnotation (com.navercorp.pinpoint.grpc.trace.PAnnotation)2 SpanEvent (com.navercorp.pinpoint.profiler.context.SpanEvent)2 Test (org.junit.Test)2 TraceId (com.navercorp.pinpoint.bootstrap.context.TraceId)1 VisibleForTesting (com.navercorp.pinpoint.common.annotations.VisibleForTesting)1 IntStringValue (com.navercorp.pinpoint.common.util.IntStringValue)1 StatusError (com.navercorp.pinpoint.grpc.StatusError)1 ChannelFactory (com.navercorp.pinpoint.grpc.client.ChannelFactory)1 ChannelFactoryBuilder (com.navercorp.pinpoint.grpc.client.ChannelFactoryBuilder)1 DefaultChannelFactoryBuilder (com.navercorp.pinpoint.grpc.client.DefaultChannelFactoryBuilder)1 HeaderFactory (com.navercorp.pinpoint.grpc.client.HeaderFactory)1 ClientOption (com.navercorp.pinpoint.grpc.client.config.ClientOption)1 PAcceptEvent (com.navercorp.pinpoint.grpc.trace.PAcceptEvent)1 PAnnotationValue (com.navercorp.pinpoint.grpc.trace.PAnnotationValue)1 PIntStringValue (com.navercorp.pinpoint.grpc.trace.PIntStringValue)1 PTransactionId (com.navercorp.pinpoint.grpc.trace.PTransactionId)1