From 1a67ebd576bb540b05706bd963b7097fd9a9fd99 Mon Sep 17 00:00:00 2001 From: Reiley Yang Date: Wed, 18 Sep 2019 21:58:19 -0700 Subject: [PATCH 01/10] skeleton for azure monitor exporters --- .../README.rst | 10 ++++ .../examples/trace.py | 11 +++++ ext/opentelemetry-ext-azure-monitor/setup.cfg | 46 +++++++++++++++++++ ext/opentelemetry-ext-azure-monitor/setup.py | 26 +++++++++++ .../ext/azure_monitor/__init__.py | 21 +++++++++ .../opentelemetry/ext/azure_monitor/trace.py | 25 ++++++++++ .../ext/azure_monitor/version.py | 15 ++++++ .../tests/__init__.py | 0 8 files changed, 154 insertions(+) create mode 100644 ext/opentelemetry-ext-azure-monitor/README.rst create mode 100644 ext/opentelemetry-ext-azure-monitor/examples/trace.py create mode 100644 ext/opentelemetry-ext-azure-monitor/setup.cfg create mode 100644 ext/opentelemetry-ext-azure-monitor/setup.py create mode 100644 ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/__init__.py create mode 100644 ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/trace.py create mode 100644 ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/version.py create mode 100644 ext/opentelemetry-ext-azure-monitor/tests/__init__.py diff --git a/ext/opentelemetry-ext-azure-monitor/README.rst b/ext/opentelemetry-ext-azure-monitor/README.rst new file mode 100644 index 00000000000..d8c3e160742 --- /dev/null +++ b/ext/opentelemetry-ext-azure-monitor/README.rst @@ -0,0 +1,10 @@ +OpenTelemetry Azure Monitor Exporters +===================================== + +This library provides integration with Microsoft Azure Monitor. + +References +---------- + +* `Azure Monitor `_ +* `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-azure-monitor/examples/trace.py b/ext/opentelemetry-ext-azure-monitor/examples/trace.py new file mode 100644 index 00000000000..913773e9123 --- /dev/null +++ b/ext/opentelemetry-ext-azure-monitor/examples/trace.py @@ -0,0 +1,11 @@ +from opentelemetry import trace +from opentelemetry.ext.azure_monitor import AzureMonitorSpanExporter +from opentelemetry.sdk.trace import Tracer +from opentelemetry.sdk.trace.export import SimpleExportSpanProcessor + +trace.set_preferred_tracer_implementation(lambda T: Tracer()) +tracer = trace.tracer() +tracer.add_span_processor(SimpleExportSpanProcessor(AzureMonitorSpanExporter())) + +with tracer.start_span('hello') as span: + print('Hello, World!') diff --git a/ext/opentelemetry-ext-azure-monitor/setup.cfg b/ext/opentelemetry-ext-azure-monitor/setup.cfg new file mode 100644 index 00000000000..4c5bf8426cc --- /dev/null +++ b/ext/opentelemetry-ext-azure-monitor/setup.cfg @@ -0,0 +1,46 @@ +# Copyright 2019, OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +[metadata] +name = opentelemetry-ext-azure-monitor +description = Azure Monitor integration for OpenTelemetry +long_description = file: README.rst +long_description_content_type = text/x-rst +author = OpenTelemetry Authors +author_email = cncf-opentelemetry-contributors@lists.cncf.io +url = https://github.com/open-telemetry/opentelemetry-python/ext/opentelemetry-ext-wsgi +platforms = any +license = Apache-2.0 +classifiers = + Development Status :: 3 - Alpha + Intended Audience :: Developers + License :: OSI Approved :: Apache Software License + Programming Language :: Python + Programming Language :: Python :: 3 + Programming Language :: Python :: 3.4 + Programming Language :: Python :: 3.5 + Programming Language :: Python :: 3.6 + Programming Language :: Python :: 3.7 + +[options] +python_requires = >=3.4 +package_dir= + =src +packages=find_namespace: +install_requires = + opentelemetry-api + opentelemetry-sdk + +[options.packages.find] +where = src diff --git a/ext/opentelemetry-ext-azure-monitor/setup.py b/ext/opentelemetry-ext-azure-monitor/setup.py new file mode 100644 index 00000000000..5f8afcb23a2 --- /dev/null +++ b/ext/opentelemetry-ext-azure-monitor/setup.py @@ -0,0 +1,26 @@ +# Copyright 2019, OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import os + +import setuptools + +BASE_DIR = os.path.dirname(__file__) +VERSION_FILENAME = os.path.join( + BASE_DIR, "src", "opentelemetry", "ext", "azure_monitor", "version.py" +) +PACKAGE_INFO = {} +with open(VERSION_FILENAME) as f: + exec(f.read(), PACKAGE_INFO) + +setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/__init__.py b/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/__init__.py new file mode 100644 index 00000000000..b623ef10c04 --- /dev/null +++ b/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/__init__.py @@ -0,0 +1,21 @@ +# Copyright 2019, OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +The opentelemetry-ext-azure-monitor package provides integration with +Microsoft Azure Monitor. +""" + +from .trace import AzureMonitorSpanExporter +from .version import __version__ # noqa diff --git a/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/trace.py b/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/trace.py new file mode 100644 index 00000000000..893fb1f3a6d --- /dev/null +++ b/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/trace.py @@ -0,0 +1,25 @@ +# Copyright 2019, OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from opentelemetry.sdk.trace.export import SpanExporter +from opentelemetry.sdk.trace.export import SpanExportResult + +class AzureMonitorSpanExporter(SpanExporter): + def __init__(self): + pass + + def export(self, spans): + for span in spans: + print(span) # TODO: add actual implementation here + return SpanExportResult.SUCCESS diff --git a/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/version.py b/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/version.py new file mode 100644 index 00000000000..a457c2b6651 --- /dev/null +++ b/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/version.py @@ -0,0 +1,15 @@ +# Copyright 2019, OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +__version__ = "0.1.dev0" diff --git a/ext/opentelemetry-ext-azure-monitor/tests/__init__.py b/ext/opentelemetry-ext-azure-monitor/tests/__init__.py new file mode 100644 index 00000000000..e69de29bb2d From c924203e8f84f3ae47b088a3eaa0ed5933ee6d8f Mon Sep 17 00:00:00 2001 From: Reiley Yang Date: Wed, 18 Sep 2019 22:38:31 -0700 Subject: [PATCH 02/10] lint --- ext/opentelemetry-ext-azure-monitor/examples/trace.py | 8 +++++--- .../src/opentelemetry/ext/azure_monitor/trace.py | 1 + tox.ini | 4 ++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ext/opentelemetry-ext-azure-monitor/examples/trace.py b/ext/opentelemetry-ext-azure-monitor/examples/trace.py index 913773e9123..49b38c051dd 100644 --- a/ext/opentelemetry-ext-azure-monitor/examples/trace.py +++ b/ext/opentelemetry-ext-azure-monitor/examples/trace.py @@ -5,7 +5,9 @@ trace.set_preferred_tracer_implementation(lambda T: Tracer()) tracer = trace.tracer() -tracer.add_span_processor(SimpleExportSpanProcessor(AzureMonitorSpanExporter())) +tracer.add_span_processor( + SimpleExportSpanProcessor(AzureMonitorSpanExporter()) +) -with tracer.start_span('hello') as span: - print('Hello, World!') +with tracer.start_span("hello") as span: + print("Hello, World!") diff --git a/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/trace.py b/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/trace.py index 893fb1f3a6d..5ef264ac9bf 100644 --- a/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/trace.py +++ b/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/trace.py @@ -15,6 +15,7 @@ from opentelemetry.sdk.trace.export import SpanExporter from opentelemetry.sdk.trace.export import SpanExportResult + class AzureMonitorSpanExporter(SpanExporter): def __init__(self): pass diff --git a/tox.ini b/tox.ini index d0fb6cc2dc4..871931dc55a 100644 --- a/tox.ini +++ b/tox.ini @@ -66,6 +66,7 @@ deps = commands_pre = pip install -e {toxinidir}/opentelemetry-api pip install -e {toxinidir}/opentelemetry-sdk + pip install -e {toxinidir}/ext/opentelemetry-ext-azure-monitor pip install -e {toxinidir}/ext/opentelemetry-ext-wsgi pip install -e {toxinidir}/ext/opentelemetry-ext-http-requests pip install -e {toxinidir}/opentelemetry-example-app @@ -78,6 +79,9 @@ commands = opentelemetry-api/tests/ \ opentelemetry-sdk/src/opentelemetry \ opentelemetry-sdk/tests/ \ + ext/opentelemetry-ext-azure-monitor/examples/ \ + ext/opentelemetry-ext-azure-monitor/src/ \ + ext/opentelemetry-ext-azure-monitor/tests/ \ ext/opentelemetry-ext-http-requests/src/ \ ext/opentelemetry-ext-http-requests/tests/ \ ext/opentelemetry-ext-wsgi/tests/ \ From dcd5c4985b15353e01b5841ac3d692796b52740b Mon Sep 17 00:00:00 2001 From: Reiley Yang Date: Wed, 18 Sep 2019 22:44:34 -0700 Subject: [PATCH 03/10] make lint happy --- .../src/opentelemetry/ext/azure_monitor/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/__init__.py b/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/__init__.py index b623ef10c04..26bba32eb4a 100644 --- a/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/__init__.py +++ b/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/__init__.py @@ -17,5 +17,5 @@ Microsoft Azure Monitor. """ -from .trace import AzureMonitorSpanExporter -from .version import __version__ # noqa +from opentelemetry.ext.azure_monitor.trace import AzureMonitorSpanExporter +from opentelemetry.ext.azure_monitor.version import __version__ # noqa From 1ab937e48914f8cc4e3342279e01adcd12da770e Mon Sep 17 00:00:00 2001 From: Reiley Yang Date: Wed, 18 Sep 2019 22:53:27 -0700 Subject: [PATCH 04/10] workaround lint --- .../src/opentelemetry/ext/azure_monitor/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/__init__.py b/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/__init__.py index 26bba32eb4a..cdd38100b43 100644 --- a/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/__init__.py +++ b/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/__init__.py @@ -19,3 +19,6 @@ from opentelemetry.ext.azure_monitor.trace import AzureMonitorSpanExporter from opentelemetry.ext.azure_monitor.version import __version__ # noqa + + +__all__ = ["AzureMonitorSpanExporter"] From ba91a1230f61a734f793d9bb6a72c43c14bcce75 Mon Sep 17 00:00:00 2001 From: Reiley Yang Date: Wed, 18 Sep 2019 23:00:07 -0700 Subject: [PATCH 05/10] fix lint --- .../src/opentelemetry/ext/azure_monitor/__init__.py | 1 - .../src/opentelemetry/ext/azure_monitor/trace.py | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/__init__.py b/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/__init__.py index cdd38100b43..81222c546eb 100644 --- a/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/__init__.py +++ b/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/__init__.py @@ -20,5 +20,4 @@ from opentelemetry.ext.azure_monitor.trace import AzureMonitorSpanExporter from opentelemetry.ext.azure_monitor.version import __version__ # noqa - __all__ = ["AzureMonitorSpanExporter"] diff --git a/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/trace.py b/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/trace.py index 5ef264ac9bf..a65cdd92a11 100644 --- a/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/trace.py +++ b/ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/trace.py @@ -12,8 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from opentelemetry.sdk.trace.export import SpanExporter -from opentelemetry.sdk.trace.export import SpanExportResult +from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult class AzureMonitorSpanExporter(SpanExporter): From 432bc9cdaec78f24ba7fbe69499e2e015f7036a5 Mon Sep 17 00:00:00 2001 From: Reiley Yang Date: Thu, 19 Sep 2019 09:28:53 -0700 Subject: [PATCH 06/10] add console exporter --- .../src/opentelemetry/sdk/trace/export/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py index 52d6d3bd22f..29bebe2a8f0 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py @@ -79,8 +79,12 @@ def shutdown(self) -> None: class ConsoleSpanExporter(SpanExporter): +<<<<<<< HEAD """Implementation of :class:`SpanExporter` that prints spans to the console. +======= + """Implementation of :class:`Exporter` that prints spans to the console. +>>>>>>> add console exporter This class can be used for diagnostic purposes. It prints the exported spans to the console STDOUT. From b43b26a50eb5d821961a053ad78262bd417d01c8 Mon Sep 17 00:00:00 2001 From: Reiley Yang Date: Thu, 19 Sep 2019 10:21:24 -0700 Subject: [PATCH 07/10] improve span.__repr__ --- .../src/opentelemetry/sdk/trace/__init__.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index c839fe4b616..9de4fb9b040 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -280,17 +280,30 @@ def __init__( self.start_time = None def __repr__(self): +<<<<<<< HEAD return '{}(name="{}", context={})'.format( type(self).__name__, self.name, self.context ) def __str__(self): +======= +>>>>>>> improve span.__repr__ return '{}(name="{}", context={}, kind={}, parent={}, start_time={}, end_time={})'.format( type(self).__name__, self.name, self.context, self.kind, +<<<<<<< HEAD repr(self.parent), +======= + '{}(name="{}", context={})'.format( + type(self.parent).__name__, + self.parent.name, + self.parent.context, + ) + if self.parent + else "None", +>>>>>>> improve span.__repr__ util.ns_to_iso_str(self.start_time) if self.start_time else "None", util.ns_to_iso_str(self.end_time) if self.end_time else "None", ) From 035983aa9e9dc85ba4347617a818bd04bc5832a0 Mon Sep 17 00:00:00 2001 From: Reiley Yang Date: Thu, 19 Sep 2019 13:37:55 -0700 Subject: [PATCH 08/10] fix inline doc --- .../src/opentelemetry/sdk/trace/export/__init__.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py index 29bebe2a8f0..52d6d3bd22f 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py @@ -79,12 +79,8 @@ def shutdown(self) -> None: class ConsoleSpanExporter(SpanExporter): -<<<<<<< HEAD """Implementation of :class:`SpanExporter` that prints spans to the console. -======= - """Implementation of :class:`Exporter` that prints spans to the console. ->>>>>>> add console exporter This class can be used for diagnostic purposes. It prints the exported spans to the console STDOUT. From 4f703bfe2b2491f484f51c9ef3bcca05c986dd68 Mon Sep 17 00:00:00 2001 From: Reiley Yang Date: Fri, 20 Sep 2019 15:03:56 -0700 Subject: [PATCH 09/10] resolve merge conflict --- .../src/opentelemetry/sdk/trace/__init__.py | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index 9de4fb9b040..c839fe4b616 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -280,30 +280,17 @@ def __init__( self.start_time = None def __repr__(self): -<<<<<<< HEAD return '{}(name="{}", context={})'.format( type(self).__name__, self.name, self.context ) def __str__(self): -======= ->>>>>>> improve span.__repr__ return '{}(name="{}", context={}, kind={}, parent={}, start_time={}, end_time={})'.format( type(self).__name__, self.name, self.context, self.kind, -<<<<<<< HEAD repr(self.parent), -======= - '{}(name="{}", context={})'.format( - type(self.parent).__name__, - self.parent.name, - self.parent.context, - ) - if self.parent - else "None", ->>>>>>> improve span.__repr__ util.ns_to_iso_str(self.start_time) if self.start_time else "None", util.ns_to_iso_str(self.end_time) if self.end_time else "None", ) From c90d3f2c87f9d3960562a0b6a10d8c3c5d1eb960 Mon Sep 17 00:00:00 2001 From: Reiley Yang Date: Tue, 24 Sep 2019 18:27:32 -0700 Subject: [PATCH 10/10] Update ext/opentelemetry-ext-azure-monitor/setup.cfg Co-Authored-By: Chris Kleinknecht --- ext/opentelemetry-ext-azure-monitor/setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/opentelemetry-ext-azure-monitor/setup.cfg b/ext/opentelemetry-ext-azure-monitor/setup.cfg index 4c5bf8426cc..3110ed35312 100644 --- a/ext/opentelemetry-ext-azure-monitor/setup.cfg +++ b/ext/opentelemetry-ext-azure-monitor/setup.cfg @@ -19,7 +19,7 @@ long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/ext/opentelemetry-ext-wsgi +url = https://github.com/open-telemetry/opentelemetry-python/ext/opentelemetry-ext-azure-monitor platforms = any license = Apache-2.0 classifiers =