def make_zipkin_spans(spans):
    zipkin_spans = []
    for span in spans:
        endpoint = make_endpoint(
            ipv4=span.tracer.ip_address,
            port=0,  # span.port,
            service_name=span.tracer.service_name)
        # TODO extend Zipkin Thrift and pass endpoint once only
        for event in span.logs:
            event.host = endpoint
        with span.update_lock:
            add_zipkin_annotations(span=span, endpoint=endpoint)
            hi, lo = extract_from_trace_id(span.trace_id)
            zipkin_span = zipkin_types.Span(
                trace_id=id_to_int(lo),
                trace_id_high=id_to_int(hi),
                name=span.operation_name,
                id=id_to_int(span.span_id),
                parent_id=id_to_int(span.parent_id) or None,
                annotations=span.logs,
                binary_annotations=span.tags,
                debug=span.is_debug(),
                timestamp=timestamp_micros(span.start_time),
                duration=timestamp_micros(span.end_time - span.start_time))
        zipkin_spans.append(zipkin_span)
    return zipkin_spans
예제 #2
0
def test_large_ids(tracer):
    def serialize(span_id):
        parent_ctx = SpanContext(trace_id=span_id,
                                 span_id=span_id,
                                 parent_id=0,
                                 flags=1)
        parent = Span(context=parent_ctx, operation_name='x', tracer=tracer)
        span = tracer.start_span(operation_name='x',
                                 references=child_of(parent.context))
        span.finish()
        _marshall_span(span)

    trace_id = 0
    serialize(trace_id)
    assert thrift.id_to_int(trace_id) == 0

    trace_id = 0x77fd53dc6b437681
    serialize(trace_id)
    assert thrift.id_to_int(trace_id) == 0x77fd53dc6b437681

    trace_id = 0x7fffffffffffffff
    serialize(trace_id)
    assert thrift.id_to_int(trace_id) == 0x7fffffffffffffff

    trace_id = 0x8000000000000000
    serialize(trace_id)
    assert thrift.id_to_int(trace_id) == -0x8000000000000000

    trace_id = 0x97fd53dc6b437681
    serialize(trace_id)

    trace_id = (1 << 64) - 1
    assert trace_id == 0xffffffffffffffff
    serialize(trace_id)
    assert thrift.id_to_int(trace_id) == -1
예제 #3
0
def test_large_ids(tracer):

    class TestTrans(TMemoryBuffer):
        def now_reading(self):
            """
            Thrift TMemoryBuffer is not read-able AND write-able,
            it's one or the other (really? yes.). This will convert
            us from write-able to read-able.
            """
            self._buffer = StringIO(self.getvalue())

    def serialize(span_id):
        parent = Span(trace_id=span_id, span_id=span_id,
                      parent_id=0, flags=1, operation_name='x',
                      tracer=tracer)
        span = tracer.start_span(operation_name='x', parent=parent)
        span.finish()
        spans = thrift.make_zipkin_spans([span])

        # write and read them to test encoding
        args = Agent.emitZipkinBatch_args(spans)
        t = TestTrans()
        prot = TCompactProtocol(t)
        args.write(prot)
        t.now_reading()
        args.read(prot)

    trace_id = 0
    serialize(trace_id)
    assert thrift.id_to_int(trace_id) == 0

    trace_id = 0x77fd53dc6b437681
    serialize(trace_id)
    assert thrift.id_to_int(trace_id) == 0x77fd53dc6b437681

    trace_id = 0x7fffffffffffffff
    serialize(trace_id)
    assert thrift.id_to_int(trace_id) == 0x7fffffffffffffff

    trace_id = 0x8000000000000000
    serialize(trace_id)
    assert thrift.id_to_int(trace_id) == -0x8000000000000000

    trace_id = 0x97fd53dc6b437681
    serialize(trace_id)

    trace_id = (1L << 64) - 1
    assert trace_id == 0xffffffffffffffffL
    serialize(trace_id)
    assert thrift.id_to_int(trace_id) == -1
예제 #4
0
def test_large_ids(tracer):
    def serialize(trace_id, span_id):
        """Checks that there are no exceptions during marshalling."""
        parent_ctx = SpanContext(trace_id=trace_id,
                                 span_id=span_id,
                                 parent_id=0,
                                 flags=1)
        parent = Span(context=parent_ctx, operation_name='x', tracer=tracer)
        span = tracer.start_span(operation_name='x',
                                 references=child_of(parent.context))
        span.finish()
        _marshall_span(span)

    trace_id = 0x77fd53dc6b437681
    serialize(trace_id, trace_id)
    assert thrift.id_to_int(trace_id) == 0x77fd53dc6b437681

    trace_id = 0x7fffffffffffffff
    serialize(trace_id, trace_id)
    assert thrift.id_to_int(trace_id) == 0x7fffffffffffffff

    trace_id = 0x8000000000000000
    serialize(trace_id, trace_id)
    assert thrift.id_to_int(trace_id) == -0x8000000000000000

    trace_id = 0x97fd53dc6b437681
    serialize(trace_id, trace_id)

    trace_id = (1 << 64) - 1
    assert trace_id == 0xffffffffffffffff
    serialize(trace_id, trace_id)
    assert thrift.id_to_int(trace_id) == -1

    trace_id = (1 << 128) - 1
    span_id = 0xffffffffffffffff
    assert trace_id == 0xffffffffffffffffffffffffffffffff
    serialize(trace_id, span_id)
    assert thrift._id_to_low(trace_id) == 0xffffffffffffffff
    assert thrift._id_to_high(trace_id) == 0xffffffffffffffff

    trace_id = 0xfb34678b8864f051e5c8c603484e57
    span_id = 0x77fd53dc6b437681
    serialize(trace_id, span_id)
    assert thrift._id_to_low(trace_id) == 0x51e5c8c603484e57
    assert thrift._id_to_high(trace_id) == 0xfb34678b8864f0
예제 #5
0
def test_none_ids():
    assert thrift.id_to_int(None) is None
    assert thrift._id_to_low(None) is None
    assert thrift._id_to_high(None) is None