Search in sources :

Example 1 with TimedEvent

use of io.opencensus.trace.export.SpanData.TimedEvent in project instrumentation-java by census-instrumentation.

the class TracezZPageHandler method emitSingleSpan.

// Emits the internal html for a single {@link SpanData}.
@SuppressWarnings("deprecation")
private static void emitSingleSpan(Formatter formatter, SpanData span) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(TimeUnit.SECONDS.toMillis(span.getStartTimestamp().getSeconds()));
    long microsField = TimeUnit.NANOSECONDS.toMicros(span.getStartTimestamp().getNanos());
    String elapsedSecondsStr = span.getEndTimestamp() != null ? String.format("%13.6f", durationToNanos(span.getEndTimestamp().subtractTimestamp(span.getStartTimestamp())) * 1.0e-9) : String.format("%13s", " ");
    SpanContext spanContext = span.getContext();
    formatter.format("<b>%04d/%02d/%02d-%02d:%02d:%02d.%06d %s     TraceId: <b style=\"color:%s;\">%s</b> " + "SpanId: %s ParentSpanId: %s</b>%n", calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1, calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND), microsField, elapsedSecondsStr, spanContext.getTraceOptions().isSampled() ? SAMPLED_TRACE_ID_COLOR : NOT_SAMPLED_TRACE_ID_COLOR, BaseEncoding.base16().lowerCase().encode(spanContext.getTraceId().getBytes()), BaseEncoding.base16().lowerCase().encode(spanContext.getSpanId().getBytes()), BaseEncoding.base16().lowerCase().encode(span.getParentSpanId() == null ? SpanId.INVALID.getBytes() : span.getParentSpanId().getBytes()));
    int lastEntryDayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
    Timestamp lastTimestampNanos = span.getStartTimestamp();
    TimedEvents<Annotation> annotations = span.getAnnotations();
    TimedEvents<io.opencensus.trace.NetworkEvent> networkEvents = span.getNetworkEvents();
    List<TimedEvent<?>> timedEvents = new ArrayList<TimedEvent<?>>(annotations.getEvents());
    timedEvents.addAll(networkEvents.getEvents());
    Collections.sort(timedEvents, new TimedEventComparator());
    for (TimedEvent<?> event : timedEvents) {
        // Special printing so that durations smaller than one second
        // are left padded with blanks instead of '0' characters.
        // E.g.,
        // Number                  Printout
        // ---------------------------------
        // 0.000534                  .   534
        // 1.000534                 1.000534
        long deltaMicros = TimeUnit.NANOSECONDS.toMicros(durationToNanos(event.getTimestamp().subtractTimestamp(lastTimestampNanos)));
        String deltaString;
        if (deltaMicros >= 1000000) {
            deltaString = String.format("%.6f", (deltaMicros / 1000000.0));
        } else {
            deltaString = String.format(".%6d", deltaMicros);
        }
        calendar.setTimeInMillis(TimeUnit.SECONDS.toMillis(event.getTimestamp().getSeconds()) + TimeUnit.NANOSECONDS.toMillis(event.getTimestamp().getNanos()));
        microsField = TimeUnit.NANOSECONDS.toMicros(event.getTimestamp().getNanos());
        int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
        if (dayOfYear == lastEntryDayOfYear) {
            formatter.format("%11s", "");
        } else {
            formatter.format("%04d/%02d/%02d-", calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1, calendar.get(Calendar.DAY_OF_MONTH));
            lastEntryDayOfYear = dayOfYear;
        }
        formatter.format("%02d:%02d:%02d.%06d %13s ... %s%n", calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND), microsField, deltaString, htmlEscaper().escape(event.getEvent() instanceof Annotation ? renderAnnotation((Annotation) event.getEvent()) : renderNetworkEvents((io.opencensus.trace.NetworkEvent) castNonNull(event.getEvent()))));
        lastTimestampNanos = event.getTimestamp();
    }
    Status status = span.getStatus();
    if (status != null) {
        formatter.format("%44s %s%n", "", htmlEscaper().escape(renderStatus(status)));
    }
    formatter.format("%44s %s%n", "", htmlEscaper().escape(renderAttributes(span.getAttributes().getAttributeMap())));
}
Also used : Status(io.opencensus.trace.Status) SpanContext(io.opencensus.trace.SpanContext) Calendar(java.util.Calendar) ArrayList(java.util.ArrayList) TimedEvent(io.opencensus.trace.export.SpanData.TimedEvent) Timestamp(io.opencensus.common.Timestamp) Annotation(io.opencensus.trace.Annotation)

Example 2 with TimedEvent

use of io.opencensus.trace.export.SpanData.TimedEvent in project instrumentation-java by census-instrumentation.

the class JaegerExporterHandlerTest method convertErrorSpanDataToJaegerThriftSpan.

@Test
public void convertErrorSpanDataToJaegerThriftSpan() throws SenderException {
    long startTime = 1519629870001L;
    long endTime = 1519630148002L;
    String statusMessage = "timeout";
    SpanData spanData = SpanData.create(sampleSpanContext(), SpanId.fromBytes(new byte[] { (byte) 0x7F, FF, FF, FF, FF, FF, FF, FF }), true, "test", Kind.SERVER, Timestamp.fromMillis(startTime), SpanData.Attributes.create(Collections.<String, AttributeValue>emptyMap(), 0), SpanData.TimedEvents.create(Collections.<TimedEvent<Annotation>>emptyList(), 0), SpanData.TimedEvents.create(Collections.<TimedEvent<MessageEvent>>emptyList(), 0), SpanData.Links.create(Collections.<Link>emptyList(), 0), 0, Status.DEADLINE_EXCEEDED.withDescription(statusMessage), Timestamp.fromMillis(endTime));
    handler.export(singletonList(spanData));
    verify(mockSender).send(eq(process), captor.capture());
    List<Span> spans = captor.getValue();
    assertThat(spans.size()).isEqualTo(1);
    Span span = spans.get(0);
    assertThat(span.tags.size()).isEqualTo(3);
    assertThat(span.tags).containsExactly(new Tag(JaegerExporterHandler.SPAN_KIND, TagType.STRING).setVStr("server"), new Tag(JaegerExporterHandler.STATUS_CODE, TagType.LONG).setVLong(4), new Tag(JaegerExporterHandler.STATUS_MESSAGE, TagType.STRING).setVStr(statusMessage));
}
Also used : AttributeValue(io.opencensus.trace.AttributeValue) SpanData(io.opencensus.trace.export.SpanData) TimedEvent(io.opencensus.trace.export.SpanData.TimedEvent) Tag(io.jaegertracing.thriftjava.Tag) Span(io.jaegertracing.thriftjava.Span) Link(io.opencensus.trace.Link) Test(org.junit.Test)

Aggregations

TimedEvent (io.opencensus.trace.export.SpanData.TimedEvent)2 Span (io.jaegertracing.thriftjava.Span)1 Tag (io.jaegertracing.thriftjava.Tag)1 Timestamp (io.opencensus.common.Timestamp)1 Annotation (io.opencensus.trace.Annotation)1 AttributeValue (io.opencensus.trace.AttributeValue)1 Link (io.opencensus.trace.Link)1 SpanContext (io.opencensus.trace.SpanContext)1 Status (io.opencensus.trace.Status)1 SpanData (io.opencensus.trace.export.SpanData)1 ArrayList (java.util.ArrayList)1 Calendar (java.util.Calendar)1 Test (org.junit.Test)1