[#146] Introduced SpanName
- Added aspect to provide better naming for @Async fixes #146
This commit is contained in:
@@ -18,13 +18,12 @@ package org.springframework.cloud.sleuth.zipkin.stream;
|
||||
import java.util.Iterator;
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
import lombok.extern.apachecommons.CommonsLog;
|
||||
import org.springframework.cloud.sleuth.Span;
|
||||
import org.springframework.cloud.sleuth.SpanName;
|
||||
import org.springframework.cloud.sleuth.stream.Host;
|
||||
import org.springframework.cloud.sleuth.stream.SleuthSink;
|
||||
import org.springframework.cloud.sleuth.stream.Spans;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import lombok.extern.apachecommons.CommonsLog;
|
||||
import zipkin.BinaryAnnotation;
|
||||
import zipkin.Constants;
|
||||
import zipkin.Endpoint;
|
||||
@@ -37,6 +36,8 @@ import zipkin.Span.Builder;
|
||||
@CommonsLog
|
||||
final class SamplingZipkinSpanIterator implements Iterator<zipkin.Span> {
|
||||
|
||||
private static final String MESSAGE_COMPONENT = "message";
|
||||
|
||||
private final Sampler sampler;
|
||||
private final Iterator<Span> delegate;
|
||||
private final Host host;
|
||||
@@ -75,7 +76,7 @@ final class SamplingZipkinSpanIterator implements Iterator<zipkin.Span> {
|
||||
* returns a converted span or null if it is invalid or unsampled.
|
||||
*/
|
||||
zipkin.Span convertAndSample(Span input, Host host) {
|
||||
if (!input.getName().equals("message/" + SleuthSink.INPUT)) {
|
||||
if (!protocolWithAddressMatch(input)) {
|
||||
zipkin.Span result = SamplingZipkinSpanIterator.convert(input, host);
|
||||
if (this.sampler.isSampled(result.traceId)) {
|
||||
return result;
|
||||
@@ -87,6 +88,12 @@ final class SamplingZipkinSpanIterator implements Iterator<zipkin.Span> {
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean protocolWithAddressMatch(Span input) {
|
||||
SpanName spanName = input.getName();
|
||||
return SamplingZipkinSpanIterator.MESSAGE_COMPONENT.equals(spanName.component) &&
|
||||
("/" + SleuthSink.INPUT).equals(spanName.address);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a given Sleuth span to a Zipkin Span.
|
||||
* <ul>
|
||||
@@ -128,8 +135,8 @@ final class SamplingZipkinSpanIterator implements Iterator<zipkin.Span> {
|
||||
zipkinSpan.parentId(span.getParents().get(0));
|
||||
}
|
||||
zipkinSpan.id(span.getSpanId());
|
||||
if (StringUtils.hasText(span.getName())) {
|
||||
zipkinSpan.name(span.getName());
|
||||
if (!SpanName.NO_NAME.equals(span.getName())) {
|
||||
zipkinSpan.name(span.getName().toString());
|
||||
}
|
||||
return zipkinSpan.build();
|
||||
}
|
||||
|
||||
@@ -15,18 +15,19 @@
|
||||
*/
|
||||
package org.springframework.cloud.sleuth.zipkin.stream;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.cloud.sleuth.Span;
|
||||
import org.springframework.cloud.sleuth.stream.Host;
|
||||
import org.springframework.cloud.sleuth.stream.Spans;
|
||||
import zipkin.Sampler;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.cloud.sleuth.Span;
|
||||
import org.springframework.cloud.sleuth.SpanName;
|
||||
import org.springframework.cloud.sleuth.stream.Host;
|
||||
import org.springframework.cloud.sleuth.stream.Spans;
|
||||
import zipkin.Sampler;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class SamplingZipkinSpanIteratorTests {
|
||||
@@ -36,7 +37,7 @@ public class SamplingZipkinSpanIteratorTests {
|
||||
@Test
|
||||
public void skipsInputSpans() {
|
||||
Spans spans = new Spans(this.host,
|
||||
Collections.singletonList(span("message/sleuth")));
|
||||
Collections.singletonList(span("sleuth")));
|
||||
|
||||
Iterator<zipkin.Span> result = new SamplingZipkinSpanIterator(
|
||||
Sampler.create(1.0f), spans);
|
||||
@@ -52,7 +53,8 @@ public class SamplingZipkinSpanIteratorTests {
|
||||
Iterator<zipkin.Span> result = new SamplingZipkinSpanIterator(
|
||||
Sampler.create(1.0f), spans);
|
||||
|
||||
assertThat(result).extracting(s -> s.name).containsExactly("foo", "bar", "baz");
|
||||
assertThat(result).extracting(s -> s.name).containsExactly(
|
||||
"message:/foo", "message:/bar", "message:/baz");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -71,12 +73,13 @@ public class SamplingZipkinSpanIteratorTests {
|
||||
Iterator<zipkin.Span> result = new SamplingZipkinSpanIterator(everyOtherSampler,
|
||||
spans);
|
||||
|
||||
assertThat(result).extracting(s -> s.name).containsExactly("foo", "baz");
|
||||
assertThat(result).extracting(s -> s.name).containsExactly(
|
||||
"message:/foo", "message:/baz");
|
||||
}
|
||||
|
||||
Span span(String name) {
|
||||
Long id = new Random().nextLong();
|
||||
return new Span(1, 3, name, id, Collections.<Long>emptyList(), id, true, true,
|
||||
return new Span(1, 3, new SpanName("message", "/" + name), id, Collections.<Long>emptyList(), id, true, true,
|
||||
"process");
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,8 @@
|
||||
package org.springframework.cloud.sleuth.zipkin.stream;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import org.springframework.cloud.sleuth.SpanName;
|
||||
import zipkin.BinaryAnnotation;
|
||||
import zipkin.Endpoint;
|
||||
|
||||
@@ -27,7 +29,7 @@ import org.springframework.cloud.sleuth.stream.Host;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class ZipkinMessageListenerTests {
|
||||
Span span = new Span(1, 3, "name", 1L, Collections.<Long>emptyList(), 2L, true, true,
|
||||
Span span = new Span(1, 3, new SpanName("http", "name"), 1L, Collections.<Long>emptyList(), 2L, true, true,
|
||||
"process");
|
||||
Host host = new Host("myservice", "1.2.3.4", 8080);
|
||||
Endpoint endpoint = Endpoint.create("myservice", 1 << 24 | 2 << 16 | 3 << 8 | 4, 8080);
|
||||
@@ -80,7 +82,7 @@ public class ZipkinMessageListenerTests {
|
||||
// TODO: "unknown" bc process id, documented as not nullable, is null in some tests.
|
||||
@Test
|
||||
public void nullProcessIdCoercesToUnknownServiceName() {
|
||||
Span noProcessId = Span.builder().traceId(1L).name("parent").remote(true).build();
|
||||
Span noProcessId = Span.builder().traceId(1L).name(new SpanName("http", "parent")).remote(true).build();
|
||||
|
||||
zipkin.Span result = SamplingZipkinSpanIterator.convert(noProcessId, this.host);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user