Esempio n. 1
0
        def wrapper(*args, **kwargs):
            # Get a new current span wrapping this traced function.
            # ``get_new_span`` should retrieve parent_span if any!
            span_arg_name, current_span = get_new_span(
                f,
                args,
                kwargs,
                inspect_stack=inspect_stack,
                ignore_parent_span=ignore_parent_span,
                span_extractor=span_extractor,
                use_follows_from=use_follows_from)

            if pass_span and span_arg_name:
                kwargs[span_arg_name] = current_span
            else:
                if span_extractor:
                    kwarg_span, _ = get_span_from_kwargs(**kwargs)
                    kwargs.pop(kwarg_span, None)

                kwargs.pop(span_arg_name, None)

            current_span = adjust_span(current_span, operation_name, component,
                                       tags)

            with current_span:
                return f(*args, **kwargs)
def test_get_new_span_with_extractor_with_scope():
    opentracing.tracer = BasicTracer()
    parent_span = opentracing.tracer.start_span()

    extractor = MagicMock()
    extractor.return_value = parent_span

    ctx = '123'

    def f(ctx, extras=True):
        pass

    with opentracing.tracer.start_active_span("ignored_parent",
                                              finish_on_close=True):
        span_arg_name, using_scope_manager, span = get_new_span(
            f, [ctx], {'extras': True},
            span_extractor=extractor,
            inspect_stack=False)

    assert DEFAULT_SPAN_ARG_NAME == span_arg_name
    # span_extractor takes precedence.
    assert span.parent_id == parent_span.context.span_id
    assert using_scope_manager is False

    extractor.assert_called_with(ctx, extras=True)
Esempio n. 3
0
def test_get_new_span():
    def f():
        pass

    span_arg_name, span = get_new_span(f, [], {})

    assert DEFAULT_SPAN_ARG_NAME == span_arg_name
    assert isinstance(span, opentracing.Span)
Esempio n. 4
0
def test_get_new_span_with_failing_extractor():
    def f():
        pass

    def extractor():
        raise RuntimeError('Failed')

    span_arg_name, span = get_new_span(f, [], {}, span_extractor=extractor)

    assert DEFAULT_SPAN_ARG_NAME == span_arg_name
    assert span.parent_id is None
def test_get_new_span():
    opentracing.tracer = BasicTracer(scope_manager=NotActiveScopeManager())

    def f():
        pass

    span_arg_name, using_scope_manager, span = get_new_span(f, [], {})

    assert DEFAULT_SPAN_ARG_NAME == span_arg_name
    assert isinstance(span, opentracing.Span)
    assert using_scope_manager is False
def test_get_new_span_with_scope_manager_no_active_span():
    # BasicTracer comes with an "active" scope_manager.
    opentracing.tracer = BasicTracer()

    def f():
        pass

    span_arg_name, using_scope_manager, span = get_new_span(f, [], {})

    assert DEFAULT_SPAN_ARG_NAME == span_arg_name
    assert isinstance(span, opentracing.Span)
    assert using_scope_manager is False
def test_get_new_span_with_scope_manager():
    # BasicTracer comes with an "active" scope_manager.
    opentracing.tracer = BasicTracer()

    with opentracing.tracer.start_active_span("parent_span") as scope:

        def f():
            pass

        span_arg_name, using_scope_manager, span = get_new_span(f, [], {})

        assert DEFAULT_SPAN_ARG_NAME == span_arg_name
        assert isinstance(span, opentracing.Span)
        assert span.parent_id == scope.span.context.span_id
        assert using_scope_manager is True
def test_get_new_span_with_legacy_tracer():
    # Does not have active_span
    opentracing.tracer = LegacyTracer()

    with opentracing.tracer.start_span("parent_span") as parent_span:

        def f():
            pass

        span_arg_name, using_scope_manager, span = get_new_span(f, [], {})

        assert DEFAULT_SPAN_ARG_NAME == span_arg_name
        assert isinstance(span, opentracing.Span)
        # detected via inspect_stack (i.e. fallback).
        assert span.parent_id == parent_span.context.span_id
        assert using_scope_manager is False
Esempio n. 9
0
def test_get_new_span_with_extractor():
    opentracing.tracer = BasicTracer()
    parent_span = opentracing.tracer.start_span()

    extractor = MagicMock()
    extractor.return_value = parent_span

    ctx = '123'

    def f(ctx, extras=True):
        pass

    span_arg_name, span = get_new_span(f, [ctx], {'extras': True},
                                       span_extractor=extractor,
                                       inspect_stack=False)

    assert DEFAULT_SPAN_ARG_NAME == span_arg_name
    assert span.parent_id == parent_span.context.span_id
    extractor.assert_called_with(ctx, extras=True)
Esempio n. 10
0
def test_get_new_span_kwargs_with_scope(monkeypatch):
    opentracing.tracer = BasicTracer()
    parent_span = opentracing.tracer.start_span()

    ctx = '123'

    def f(ctx, extras=True):
        pass

    with opentracing.tracer.start_active_span("ignored_parent",
                                              finish_on_close=True):
        span_arg_name, using_scope_manager, span = get_new_span(
            f, [ctx], {
                'extras': True,
                'span': parent_span
            },
            inspect_stack=False)

    assert 'span' == span_arg_name
    # span in kwargs takes precedence.
    assert span.parent_id == parent_span.context.span_id
    assert using_scope_manager is False