Skip to content

Commit 27e9f3f

Browse files
committed
Do not record non-sampled spans
Fixes #108
1 parent 1765cbd commit 27e9f3f

File tree

2 files changed

+46
-5
lines changed

2 files changed

+46
-5
lines changed

lightstep/recorder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ def record_span(self, span):
132132
133133
Will drop a previously-added span if the limit has been reached.
134134
"""
135-
if self._disabled_runtime:
135+
if self._disabled_runtime or not span.context.sampled:
136136
return
137137

138138
# Lazy-init the flush loop (if need be).

tests/recorder_test.py

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,48 @@ def recorder(request):
5555
yield lightstep.recorder.Recorder(**runtime_args)
5656

5757

58+
def test_non_sampled_span():
59+
60+
recorder = lightstep.recorder.Recorder(
61+
**{
62+
"collector_encryption": "none",
63+
"collector_host": "localhost",
64+
"collector_port": 9998,
65+
"access_token": "{your_access_token}",
66+
"component_name": "python/runtime_test",
67+
"periodic_flush_seconds": 0,
68+
"use_thrift": True,
69+
"use_http": False,
70+
}
71+
)
72+
73+
mock_connection = MockConnection()
74+
mock_connection.open()
75+
76+
non_sampled_span = BasicSpan(
77+
lightstep.tracer._LightstepTracer(False, recorder, None),
78+
operation_name="non_sampled",
79+
context=SpanContext(trace_id=1, span_id=1, sampled=False),
80+
start_time=time.time(),
81+
)
82+
non_sampled_span.finish()
83+
84+
sampled_span = BasicSpan(
85+
lightstep.tracer._LightstepTracer(False, recorder, None),
86+
operation_name="sampled",
87+
context=SpanContext(trace_id=1, span_id=2, sampled=True),
88+
start_time=time.time(),
89+
)
90+
sampled_span.finish()
91+
recorder.record_span(non_sampled_span)
92+
recorder.record_span(sampled_span)
93+
94+
recorder.flush(mock_connection)
95+
96+
for span_record in mock_connection.reports[0].span_records:
97+
assert span_record.span_name == "sampled"
98+
99+
58100
def test_default_tags_set_correctly(recorder):
59101
mock_connection = MockConnection()
60102
mock_connection.open()
@@ -80,7 +122,7 @@ def test_default_tags_set_correctly(recorder):
80122
"access_token": "{your_access_token}",
81123
"component_name": "python/runtime_test",
82124
"periodic_flush_seconds": 0,
83-
"tags": {"lightstep.hostname": "hostname",},
125+
"tags": {"lightstep.hostname": "hostname"},
84126
}
85127
new_recorder = lightstep.recorder.Recorder(**runtime_args)
86128
for tag in new_recorder._runtime.tags:
@@ -119,7 +161,7 @@ def test_shutdown_twice(recorder):
119161
recorder.shutdown()
120162
recorder.shutdown()
121163
except Exception as error:
122-
self.fail("Unexpected exception raised: {}".format(error))
164+
pytest.fail("Unexpected exception raised: {}".format(error))
123165

124166

125167
# ------------
@@ -225,7 +267,7 @@ def test_exception_formatting(recorder):
225267
assert len(recorder._span_records) == 1
226268
assert recorder.flush(mock_connection)
227269
spans = recorder.converter.get_span_records(mock_connection.reports[1])
228-
270+
229271
if hasattr(spans[0], "log_records"):
230272
assert len(spans[0].log_records) == 1
231273
assert len(spans[0].log_records[0].fields) == 3
@@ -251,4 +293,3 @@ def test_exception_formatting(recorder):
251293
assert field.string_value == ""
252294
else:
253295
raise AttributeError("unexpected field: %s".format(field.key))
254-

0 commit comments

Comments
 (0)