@Override public boolean isSampled(Span span) { if (span instanceof SpanWrapper) { span = ((SpanWrapper) span).unwrap(Span.class); } if (span instanceof io.jaegertracing.internal.JaegerSpan) { final io.jaegertracing.internal.JaegerSpan jaegerSpan = (io.jaegertracing.internal.JaegerSpan) span; return jaegerSpan.context().isSampled(); } return false; } }
public static io.jaegertracing.thriftjava.Span convertSpan(JaegerSpan jaegerSpan) { JaegerSpanContext context = jaegerSpan.context(); boolean oneChildOfParent = jaegerSpan.getReferences().size() == 1 && References.CHILD_OF.equals(jaegerSpan.getReferences().get(0).getType()); List<SpanRef> references = oneChildOfParent ? Collections.<SpanRef>emptyList() : buildReferences(jaegerSpan.getReferences()); return new io.jaegertracing.thriftjava.Span( context.getTraceIdLow(), context.getTraceIdHigh(), context.getSpanId(), oneChildOfParent ? context.getParentId() : 0, jaegerSpan.getOperationName(), context.getFlags(), jaegerSpan.getStart(), jaegerSpan.getDuration() ) .setReferences(references) .setTags(buildTags(jaegerSpan.getTags())) .setLogs(buildLogs(jaegerSpan.getLogs())); }
@Test public void testThatNewChildSpanIsCreatedWhenParentIsProvided() throws MalformedURLException { final BookStoreService service = createJaxWsService(new Configurator() { @Override public void configure(final JaxWsProxyFactoryBean factory) { factory.getFeatures().add(new OpenTracingClientFeature(tracer)); } }); assertThat(service.getBooks().size(), equalTo(2)); assertThat(TestSender.getAllSpans().size(), equalTo(3)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(0).getReferences(), not(empty())); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("POST /BookStore")); assertThat(TestSender.getAllSpans().get(2).getOperationName(), equalTo("POST http://localhost:" + PORT + "/BookStore")); }
@Test public void testThatNewSpanIsCreatedWhenNotProvided() throws MalformedURLException { final BookStoreService service = createJaxWsService(); assertThat(service.getBooks().size(), equalTo(2)); assertThat(TestSender.getAllSpans().size(), equalTo(2)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("POST /BookStore")); }
Restriction restriction = restrictionManager.getRestriction(jaegerSpan.getServiceName(), key); boolean truncated = false; String prevItem = null; metrics.baggageUpdateFailure.inc(1); logFields(jaegerSpan, key, value, prevItem, truncated, restriction.isKeyAllowed()); return jaegerSpan.context(); metrics.baggageTruncate.inc(1); prevItem = jaegerSpan.getBaggageItem(key); logFields(jaegerSpan, key, value, prevItem, truncated, restriction.isKeyAllowed()); metrics.baggageUpdateSuccess.inc(1); return jaegerSpan.context().withBaggageItem(key, value);
private void logFields(JaegerSpan jaegerSpan, String key, String value, String prevItem, boolean truncated, boolean valid) { if (!jaegerSpan.context().isSampled()) { return; } Map<String, String> fields = new HashMap<String, String>(); fields.put("event", "baggage"); fields.put("key", key); fields.put("value", value); if (prevItem != null) { fields.put("override", "true"); } if (truncated) { fields.put("truncated", "true"); } if (!valid) { fields.put("invalid", "true"); } jaegerSpan.log(fields); } }
@Override protected boolean matchesSafely(JaegerSpan item) { if (!name.equals(item.getOperationName())) { return false; } if (matcher != null) { return matcher.matches(item.getLogs()); } return true; } });
@Test public void testThatCurrentSpanIsAnnotatedWithKeyValue() { final JaegerSpanContext spanId = fromRandom(); final Response r = withTrace(createWebClient("/bookstore/book/1"), spanId).get(); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(TestSender.getAllSpans().size(), equalTo(1)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("GET /bookstore/book/1")); assertThat(TestSender.getAllSpans().get(0).getTags(), hasItem("book-id", "1")); }
public String getServiceName() { synchronized (this) { return this.getTracer().getServiceName(); } }
public JaegerSpan createSpan( JaegerTracer tracer, String operationName, JaegerSpanContext context, long startTimeMicroseconds, long startTimeNanoTicks, boolean computeDurationViaNanoTicks, Map<String, Object> tags, List<Reference> references) { return new JaegerSpan( tracer, operationName, context, startTimeMicroseconds, startTimeNanoTicks, computeDurationViaNanoTicks, tags, references); }
@Test public void testThatNewChildSpanIsCreatedWhenParentIsProvided() { final Response r = createWebClient("/bookstore/books", openTracingClientProvider).get(); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(TestSender.getAllSpans().size(), equalTo(3)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(0).getReferences(), not(empty())); }
@Test public void testThatNewSpanIsCreatedWhenNotProvidedUsingAsyncClient() throws Exception { final WebClient client = createWebClient("/bookstore/books", openTracingClientProvider); final Future<Response> f = client.async().get(); final Response r = f.get(1, TimeUnit.SECONDS); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(TestSender.getAllSpans().size(), equalTo(3)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("GET /bookstore/books")); assertThat(TestSender.getAllSpans().get(2).getOperationName(), equalTo("GET " + client.getCurrentURI())); }
@Override public int append(JaegerSpan span) throws SenderException { if (process == null) { process = new Process(span.getTracer().getServiceName()); process.setTags(JaegerThriftSpanConverter.buildTags(span.getTracer().tags())); processBytesSize = calculateProcessSize(process); byteBufferSize += processBytesSize;
@Test public void testThatNewInnerSpanIsCreatedUsingAsyncInvocation() { final JaegerSpanContext spanId = fromRandom(); final Response r = withTrace(createWebClient("/bookstore/books/async"), spanId).get(); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(TestSender.getAllSpans().size(), equalTo(2)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Processing books")); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("GET /bookstore/books/async")); assertThat(TestSender.getAllSpans().get(1).getReferences(), not(empty())); assertThat(TestSender.getAllSpans().get(1).getReferences().get(0).getSpanContext().getSpanId(), equalTo(spanId.getSpanId())); }
@Override public boolean isRoot(Span span) { // TODO replace with Span#unwrap once https://github.com/opentracing/opentracing-java/pull/211 is merged if (span instanceof SpanWrapper) { span = ((SpanWrapper) span).getDelegate(); } if (span instanceof io.jaegertracing.internal.JaegerSpan) { final io.jaegertracing.internal.JaegerSpan jaegerSpan = (io.jaegertracing.internal.JaegerSpan) span; return jaegerSpan.context().getParentId() == 0; } return false; }
@Test public void testThatNewSpanIsCreatedUsingAsyncInvocation() { final Response r = createWebClient("/bookstore/books/async").get(); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(TestSender.getAllSpans().size(), equalTo(2)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Processing books")); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("GET /bookstore/books/async")); }
@Test public void testThatProvidedSpanIsNotClosedWhenActive() throws MalformedURLException { final WebClient client = createWebClient("/bookstore/books", openTracingClientProvider); try (Scope span = tracer.buildSpan("test span").startActive(true)) { final Response r = client.get(); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(TestSender.getAllSpans().size(), equalTo(3)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(0).getReferences(), not(empty())); assertThat(TestSender.getAllSpans().get(1).getReferences(), not(empty())); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("GET /bookstore/books")); assertThat(TestSender.getAllSpans().get(2).getOperationName(), equalTo("GET " + client.getCurrentURI())); assertThat(TestSender.getAllSpans().get(2).getReferences(), not(empty())); } // Await till flush happens, usually every second await().atMost(Duration.ONE_SECOND).until(()-> TestSender.getAllSpans().size() == 4); assertThat(TestSender.getAllSpans().size(), equalTo(4)); assertThat(TestSender.getAllSpans().get(3).getOperationName(), equalTo("test span")); assertThat(TestSender.getAllSpans().get(3).getReferences(), empty()); }
@Override public boolean isRoot(Span span) { // TODO replace with Span#unwrap once https://github.com/opentracing/opentracing-java/pull/211 is merged if (span instanceof SpanWrapper) { span = ((SpanWrapper) span).getDelegate(); } if (span instanceof io.jaegertracing.internal.JaegerSpan) { final io.jaegertracing.internal.JaegerSpan jaegerSpan = (io.jaegertracing.internal.JaegerSpan) span; return jaegerSpan.context().getParentId() == 0; } return false; }
@Test public void testThatNewSpanIsCreatedWhenNotProvided() { final Response r = createWebClient("/bookstore/books").get(); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(TestSender.getAllSpans().size(), equalTo(2)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("GET /bookstore/books")); }
@Test public void testThatProvidedSpanIsNotDetachedWhenActiveUsingAsyncClient() throws Exception { final WebClient client = createWebClient("/bookstore/books", openTracingClientProvider); try (Scope scope = tracer.buildSpan("test span").startActive(true)) { final Future<Response> f = client.async().get(); final Response r = f.get(1, TimeUnit.HOURS); assertEquals(Status.OK.getStatusCode(), r.getStatus()); assertThat(tracer.activeSpan().context(), equalTo(scope.span().context())); assertThat(TestSender.getAllSpans().size(), equalTo(3)); assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Get Books")); assertThat(TestSender.getAllSpans().get(0).getReferences(), not(empty())); assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("GET /bookstore/books")); assertThat(TestSender.getAllSpans().get(1).getReferences(), not(empty())); assertThat(TestSender.getAllSpans().get(2).getOperationName(), equalTo("GET " + client.getCurrentURI())); assertThat(TestSender.getAllSpans().get(2).getReferences(), not(empty())); } // Await till flush happens, usually every second await().atMost(Duration.ONE_SECOND).until(()-> TestSender.getAllSpans().size() == 4); assertThat(TestSender.getAllSpans().size(), equalTo(4)); assertThat(TestSender.getAllSpans().get(3).getOperationName(), equalTo("test span")); assertThat(TestSender.getAllSpans().get(3).getReferences(), empty()); }