21
21
from logging import ERROR , WARNING
22
22
from random import randint
23
23
from time import time_ns
24
- from typing import Optional
24
+ from typing import Optional , Sequence
25
25
from unittest import mock
26
26
27
27
from opentelemetry import trace as trace_api
39
39
OTEL_TRACES_SAMPLER ,
40
40
OTEL_TRACES_SAMPLER_ARG ,
41
41
)
42
- from opentelemetry .sdk .trace import Resource , sampling
42
+ from opentelemetry .sdk .trace import Resource
43
43
from opentelemetry .sdk .trace .id_generator import RandomIdGenerator
44
+ from opentelemetry .sdk .trace .sampling import (
45
+ ALWAYS_OFF ,
46
+ ALWAYS_ON ,
47
+ Decision ,
48
+ ParentBased ,
49
+ Sampler ,
50
+ SamplingResult ,
51
+ StaticSampler ,
52
+ TraceIdRatioBased ,
53
+ )
44
54
from opentelemetry .sdk .util import ns_to_iso_str
45
55
from opentelemetry .sdk .util .instrumentation import InstrumentationInfo
46
56
from opentelemetry .test .spantestutil import (
47
57
get_span_with_dropped_attributes_events_links ,
48
58
new_tracer ,
49
59
)
50
- from opentelemetry .trace import Status , StatusCode
60
+ from opentelemetry .trace import SpanKind , Status , StatusCode
61
+ from opentelemetry .util .types import Attributes
51
62
52
63
53
64
class TestTracer (unittest .TestCase ):
@@ -139,60 +150,52 @@ def test_tracer_provider_accepts_concurrent_multi_span_processor(self):
139
150
)
140
151
141
152
142
- class CustomSampler (sampling . Sampler ):
153
+ class CustomSampler (Sampler ):
143
154
def __init__ (self ) -> None :
144
- super (). __init__ ()
155
+ pass
145
156
146
157
def get_description (self ) -> str :
147
- return super (). get_description ()
158
+ return "CustomSampler"
148
159
149
160
def should_sample (
150
161
self ,
151
- parent_context ,
152
- trace_id ,
153
- name ,
154
- kind ,
155
- attributes ,
156
- links ,
157
- trace_state ,
158
- ):
159
- return super ().should_sample (
160
- parent_context ,
161
- trace_id ,
162
- name ,
163
- kind ,
164
- attributes ,
165
- links ,
166
- trace_state ,
167
- )
168
-
169
-
170
- class CustomRatioSampler (sampling .TraceIdRatioBased ):
162
+ parent_context : Optional ["Context" ],
163
+ trace_id : int ,
164
+ name : str ,
165
+ kind : SpanKind = None ,
166
+ attributes : Attributes = None ,
167
+ links : Sequence ["Link" ] = None ,
168
+ trace_state : "TraceState" = None ,
169
+ ) -> "SamplingResult" :
170
+ return SamplingResult (
171
+ Decision .RECORD_AND_SAMPLE ,
172
+ None ,
173
+ None ,
174
+ )
175
+
176
+
177
+ class CustomRatioSampler (TraceIdRatioBased ):
171
178
def __init__ (self , ratio ):
172
179
self .ratio = ratio
173
180
super ().__init__ (ratio )
174
181
175
182
def get_description (self ) -> str :
176
- return super (). get_description ()
183
+ return "CustomSampler"
177
184
178
185
def should_sample (
179
186
self ,
180
- parent_context ,
181
- trace_id ,
182
- name ,
183
- kind ,
184
- attributes ,
185
- links ,
186
- trace_state ,
187
- ):
188
- return super ().should_sample (
189
- parent_context ,
190
- trace_id ,
191
- name ,
192
- kind ,
193
- attributes ,
194
- links ,
195
- trace_state ,
187
+ parent_context : Optional ["Context" ],
188
+ trace_id : int ,
189
+ name : str ,
190
+ kind : SpanKind = None ,
191
+ attributes : Attributes = None ,
192
+ links : Sequence ["Link" ] = None ,
193
+ trace_state : "TraceState" = None ,
194
+ ) -> "SamplingResult" :
195
+ return SamplingResult (
196
+ Decision .RECORD_AND_SAMPLE ,
197
+ None ,
198
+ None ,
196
199
)
197
200
198
201
@@ -248,7 +251,7 @@ def test_default_sampler_type(self):
248
251
self .verify_default_sampler (tracer_provider )
249
252
250
253
def test_sampler_no_sampling (self ):
251
- tracer_provider = trace .TracerProvider (sampling . ALWAYS_OFF )
254
+ tracer_provider = trace .TracerProvider (ALWAYS_OFF )
252
255
tracer = tracer_provider .get_tracer (__name__ )
253
256
254
257
# Check that the default tracer creates no-op spans if the sampler
@@ -272,10 +275,8 @@ def test_sampler_with_env(self):
272
275
# pylint: disable=protected-access
273
276
reload (trace )
274
277
tracer_provider = trace .TracerProvider ()
275
- self .assertIsInstance (tracer_provider .sampler , sampling .StaticSampler )
276
- self .assertEqual (
277
- tracer_provider .sampler ._decision , sampling .Decision .DROP
278
- )
278
+ self .assertIsInstance (tracer_provider .sampler , StaticSampler )
279
+ self .assertEqual (tracer_provider .sampler ._decision , Decision .DROP )
279
280
280
281
tracer = tracer_provider .get_tracer (__name__ )
281
282
@@ -294,7 +295,7 @@ def test_ratio_sampler_with_env(self):
294
295
# pylint: disable=protected-access
295
296
reload (trace )
296
297
tracer_provider = trace .TracerProvider ()
297
- self .assertIsInstance (tracer_provider .sampler , sampling . ParentBased )
298
+ self .assertIsInstance (tracer_provider .sampler , ParentBased )
298
299
self .assertEqual (tracer_provider .sampler ._root .rate , 0.25 )
299
300
300
301
@mock .patch .dict (
@@ -453,9 +454,9 @@ def test_custom_ratio_sampler_with_env_multiple_entry_points(
453
454
self .assertIsInstance (tracer_provider .sampler , CustomSampler )
454
455
455
456
def verify_default_sampler (self , tracer_provider ):
456
- self .assertIsInstance (tracer_provider .sampler , sampling . ParentBased )
457
+ self .assertIsInstance (tracer_provider .sampler , ParentBased )
457
458
# pylint: disable=protected-access
458
- self .assertEqual (tracer_provider .sampler ._root , sampling . ALWAYS_ON )
459
+ self .assertEqual (tracer_provider .sampler ._root , ALWAYS_ON )
459
460
460
461
461
462
class TestSpanCreation (unittest .TestCase ):
@@ -950,7 +951,7 @@ def test_sampling_attributes(self):
950
951
"attr-in-both" : "decision-attr" ,
951
952
}
952
953
tracer_provider = trace .TracerProvider (
953
- sampling . StaticSampler (sampling . Decision .RECORD_AND_SAMPLE )
954
+ StaticSampler (Decision .RECORD_AND_SAMPLE )
954
955
)
955
956
956
957
self .tracer = tracer_provider .get_tracer (__name__ )
0 commit comments