File tree Expand file tree Collapse file tree 3 files changed +20
-6
lines changed
opentelemetry-api/src/opentelemetry/trace
src/opentelemetry/sdk/trace Expand file tree Collapse file tree 3 files changed +20
-6
lines changed Original file line number Diff line number Diff line change @@ -142,7 +142,7 @@ class SpanKind(enum.Enum):
142
142
class Span :
143
143
"""A span represents a single operation within a trace."""
144
144
145
- def start (self ) -> None :
145
+ def start (self , start_time : int = None ) -> None :
146
146
"""Sets the current time as the span's start time.
147
147
148
148
Each span represents a single operation. The span's start time is the
@@ -152,7 +152,7 @@ def start(self) -> None:
152
152
implementations are free to ignore or raise on further calls.
153
153
"""
154
154
155
- def end (self ) -> None :
155
+ def end (self , end_time : int = None ) -> None :
156
156
"""Sets the current time as the span's end time.
157
157
158
158
The span's end time is the wall time at which the operation finished.
Original file line number Diff line number Diff line change @@ -242,27 +242,31 @@ def add_lazy_link(self, link: "trace_api.Link") -> None:
242
242
return
243
243
self .links .append (link )
244
244
245
- def start (self ):
245
+ def start (self , start_time : int = None ):
246
246
with self ._lock :
247
247
if not self .is_recording_events ():
248
248
return
249
249
has_started = self .start_time is not None
250
250
if not has_started :
251
- self .start_time = util .time_ns ()
251
+ self .start_time = (
252
+ start_time if start_time is not None else util .time_ns ()
253
+ )
252
254
if has_started :
253
255
logger .warning ("Calling start() on a started span." )
254
256
return
255
257
self .span_processor .on_start (self )
256
258
257
- def end (self ):
259
+ def end (self , end_time : int = None ):
258
260
with self ._lock :
259
261
if not self .is_recording_events ():
260
262
return
261
263
if self .start_time is None :
262
264
raise RuntimeError ("Calling end() on a not started span." )
263
265
has_ended = self .end_time is not None
264
266
if not has_ended :
265
- self .end_time = util .time_ns ()
267
+ self .end_time = (
268
+ end_time if end_time is not None else util .time_ns ()
269
+ )
266
270
if has_ended :
267
271
logger .warning ("Calling end() on an ended span." )
268
272
return
Original file line number Diff line number Diff line change @@ -234,6 +234,16 @@ def test_start_span(self):
234
234
span .start ()
235
235
self .assertEqual (start_time , span .start_time )
236
236
237
+ def test_span_override_start_and_end_time (self ):
238
+ """Span sending custom start_time and end_time values"""
239
+ span = trace .Span ("name" , mock .Mock (spec = trace_api .SpanContext ))
240
+ start_time = 123
241
+ span .start (start_time )
242
+ self .assertEqual (start_time , span .start_time )
243
+ end_time = 456
244
+ span .end (end_time )
245
+ self .assertEqual (end_time , span .end_time )
246
+
237
247
def test_ended_span (self ):
238
248
""""Events, attributes are not allowed after span is ended"""
239
249
tracer = trace .Tracer ("test_ended_span" )
You can’t perform that action at this time.
0 commit comments