Search in sources :

Example 16 with SpanData

use of io.opencensus.trace.export.SpanData in project instrumentation-java by census-instrumentation.

the class StackdriverV2ExporterHandler method export.

@Override
public void export(Collection<SpanData> spanDataList) {
    // Start a new span with explicit 1/10000 sampling probability to avoid the case when user
    // sets the default sampler to always sample and we get the gRPC span of the stackdriver
    // export call always sampled and go to an infinite loop.
    io.opencensus.trace.Span span = tracer.spanBuilder(EXPORT_STACKDRIVER_TRACES).setSampler(probabilitySampler).setRecordEvents(true).startSpan();
    Scope scope = tracer.withSpan(span);
    try {
        List<Span> spans = new ArrayList<>(spanDataList.size());
        for (SpanData spanData : spanDataList) {
            spans.add(generateSpan(spanData, RESOURCE_LABELS, fixedAttributes));
        }
        // Sync call because it is already called for a batch of data, and on a separate thread.
        // TODO(bdrutu): Consider to make this async in the future.
        traceServiceClient.batchWriteSpans(projectName, spans);
    } finally {
        scope.close();
        span.end(END_SPAN_OPTIONS);
    }
}
Also used : Scope(io.opencensus.common.Scope) SpanData(io.opencensus.trace.export.SpanData) ArrayList(java.util.ArrayList) Span(com.google.devtools.cloudtrace.v2.Span)

Example 17 with SpanData

use of io.opencensus.trace.export.SpanData in project instrumentation-java by census-instrumentation.

the class StackdriverV2ExporterHandlerProtoTest method generateSpan.

