From 4c90b872a79c49415c3145e07e67fe7bc16a4ac6 Mon Sep 17 00:00:00 2001 From: Adrian Cole Date: Tue, 14 Jul 2020 19:27:51 +0800 Subject: [PATCH] Makes a nice toString on RestTemplateSender (#1686) The AsyncZipkinSpanHandler calls 'check' once on startup to let someone know an error that may affect tracing up front. Before, this didn't include the endpoint so it is less obvious what could be the problem. Ex people goof the URL (don't add /api/v2/spans or it is added twice) --- .../zipkin2/sender/RestTemplateSender.java | 5 +++++ .../sender/RestTemplateSenderTest.java | 21 ++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin2/sender/RestTemplateSender.java b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin2/sender/RestTemplateSender.java index 5b6c123ec..982dcb0d9 100644 --- a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin2/sender/RestTemplateSender.java +++ b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin2/sender/RestTemplateSender.java @@ -129,6 +129,11 @@ final class RestTemplateSender extends Sender { this.restTemplate.exchange(requestEntity, String.class); } + @Override + public String toString() { + return "RestTemplateSender{" + url + "}"; + } + class HttpPostCall extends Call.Base { private final byte[] message; diff --git a/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin2/sender/RestTemplateSenderTest.java b/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin2/sender/RestTemplateSenderTest.java index dbbc13eb7..63fb32211 100644 --- a/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin2/sender/RestTemplateSenderTest.java +++ b/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin2/sender/RestTemplateSenderTest.java @@ -28,6 +28,8 @@ import zipkin2.Endpoint; import zipkin2.Span; import zipkin2.codec.Encoding; import zipkin2.codec.SpanBytesEncoder; +import zipkin2.reporter.Sender; +import zipkin2.reporter.brave.AsyncZipkinSpanHandler; import org.springframework.web.client.RestTemplate; @@ -49,9 +51,9 @@ public class RestTemplateSenderTest { @Rule public MockWebServer server = new MockWebServer(); - String endpoint = this.server.url("/api/v2/spans").toString(); + String baseUrl = "http://localhost:" + this.server.getPort(); - RestTemplateSender sender = new RestTemplateSender(new RestTemplate(), this.endpoint, + RestTemplateSender sender = new RestTemplateSender(new RestTemplate(), this.baseUrl, JSON_V2); /** @@ -71,7 +73,7 @@ public class RestTemplateSenderTest { @Test public void proto3() throws Exception { this.server.enqueue(new MockResponse()); - this.sender = new RestTemplateSender(new RestTemplate(), this.endpoint, PROTO3); + this.sender = new RestTemplateSender(new RestTemplate(), this.baseUrl, PROTO3); send(SPAN).execute(); @@ -83,6 +85,19 @@ public class RestTemplateSenderTest { .containsExactly(SpanBytesEncoder.PROTO3.encode(SPAN)); } + /** + * The output of toString() on {@link Sender} implementations appears in thread names + * created by {@link AsyncZipkinSpanHandler}. Since thread names are likely to be + * exposed in logs and other monitoring tools, care should be taken to ensure the + * toString() output is a reasonable length and does not contain sensitive + * information. + */ + @Test + public void toStringContainsOnlySenderTypeAndEndpoint() { + assertThat(sender.toString()) + .isEqualTo("RestTemplateSender{" + baseUrl + "/api/v2/spans}"); + } + Call send(Span... spans) { SpanBytesEncoder bytesEncoder = this.sender.encoding() == Encoding.JSON ? SpanBytesEncoder.JSON_V2 : SpanBytesEncoder.PROTO3;