mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-29 05:04:05 +08:00
93 lines
1.9 KiB
Python
93 lines
1.9 KiB
Python
from ddtrace import Tracer
|
|
import pytest
|
|
|
|
from .test_tracer import DummyWriter
|
|
|
|
|
|
@pytest.fixture
|
|
def tracer():
|
|
tracer = Tracer()
|
|
tracer.writer = DummyWriter()
|
|
return tracer
|
|
|
|
|
|
def test_tracer_context(benchmark, tracer):
|
|
def func(tracer):
|
|
with tracer.trace('a', service='s', resource='r', span_type='t'):
|
|
pass
|
|
|
|
benchmark(func, tracer)
|
|
|
|
|
|
def test_tracer_wrap_staticmethod(benchmark, tracer):
|
|
class Foo(object):
|
|
@staticmethod
|
|
@tracer.wrap()
|
|
def func():
|
|
return 0
|
|
|
|
f = Foo()
|
|
benchmark(f.func)
|
|
|
|
|
|
def test_tracer_wrap_classmethod(benchmark, tracer):
|
|
class Foo(object):
|
|
@classmethod
|
|
@tracer.wrap()
|
|
def func(cls):
|
|
return 0
|
|
|
|
f = Foo()
|
|
benchmark(f.func)
|
|
|
|
|
|
def test_tracer_wrap_instancemethod(benchmark, tracer):
|
|
class Foo(object):
|
|
@tracer.wrap()
|
|
def func(self):
|
|
return 0
|
|
|
|
f = Foo()
|
|
benchmark(f.func)
|
|
|
|
|
|
def test_tracer_start_span(benchmark, tracer):
|
|
benchmark(tracer.start_span, 'benchmark')
|
|
|
|
|
|
def test_tracer_start_finish_span(benchmark, tracer):
|
|
def func(tracer):
|
|
s = tracer.start_span('benchmark')
|
|
s.finish()
|
|
|
|
benchmark(func, tracer)
|
|
|
|
|
|
def test_trace_simple_trace(benchmark, tracer):
|
|
def func(tracer):
|
|
with tracer.trace('parent'):
|
|
for i in range(5):
|
|
with tracer.trace('child') as c:
|
|
c.set_tag('i', i)
|
|
|
|
benchmark(func, tracer)
|
|
|
|
|
|
def test_tracer_large_trace(benchmark, tracer):
|
|
import random
|
|
|
|
# generate trace with 1024 spans
|
|
@tracer.wrap()
|
|
def func(tracer, level=0):
|
|
span = tracer.current_span()
|
|
|
|
# do some work
|
|
num = random.randint(1, 10)
|
|
span.set_tag('num', num)
|
|
|
|
if level < 10:
|
|
func(tracer, level + 1)
|
|
func(tracer, level + 1)
|
|
|
|
benchmark(func, tracer)
|