Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 250b9fa

Browse files
hectorhdzgreyang
authored andcommitted
Span add override parameters for start_time and end_time (open-telemetry#179)
1 parent e523140 commit 250b9fa

File tree

3 files changed

+20
-6
lines changed

3 files changed

+20
-6
lines changed

opentelemetry-api/src/opentelemetry/trace/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ class SpanKind(enum.Enum):
142142
class Span:
143143
"""A span represents a single operation within a trace."""
144144

145-
def start(self) -> None:
145+
def start(self, start_time: int = None) -> None:
146146
"""Sets the current time as the span's start time.
147147
148148
Each span represents a single operation. The span's start time is the
@@ -152,7 +152,7 @@ def start(self) -> None:
152152
implementations are free to ignore or raise on further calls.
153153
"""
154154

155-
def end(self) -> None:
155+
def end(self, end_time: int = None) -> None:
156156
"""Sets the current time as the span's end time.
157157
158158
The span's end time is the wall time at which the operation finished.

opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -242,27 +242,31 @@ def add_lazy_link(self, link: "trace_api.Link") -> None:
242242
return
243243
self.links.append(link)
244244

245-
def start(self):
245+
def start(self, start_time: int = None):
246246
with self._lock:
247247
if not self.is_recording_events():
248248
return
249249
has_started = self.start_time is not None
250250
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+
)
252254
if has_started:
253255
logger.warning("Calling start() on a started span.")
254256
return
255257
self.span_processor.on_start(self)
256258

257-
def end(self):
259+
def end(self, end_time: int = None):
258260
with self._lock:
259261
if not self.is_recording_events():
260262
return
261263
if self.start_time is None:
262264
raise RuntimeError("Calling end() on a not started span.")
263265
has_ended = self.end_time is not None
264266
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+
)
266270
if has_ended:
267271
logger.warning("Calling end() on an ended span.")
268272
return

opentelemetry-sdk/tests/trace/test_trace.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,16 @@ def test_start_span(self):
234234
span.start()
235235
self.assertEqual(start_time, span.start_time)
236236

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+
237247
def test_ended_span(self):
238248
""""Events, attributes are not allowed after span is ended"""
239249
tracer = trace.Tracer("test_ended_span")

0 commit comments

Comments
 (0)