@@ -15,9 +15,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.springframework.cloud.sleuth.zipkin.stream;
|
package org.springframework.cloud.sleuth.zipkin.stream;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.springframework.cloud.sleuth.Span;
|
import org.springframework.cloud.sleuth.Span;
|
||||||
import org.springframework.cloud.sleuth.stream.Host;
|
import org.springframework.cloud.sleuth.stream.Host;
|
||||||
@@ -29,6 +26,10 @@ import zipkin.Constants;
|
|||||||
import zipkin.Endpoint;
|
import zipkin.Endpoint;
|
||||||
import zipkin.Span.Builder;
|
import zipkin.Span.Builder;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This converts sleuth spans to zipkin ones, skipping invalid or unsampled.
|
* This converts sleuth spans to zipkin ones, skipping invalid or unsampled.
|
||||||
*
|
*
|
||||||
@@ -88,7 +89,7 @@ final class ConvertToZipkinSpanList {
|
|||||||
ZipkinMessageListener.addZipkinAnnotations(zipkinSpan, span, ep);
|
ZipkinMessageListener.addZipkinAnnotations(zipkinSpan, span, ep);
|
||||||
ZipkinMessageListener.addZipkinBinaryAnnotations(zipkinSpan, span, ep);
|
ZipkinMessageListener.addZipkinBinaryAnnotations(zipkinSpan, span, ep);
|
||||||
if (hasClientSend(span)) {
|
if (hasClientSend(span)) {
|
||||||
ensureServerAddr(span, zipkinSpan, ep);
|
ensureServerAddr(span, zipkinSpan);
|
||||||
}
|
}
|
||||||
// In the RPC span model, the client owns the timestamp and duration of the span. If we
|
// In the RPC span model, the client owns the timestamp and duration of the span. If we
|
||||||
// were propagated an id, we can assume that we shouldn't report timestamp or duration,
|
// were propagated an id, we can assume that we shouldn't report timestamp or duration,
|
||||||
@@ -129,10 +130,9 @@ final class ConvertToZipkinSpanList {
|
|||||||
BinaryAnnotation.create(Constants.LOCAL_COMPONENT, processId, ep));
|
BinaryAnnotation.create(Constants.LOCAL_COMPONENT, processId, ep));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void ensureServerAddr(Span span, Builder zipkinSpan,
|
private static void ensureServerAddr(Span span, Builder zipkinSpan) {
|
||||||
Endpoint ep) {
|
|
||||||
if (span.tags().containsKey(Span.SPAN_PEER_SERVICE_TAG_NAME)) {
|
if (span.tags().containsKey(Span.SPAN_PEER_SERVICE_TAG_NAME)) {
|
||||||
Endpoint endpoint = ep.toBuilder().serviceName(span.tags().get(
|
Endpoint endpoint = Endpoint.builder().serviceName(span.tags().get(
|
||||||
Span.SPAN_PEER_SERVICE_TAG_NAME)).build();
|
Span.SPAN_PEER_SERVICE_TAG_NAME)).build();
|
||||||
zipkinSpan.addBinaryAnnotation(
|
zipkinSpan.addBinaryAnnotation(
|
||||||
BinaryAnnotation.address(Constants.SERVER_ADDR, endpoint));
|
BinaryAnnotation.address(Constants.SERVER_ADDR, endpoint));
|
||||||
|
|||||||
@@ -15,15 +15,18 @@
|
|||||||
*/
|
*/
|
||||||
package org.springframework.cloud.sleuth.zipkin.stream;
|
package org.springframework.cloud.sleuth.zipkin.stream;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import org.assertj.core.api.Condition;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Random;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.springframework.cloud.sleuth.Span;
|
import org.springframework.cloud.sleuth.Span;
|
||||||
import org.springframework.cloud.sleuth.stream.Host;
|
import org.springframework.cloud.sleuth.stream.Host;
|
||||||
import org.springframework.cloud.sleuth.stream.Spans;
|
import org.springframework.cloud.sleuth.stream.Spans;
|
||||||
import zipkin.Constants;
|
import zipkin.Constants;
|
||||||
|
import zipkin.Endpoint;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
@@ -86,8 +89,14 @@ public class ConvertToZipkinSpanListTests {
|
|||||||
.hasSize(1)
|
.hasSize(1)
|
||||||
.flatExtracting(input1 -> input1.binaryAnnotations)
|
.flatExtracting(input1 -> input1.binaryAnnotations)
|
||||||
.filteredOn("key", Constants.SERVER_ADDR)
|
.filteredOn("key", Constants.SERVER_ADDR)
|
||||||
.extracting(input -> input.endpoint.serviceName)
|
.extracting(input -> input.endpoint)
|
||||||
.contains("myservice");
|
.hasSize(1)
|
||||||
|
.has(new Condition<List<? extends Endpoint>>() {
|
||||||
|
@Override public boolean matches(List<? extends Endpoint> value) {
|
||||||
|
Endpoint endpoint = value.get(0);
|
||||||
|
return endpoint.serviceName.equals("myservice") && endpoint.ipv4 == 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -16,6 +16,14 @@
|
|||||||
|
|
||||||
package org.springframework.cloud.sleuth.zipkin;
|
package org.springframework.cloud.sleuth.zipkin;
|
||||||
|
|
||||||
|
import org.springframework.cloud.commons.util.IdUtils;
|
||||||
|
import org.springframework.cloud.sleuth.Log;
|
||||||
|
import org.springframework.cloud.sleuth.NoOpSpanAdjuster;
|
||||||
|
import org.springframework.cloud.sleuth.Span;
|
||||||
|
import org.springframework.cloud.sleuth.SpanAdjuster;
|
||||||
|
import org.springframework.cloud.sleuth.SpanReporter;
|
||||||
|
import org.springframework.core.env.Environment;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
import zipkin.Annotation;
|
import zipkin.Annotation;
|
||||||
import zipkin.BinaryAnnotation;
|
import zipkin.BinaryAnnotation;
|
||||||
import zipkin.Constants;
|
import zipkin.Constants;
|
||||||
@@ -27,15 +35,6 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.springframework.cloud.commons.util.IdUtils;
|
|
||||||
import org.springframework.cloud.sleuth.Log;
|
|
||||||
import org.springframework.cloud.sleuth.NoOpSpanAdjuster;
|
|
||||||
import org.springframework.cloud.sleuth.Span;
|
|
||||||
import org.springframework.cloud.sleuth.SpanAdjuster;
|
|
||||||
import org.springframework.cloud.sleuth.SpanReporter;
|
|
||||||
import org.springframework.core.env.Environment;
|
|
||||||
import org.springframework.util.StringUtils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Listener of Sleuth events. Reports to Zipkin via {@link ZipkinSpanReporter}.
|
* Listener of Sleuth events. Reports to Zipkin via {@link ZipkinSpanReporter}.
|
||||||
*
|
*
|
||||||
@@ -149,10 +148,10 @@ public class ZipkinSpanListener implements SpanReporter {
|
|||||||
zipkinSpan.addBinaryAnnotation(component);
|
zipkinSpan.addBinaryAnnotation(component);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ensureServerAddr(Span span, zipkin.Span.Builder zipkinSpan, Endpoint localEndpoint) {
|
private void ensureServerAddr(Span span, zipkin.Span.Builder zipkinSpan) {
|
||||||
if (span.tags().containsKey(Span.SPAN_PEER_SERVICE_TAG_NAME)) {
|
if (span.tags().containsKey(Span.SPAN_PEER_SERVICE_TAG_NAME)) {
|
||||||
zipkinSpan.addBinaryAnnotation(BinaryAnnotation.address(Constants.SERVER_ADDR,
|
zipkinSpan.addBinaryAnnotation(BinaryAnnotation.address(Constants.SERVER_ADDR,
|
||||||
localEndpoint.toBuilder().serviceName(
|
Endpoint.builder().serviceName(
|
||||||
span.tags().get(Span.SPAN_PEER_SERVICE_TAG_NAME)).build()));
|
span.tags().get(Span.SPAN_PEER_SERVICE_TAG_NAME)).build()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -178,7 +177,7 @@ public class ZipkinSpanListener implements SpanReporter {
|
|||||||
ensureLocalComponent(span, zipkinSpan, endpoint);
|
ensureLocalComponent(span, zipkinSpan, endpoint);
|
||||||
}
|
}
|
||||||
if (hasClientSend) {
|
if (hasClientSend) {
|
||||||
ensureServerAddr(span, zipkinSpan, endpoint);
|
ensureServerAddr(span, zipkinSpan);
|
||||||
}
|
}
|
||||||
if (instanceIdToTag && this.environment != null) {
|
if (instanceIdToTag && this.environment != null) {
|
||||||
setInstanceIdIfPresent(zipkinSpan, endpoint, Span.INSTANCEID);
|
setInstanceIdIfPresent(zipkinSpan, endpoint, Span.INSTANCEID);
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.springframework.cloud.sleuth.zipkin;
|
package org.springframework.cloud.sleuth.zipkin;
|
||||||
|
|
||||||
|
import org.assertj.core.api.Condition;
|
||||||
import zipkin.Constants;
|
import zipkin.Constants;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -41,6 +42,7 @@ import org.springframework.context.annotation.Configuration;
|
|||||||
import org.springframework.context.annotation.Primary;
|
import org.springframework.context.annotation.Primary;
|
||||||
import org.springframework.mock.env.MockEnvironment;
|
import org.springframework.mock.env.MockEnvironment;
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
import zipkin.Endpoint;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
@@ -219,7 +221,14 @@ public class ZipkinSpanListenerTests {
|
|||||||
|
|
||||||
assertThat(result.binaryAnnotations)
|
assertThat(result.binaryAnnotations)
|
||||||
.filteredOn("key", Constants.SERVER_ADDR)
|
.filteredOn("key", Constants.SERVER_ADDR)
|
||||||
.isNotEmpty();
|
.extracting(input -> input.endpoint)
|
||||||
|
.hasSize(1)
|
||||||
|
.has(new Condition<List<? extends Endpoint>>() {
|
||||||
|
@Override public boolean matches(List<? extends Endpoint> value) {
|
||||||
|
Endpoint endpoint = value.get(0);
|
||||||
|
return endpoint.serviceName.equals("fooservice") && endpoint.ipv4 == 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user