@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); } } }
@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); } } }
@Test public void generateSpan_WithResourceLabels() { SpanData spanData = SpanData.create( spanContext, parentSpanId, /* hasRemoteParent= */ true, SPAN_NAME, null, startTimestamp, attributes, annotations, messageEvents, links, CHILD_SPAN_COUNT, status, endTimestamp); Span span = handler.generateSpan( spanData, AWS_RESOURCE_LABELS, Collections.<String, AttributeValue>emptyMap()); Map<String, AttributeValue> attributeMap = span.getAttributes().getAttributeMapMap(); assertThat(attributeMap.entrySet()).containsAllIn(AWS_RESOURCE_LABELS.entrySet()); }
@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); }
@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); }
@Test public void generateSpanName_ForServerWithRecv() { SpanData spanData = SpanData.create( spanContext, parentSpanId, /* hasRemoteParent= */ true, "Recv." + 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); }
@Test public void exportChildSpanCount() { 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()) .getChildSpanCount() .getValue()) .isEqualTo(CHILD_SPAN_COUNT); }
@Test public void generateSpanName_ForClient() { SpanData spanData = SpanData.create( spanContext, parentSpanId, /* hasRemoteParent= */ true, 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); }
handler.generateSpan( spanData, EMPTY_RESOURCE_LABELS, Collections.<String, AttributeValue>emptyMap()); Map<String, AttributeValue> attributes = span.getAttributes().getAttributeMapMap();
endTimestamp); Span span = handler.generateSpan(spanData, EMPTY_RESOURCE_LABELS, fixedAttributes); Map<String, AttributeValue> attributeMap = span.getAttributes().getAttributeMapMap(); assertThat(attributeMap.entrySet()).containsAllIn(fixedAttributes.entrySet());
handler.generateSpan( spanData, EMPTY_RESOURCE_LABELS, Collections.<String, AttributeValue>emptyMap()); assertThat(span.getName()).isEqualTo(SD_SPAN_NAME);