From ea8918a29867ffa8b5e941b89fedead00bc09df2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Neum=C3=BCller?= Date: Mon, 7 Oct 2019 16:36:18 +0200 Subject: [PATCH 1/2] Move util.time_ns to API. Since we now have timestamp parameters in the API, we should also have a function that obtains matching arguments there. --- opentelemetry-api/src/opentelemetry/util/__init__.py | 12 ++++++++++++ .../src/opentelemetry/sdk/trace/__init__.py | 7 ++++--- .../src/opentelemetry/sdk/trace/export/__init__.py | 6 +++--- opentelemetry-sdk/src/opentelemetry/sdk/util.py | 10 ---------- opentelemetry-sdk/tests/trace/test_trace.py | 6 +++--- 5 files changed, 22 insertions(+), 19 deletions(-) create mode 100644 opentelemetry-api/src/opentelemetry/util/__init__.py diff --git a/opentelemetry-api/src/opentelemetry/util/__init__.py b/opentelemetry-api/src/opentelemetry/util/__init__.py new file mode 100644 index 00000000000..cbf36d4c05a --- /dev/null +++ b/opentelemetry-api/src/opentelemetry/util/__init__.py @@ -0,0 +1,12 @@ +import time + +# Since we want API users to be able to provide timestamps, +# this needs to be in the API. + +try: + time_ns = time.time_ns +# Python versions < 3.7 +except AttributeError: + + def time_ns() -> int: + return int(time.time() * 1e9) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index f4124e36949..a4b25fcf58c 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -22,6 +22,7 @@ from opentelemetry import trace as trace_api from opentelemetry.context import Context from opentelemetry.sdk import util +from opentelemetry.util import time_ns from opentelemetry.sdk.util import BoundedDict, BoundedList from opentelemetry.util import types @@ -205,7 +206,7 @@ def add_event( ) -> None: if attributes is None: attributes = Span.empty_attributes - self.add_lazy_event(trace_api.Event(name, util.time_ns(), attributes)) + self.add_lazy_event(trace_api.Event(name, time_ns(), attributes)) def add_lazy_event(self, event: trace_api.Event) -> None: with self._lock: @@ -249,7 +250,7 @@ def start(self, start_time: int = None): has_started = self.start_time is not None if not has_started: self.start_time = ( - start_time if start_time is not None else util.time_ns() + start_time if start_time is not None else time_ns() ) if has_started: logger.warning("Calling start() on a started span.") @@ -265,7 +266,7 @@ def end(self, end_time: int = None): has_ended = self.end_time is not None if not has_ended: self.end_time = ( - end_time if end_time is not None else util.time_ns() + end_time if end_time is not None else time_ns() ) if has_ended: logger.warning("Calling end() on an ended span.") diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py index 2f42c19c393..ce362813ec3 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py @@ -19,7 +19,7 @@ from enum import Enum from opentelemetry.context import Context -from opentelemetry.sdk import util +from opentelemetry.util import time_ns from .. import Span, SpanProcessor @@ -163,9 +163,9 @@ def worker(self): break # substract the duration of this export call to the next timeout - start = util.time_ns() + start = time_ns() self.export() - end = util.time_ns() + end = time_ns() duration = (end - start) / 1e9 timeout = self.schedule_delay_millis / 1e3 - duration diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/util.py b/opentelemetry-sdk/src/opentelemetry/sdk/util.py index c2df2b3f4e8..cd3899c0947 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/util.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/util.py @@ -14,7 +14,6 @@ import datetime import threading -import time from collections import OrderedDict, deque try: @@ -26,15 +25,6 @@ from collections import MutableMapping from collections import Sequence -try: - time_ns = time.time_ns -# Python versions < 3.7 -except AttributeError: - - def time_ns(): - return int(time.time() * 1e9) - - def ns_to_iso_str(nanoseconds): """Get an ISO 8601 string from time_ns value.""" ts = datetime.datetime.utcfromtimestamp(nanoseconds / 1e9) diff --git a/opentelemetry-sdk/tests/trace/test_trace.py b/opentelemetry-sdk/tests/trace/test_trace.py index 378534453c2..88a0185df14 100644 --- a/opentelemetry-sdk/tests/trace/test_trace.py +++ b/opentelemetry-sdk/tests/trace/test_trace.py @@ -16,8 +16,8 @@ from unittest import mock from opentelemetry import trace as trace_api -from opentelemetry.sdk import trace, util - +from opentelemetry.sdk import trace +from opentelemetry.util import time_ns class TestTracer(unittest.TestCase): def test_extends_api(self): @@ -174,7 +174,7 @@ def test_span_members(self): # events root.add_event("event0") root.add_event("event1", {"name": "birthday"}) - now = util.time_ns() + now = time_ns() root.add_lazy_event( trace_api.Event("event2", now, {"name": "hello"}) ) From ddad100b00edc126b9ab3e6f5ddb01363d63c8e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Neum=C3=BCller?= Date: Mon, 7 Oct 2019 17:00:05 +0200 Subject: [PATCH 2/2] Fix lint. --- opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py | 7 ++----- opentelemetry-sdk/src/opentelemetry/sdk/util.py | 1 + opentelemetry-sdk/tests/trace/test_trace.py | 1 + 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index a4b25fcf58c..1cee1933e25 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -22,9 +22,8 @@ from opentelemetry import trace as trace_api from opentelemetry.context import Context from opentelemetry.sdk import util -from opentelemetry.util import time_ns from opentelemetry.sdk.util import BoundedDict, BoundedList -from opentelemetry.util import types +from opentelemetry.util import time_ns, types logger = logging.getLogger(__name__) @@ -265,9 +264,7 @@ def end(self, end_time: int = None): raise RuntimeError("Calling end() on a not started span.") has_ended = self.end_time is not None if not has_ended: - self.end_time = ( - end_time if end_time is not None else time_ns() - ) + self.end_time = end_time if end_time is not None else time_ns() if has_ended: logger.warning("Calling end() on an ended span.") return diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/util.py b/opentelemetry-sdk/src/opentelemetry/sdk/util.py index cd3899c0947..da6ada90c32 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/util.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/util.py @@ -25,6 +25,7 @@ from collections import MutableMapping from collections import Sequence + def ns_to_iso_str(nanoseconds): """Get an ISO 8601 string from time_ns value.""" ts = datetime.datetime.utcfromtimestamp(nanoseconds / 1e9) diff --git a/opentelemetry-sdk/tests/trace/test_trace.py b/opentelemetry-sdk/tests/trace/test_trace.py index 88a0185df14..dc593a9d62f 100644 --- a/opentelemetry-sdk/tests/trace/test_trace.py +++ b/opentelemetry-sdk/tests/trace/test_trace.py @@ -19,6 +19,7 @@ from opentelemetry.sdk import trace from opentelemetry.util import time_ns + class TestTracer(unittest.TestCase): def test_extends_api(self): tracer = trace.Tracer()