Skip to content
This repository was archived by the owner on Sep 17, 2025. It is now read-only.

Commit 9369932

Browse files
dhendryliyanhui1228
authored andcommitted
Moar accurate noop tracer (#207)
1 parent 6d3c862 commit 9369932

3 files changed

Lines changed: 30 additions & 6 deletions

File tree

opencensus/trace/tracers/base.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,10 @@ class NullContextManager(object):
6767
"""Empty object as a helper for faking Trace and Span when tracing is
6868
disabled.
6969
"""
70-
def __init__(self, span_id=None):
70+
def __init__(self, span_id=None, context_tracer=None):
7171
self.name = None
7272
self.span_id = span_id
73+
self.context_tracer = context_tracer
7374

7475
def __enter__(self):
7576
return self # pragma: NO COVER
@@ -78,4 +79,4 @@ def __exit__(self, exc_type, exc_value, traceback):
7879
pass # pragma: NO COVER
7980

8081
def span(self, name='span'):
81-
return NullContextManager()
82+
return NullContextManager(context_tracer=self.context_tracer)

opencensus/trace/tracers/noop_tracer.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def span(self, name='span'):
3434
:rtype: :class:`~opencensus.trace.trace_span.Span`
3535
:returns: The Span object.
3636
"""
37-
return base.NullContextManager()
37+
return base.NullContextManager(context_tracer=self)
3838

3939
def start_span(self, name='span'):
4040
"""Start a span.
@@ -45,18 +45,18 @@ def start_span(self, name='span'):
4545
:rtype: :class:`~opencensus.trace.trace_span.Span`
4646
:returns: The Span object.
4747
"""
48-
return base.NullContextManager()
48+
return base.NullContextManager(context_tracer=self)
4949

5050
def end_span(self):
5151
"""End a span. Remove the span from the span stack, and update the
5252
span_id in TraceContext as the current span_id which is the peek
5353
element in the span stack.
5454
"""
55-
return base.NullContextManager()
55+
return base.NullContextManager(context_tracer=self)
5656

5757
def current_span(self):
5858
"""Return the current span."""
59-
return base.NullContextManager()
59+
return base.NullContextManager(context_tracer=self)
6060

6161
def add_attribute_to_current_span(self, attribute_key, attribute_value):
6262
"""Add attribute to current span.

tests/unit/trace/ext/grpc/test_client_interceptor.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import mock
1818
from opencensus.trace import execution_context
1919
from opencensus.trace.ext.grpc import client_interceptor
20+
from opencensus.trace.tracers.noop_tracer import NoopTracer
2021

2122

2223
class TestOpenCensusClientInterceptor(unittest.TestCase):
@@ -95,6 +96,28 @@ def test__intercept_call_metadata_none(self):
9596

9697
self.assertEqual(expected_metadata, client_call_details.metadata)
9798

99+
def test__intercept_call_noop_tracer(self):
100+
tracer = NoopTracer()
101+
test_header = 'test header'
102+
mock_propagator = mock.Mock()
103+
mock_propagator.to_header.return_value = test_header
104+
105+
interceptor = client_interceptor.OpenCensusClientInterceptor(
106+
tracer=tracer, host_port='test')
107+
interceptor._propagator = mock_propagator
108+
mock_client_call_details = mock.Mock()
109+
mock_client_call_details.metadata = None
110+
mock_client_call_details.method = '/hello'
111+
112+
client_call_details, request_iterator, current_span = interceptor._intercept_call(
113+
mock_client_call_details,
114+
mock.Mock(),
115+
'unary_unary')
116+
117+
expected_metadata = (('grpc-trace-bin', test_header),)
118+
119+
self.assertEqual(expected_metadata, client_call_details.metadata)
120+
98121
def test__intercept_call_metadata_list(self):
99122
tracer = mock.Mock()
100123
tracer.span_context = mock.Mock()

0 commit comments

Comments
 (0)