@Override public int compare(List<Span> left, List<Span> right) { return right.get(0).compareTo(left.get(0)); } });
@Override protected Span adjust(Span span) { List<Annotation> annotations = new ArrayList<>(); for (Annotation a : span.annotations) { if (!a.value.equals("finagle.flush")) { annotations.add(a); } } return span.toBuilder().annotations(annotations).build(); } }
@Override public Set<String> partitionKeys(Span span) { return span.serviceNames(); } }
@Test public void spanCompleted_converts_to_zipkin_span_and_passes_it_to_zipkinSpanSender() { // given zipkin.Span zipkinSpan = zipkin.Span.builder().traceId(42).id(4242).name("foo").build(); doReturn(zipkinSpan).when(spanConverterMock).convertWingtipsSpanToZipkinSpan(any(Span.class), any(Endpoint.class), any(String.class)); // when listener.spanCompleted(spanMock); // then verify(spanConverterMock).convertWingtipsSpanToZipkinSpan(spanMock, listener.zipkinEndpoint, localComponentNamespace); verify(spanSenderMock).handleSpan(zipkinSpan); }
.selectFrom(ZIPKIN_SPANS).where(traceIdCondition) .stream() .map(r -> Span.builder() .traceId(r.getValue(ZIPKIN_SPANS.TRACE_ID)) .name(r.getValue(ZIPKIN_SPANS.NAME)) List<Span> trace = new ArrayList<>(spans.size()); for (Span s : spans) { Span.Builder span = s.toBuilder(); Pair<?> key = Pair.create(s.traceId, s.id); result.add(trace); if (!raw) Collections.sort(result, (left, right) -> right.get(0).compareTo(left.get(0))); return result;
.from(ZIPKIN_SPANS).where(traceIdCondition) .stream() .map(r -> zipkin.Span.builder() .traceIdHigh(maybeGet(r, ZIPKIN_SPANS.TRACE_ID_HIGH, 0L)) .traceId(r.getValue(ZIPKIN_SPANS.TRACE_ID)) for (List<zipkin.Span> spans : spansWithoutAnnotations.values()) { for (zipkin.Span s : spans) { zipkin.Span.Builder span = s.toBuilder(); Row3<Long, Long, Long> key = row(s.traceIdHigh, s.traceId, s.id);
@Override public void report(zipkin.Span span) { checkNotNull(span, "Null span"); if (logger.isLoggable(Level.INFO)) { logger.info(span.toString()); } } }
static zipkin.Span zipkinSpan(long traceId, String spanName) { return zipkin.Span.builder().traceId(traceId).id(traceId).name(spanName).build(); }
protected zipkin.Span.Builder createNewZipkinSpanBuilderWithSpanPurposeAnnotations( Span wingtipsSpan, long startEpochMicros, long durationMicros, Endpoint zipkinEndpoint, String localComponentNamespace ) { zipkin.Span.Builder zsb = zipkin.Span.builder(); switch(wingtipsSpan.getSpanPurpose()) { case SERVER: zsb.addAnnotation(Annotation.create(startEpochMicros, Constants.SERVER_RECV, zipkinEndpoint)) .addAnnotation(Annotation.create(startEpochMicros + durationMicros, Constants.SERVER_SEND, zipkinEndpoint)); break; case CLIENT: zsb.addAnnotation(Annotation.create(startEpochMicros, Constants.CLIENT_SEND, zipkinEndpoint)) .addAnnotation(Annotation.create(startEpochMicros + durationMicros, Constants.CLIENT_RECV, zipkinEndpoint)); break; case LOCAL_ONLY: case UNKNOWN: // intentional fall-through: local and unknown span purpose are treated the same way zsb.addBinaryAnnotation(BinaryAnnotation.create(Constants.LOCAL_COMPONENT, localComponentNamespace, zipkinEndpoint)); break; default: logger.warn("Unhandled SpanPurpose type: " + wingtipsSpan.getSpanPurpose().name()); } return zsb; }
result.add(trace); if (!raw) Collections.sort(result, (left, right) -> right.get(0).compareTo(left.get(0))); return result;
@Override public Set<String> partitionKeys(Span span) { if (span.name.isEmpty()) return Collections.emptySet(); ImmutableSet.Builder<String> result = ImmutableSet.builder(); for (String serviceName : span.serviceNames()) { result.add(serviceName + "." + span.name); } return result.build(); } }
protected zipkin.Span.Builder createNewZipkinSpanBuilderWithSpanPurposeAnnotations( Span wingtipsSpan, long startEpochMicros, long durationMicros, Endpoint zipkinEndpoint, String localComponentNamespace ) { zipkin.Span.Builder zsb = zipkin.Span.builder(); switch(wingtipsSpan.getSpanPurpose()) { case SERVER: zsb.addAnnotation(Annotation.create(startEpochMicros, Constants.SERVER_RECV, zipkinEndpoint)) .addAnnotation(Annotation.create(startEpochMicros + durationMicros, Constants.SERVER_SEND, zipkinEndpoint)); break; case CLIENT: zsb.addAnnotation(Annotation.create(startEpochMicros, Constants.CLIENT_SEND, zipkinEndpoint)) .addAnnotation(Annotation.create(startEpochMicros + durationMicros, Constants.CLIENT_RECV, zipkinEndpoint)); break; case LOCAL_ONLY: case UNKNOWN: // intentional fall-through: local and unknown span purpose are treated the same way zsb.addBinaryAnnotation(BinaryAnnotation.create(Constants.LOCAL_COMPONENT, localComponentNamespace, zipkinEndpoint)); break; default: logger.warn("Unhandled SpanPurpose type: " + wingtipsSpan.getSpanPurpose().name()); } return zsb; }
result.add(trace); if (!raw) Collections.sort(result, (left, right) -> right.get(0).compareTo(left.get(0))); return result;
for (String serviceName : span.serviceNames()) {
MutableSpan(TraceId traceId, Time started) { this.span = Span.builder(); span.id(traceId.spanId().toLong()); if (traceId._parentId().isDefined()) { span.parentId(traceId.parentId().toLong()); } span.traceId(traceId.traceId().toLong()); if (traceId.traceIdHigh().isDefined()) { span.traceIdHigh(traceId.traceIdHigh().get().toLong()); } if (traceId.flags().isDebug()) { span.debug(true); } span.name("unknown"); this.started = started; }
zipkin.Span.Builder result = zipkin.Span.builder() .traceId(IdConversion.convertToLong(traceId)) .parentId(in.parentId() != null ? IdConversion.convertToLong(in.parentId()) : null)
@Override @Nullable public Span fromJson(JsonReader reader) throws IOException { Span.Builder result = Span.builder(); reader.beginObject(); while (reader.hasNext()) {