@Test
public void generateSpan() {
    SpanData spanData = SpanData.create(spanContext, parentSpanId, /* hasRemoteParent= */
    true, SPAN_NAME, null, startTimestamp, attributes, annotations, messageEvents, links, CHILD_SPAN_COUNT, status, endTimestamp);
    TimeEvent annotationTimeEvent1 = TimeEvent.newBuilder().setAnnotation(TimeEvent.Annotation.newBuilder().setDescription(TruncatableString.newBuilder().setValue(ANNOTATION_TEXT).build()).setAttributes(Span.Attributes.newBuilder().build()).build()).setTime(com.google.protobuf.Timestamp.newBuilder().setSeconds(eventTimestamp1.getSeconds()).setNanos(eventTimestamp1.getNanos()).build()).build();
    TimeEvent annotationTimeEvent2 = TimeEvent.newBuilder().setAnnotation(TimeEvent.Annotation.newBuilder().setDescription(TruncatableString.newBuilder().setValue(ANNOTATION_TEXT).build()).setAttributes(Span.Attributes.newBuilder().build()).build()).setTime(com.google.protobuf.Timestamp.newBuilder().setSeconds(eventTimestamp3.getSeconds()).setNanos(eventTimestamp3.getNanos()).build()).build();
    TimeEvent sentTimeEvent = TimeEvent.newBuilder().setMessageEvent(TimeEvent.MessageEvent.newBuilder().setType(MessageEvent.Type.SENT).setId(sentMessageEvent.getMessageId())).setTime(com.google.protobuf.Timestamp.newBuilder().setSeconds(eventTimestamp2.getSeconds()).setNanos(eventTimestamp2.getNanos()).build()).build();
    TimeEvent recvTimeEvent = TimeEvent.newBuilder().setMessageEvent(TimeEvent.MessageEvent.newBuilder().setType(MessageEvent.Type.RECEIVED).setId(recvMessageEvent.getMessageId())).setTime(com.google.protobuf.Timestamp.newBuilder().setSeconds(eventTimestamp1.getSeconds()).setNanos(eventTimestamp1.getNanos()).build()).build();
    Span.Links spanLinks = Span.Links.newBuilder().setDroppedLinksCount(DROPPED_LINKS_COUNT).addLink(Span.Link.newBuilder().setType(Span.Link.Type.CHILD_LINKED_SPAN).setTraceId(TRACE_ID).setSpanId(SPAN_ID).setAttributes(Span.Attributes.newBuilder().build()).build()).build();
    com.google.rpc.Status spanStatus = com.google.rpc.Status.newBuilder().setCode(com.google.rpc.Code.DEADLINE_EXCEEDED.getNumber()).setMessage("TooSlow").build();
    com.google.protobuf.Timestamp startTime = com.google.protobuf.Timestamp.newBuilder().setSeconds(startTimestamp.getSeconds()).setNanos(startTimestamp.getNanos()).build();
    com.google.protobuf.Timestamp endTime = com.google.protobuf.Timestamp.newBuilder().setSeconds(endTimestamp.getSeconds()).setNanos(endTimestamp.getNanos()).build();
    Span span = handler.generateSpan(spanData, EMPTY_RESOURCE_LABELS, Collections.<String, AttributeValue>emptyMap());
    assertThat(span.getName()).isEqualTo(SD_SPAN_NAME);
    assertThat(span.getSpanId()).isEqualTo(SPAN_ID);
    assertThat(span.getParentSpanId()).isEqualTo(PARENT_SPAN_ID);
    assertThat(span.getDisplayName()).isEqualTo(TruncatableString.newBuilder().setValue(SPAN_NAME).build());
    assertThat(span.getStartTime()).isEqualTo(startTime);
    assertThat(span.getEndTime()).isEqualTo(endTime);
    assertThat(span.getAttributes().getDroppedAttributesCount()).isEqualTo(DROPPED_ATTRIBUTES_COUNT);
    // The generated attributes map contains more values (e.g. agent). We only test what we added.
    assertThat(span.getAttributes().getAttributeMapMap()).containsEntry(ATTRIBUTE_KEY_1, AttributeValue.newBuilder().setIntValue(10L).build());
    assertThat(span.getAttributes().getAttributeMapMap()).containsEntry(ATTRIBUTE_KEY_2, AttributeValue.newBuilder().setBoolValue(true).build());
    // TODO(@Hailong): add stack trace test in the future.
    assertThat(span.getStackTrace()).isEqualTo(StackTrace.newBuilder().build());
    assertThat(span.getTimeEvents().getDroppedMessageEventsCount()).isEqualTo(DROPPED_NETWORKEVENTS_COUNT);
    assertThat(span.getTimeEvents().getDroppedAnnotationsCount()).isEqualTo(DROPPED_ANNOTATIONS_COUNT);
    assertThat(span.getTimeEvents().getTimeEventList()).containsExactly(annotationTimeEvent1, annotationTimeEvent2, sentTimeEvent, recvTimeEvent);
    assertThat(span.getLinks()).isEqualTo(spanLinks);
    assertThat(span.getStatus()).isEqualTo(spanStatus);
    assertThat(span.getSameProcessAsParentSpan()).isEqualTo(com.google.protobuf.BoolValue.of(false));
    assertThat(span.getChildSpanCount()).isEqualTo(Int32Value.newBuilder().setValue(CHILD_SPAN_COUNT).build());
}
Also used : SpanData(io.opencensus.trace.export.SpanData) TimeEvent(com.google.devtools.cloudtrace.v2.Span.TimeEvent) Span(com.google.devtools.cloudtrace.v2.Span) Test(org.junit.Test)

Example 18 with SpanData

use of io.opencensus.trace.export.SpanData in project instrumentation-java by census-instrumentation.

the class StackdriverV2ExporterHandlerProtoTest method mapHttpAttributes.

@Test
public void mapHttpAttributes() {
    Map<String, io.opencensus.trace.AttributeValue> attributesMap = new HashMap<String, io.opencensus.trace.AttributeValue>();
    attributesMap.put("http.host", io.opencensus.trace.AttributeValue.stringAttributeValue("host"));
    attributesMap.put("http.method", io.opencensus.trace.AttributeValue.stringAttributeValue("method"));
    attributesMap.put("http.path", io.opencensus.trace.AttributeValue.stringAttributeValue("path"));
    attributesMap.put("http.route", io.opencensus.trace.AttributeValue.stringAttributeValue("route"));
    attributesMap.put("http.user_agent", io.opencensus.trace.AttributeValue.stringAttributeValue("user_agent"));
    attributesMap.put("http.status_code", io.opencensus.trace.AttributeValue.longAttributeValue(200L));
    SpanData.Attributes httpAttributes = SpanData.Attributes.create(attributesMap, 0);
    SpanData spanData = SpanData.create(spanContext, parentSpanId, /* hasRemoteParent= */
    true, SPAN_NAME, null, startTimestamp, httpAttributes, annotations, messageEvents, links, CHILD_SPAN_COUNT, status, endTimestamp);
    Span span = handler.generateSpan(spanData, EMPTY_RESOURCE_LABELS, Collections.<String, AttributeValue>emptyMap());
    Map<String, AttributeValue> attributes = span.getAttributes().getAttributeMapMap();
    assertThat(attributes).containsEntry("/http/host", toStringAttributeValueProto("host"));
    assertThat(attributes).containsEntry("/http/method", toStringAttributeValueProto("method"));
    assertThat(attributes).containsEntry("/http/path", toStringAttributeValueProto("path"));
    assertThat(attributes).containsEntry("/http/route", toStringAttributeValueProto("route"));
    assertThat(attributes).containsEntry("/http/user_agent", toStringAttributeValueProto("user_agent"));
    assertThat(attributes).containsEntry("/http/status_code", AttributeValue.newBuilder().setIntValue(200L).build());
}
Also used : AttributeValue(com.google.devtools.cloudtrace.v2.AttributeValue) SpanData(io.opencensus.trace.export.SpanData) HashMap(java.util.HashMap) TruncatableString(com.google.devtools.cloudtrace.v2.TruncatableString) Span(com.google.devtools.cloudtrace.v2.Span) Test(org.junit.Test)

Example 19 with SpanData

use of io.opencensus.trace.export.SpanData in project instrumentation-java by census-instrumentation.

the class StackdriverV2ExporterHandlerProtoTest method generateSpanName_ForServer.

@Test
public void generateSpanName_ForServer() {
    SpanData spanData = SpanData.create(spanContext, parentSpanId, /* hasRemoteParent= */
    true, SPAN_NAME, Kind.SERVER, startTimestamp, attributes, annotations, messageEvents, links, CHILD_SPAN_COUNT, status, endTimestamp);
    assertThat(handler.generateSpan(spanData, EMPTY_RESOURCE_LABELS, Collections.<String, AttributeValue>emptyMap()).getDisplayName().getValue()).isEqualTo("Recv." + SPAN_NAME);
}
Also used : SpanData(io.opencensus.trace.export.SpanData) Test(org.junit.Test)

Example 20 with SpanData

use of io.opencensus.trace.export.SpanData in project instrumentation-java by census-instrumentation.

the class StackdriverV2ExporterHandlerProtoTest method generateSpanName_ForClientWithSent.

@Test
public void generateSpanName_ForClientWithSent() {
    SpanData spanData = SpanData.create(spanContext, parentSpanId, /* hasRemoteParent= */
    true, "Sent." + SPAN_NAME, Kind.CLIENT, startTimestamp, attributes, annotations, messageEvents, links, CHILD_SPAN_COUNT, status, endTimestamp);
    assertThat(handler.generateSpan(spanData, EMPTY_RESOURCE_LABELS, Collections.<String, AttributeValue>emptyMap()).getDisplayName().getValue()).isEqualTo("Sent." + SPAN_NAME);
}
Also used : SpanData(io.opencensus.trace.export.SpanData) Test(org.junit.Test)

Aggregations

SpanData (io.opencensus.trace.export.SpanData)86 Test (org.junit.Test)74 RecordEventsSpanImpl (io.opencensus.implcore.trace.RecordEventsSpanImpl)18 Link (io.opencensus.trace.Link)17 AttributeValue (io.opencensus.trace.AttributeValue)13 Collectors (java.util.stream.Collectors)13 Scope (org.apache.ignite.spi.tracing.Scope)13 TracingConfigurationCoordinates (org.apache.ignite.spi.tracing.TracingConfigurationCoordinates)13 TracingConfigurationParameters (org.apache.ignite.spi.tracing.TracingConfigurationParameters)13 TracingSpi (org.apache.ignite.spi.tracing.TracingSpi)13 IgniteEx (org.apache.ignite.internal.IgniteEx)12 SAMPLING_RATE_ALWAYS (org.apache.ignite.spi.tracing.TracingConfigurationParameters.SAMPLING_RATE_ALWAYS)12 OpenCensusTracingSpi (org.apache.ignite.spi.tracing.opencensus.OpenCensusTracingSpi)12 SpanId (io.opencensus.trace.SpanId)11 Collections (java.util.Collections)9 SpanType (org.apache.ignite.internal.processors.tracing.SpanType)9 TX (org.apache.ignite.spi.tracing.Scope.TX)9 ArrayList (java.util.ArrayList)8 Arrays (java.util.Arrays)8 Set (java.util.Set)8