From 5ff9600a62f9c82fc120b03e5729a53341465626 Mon Sep 17 00:00:00 2001 From: Aravin <34178459+aravinsiva@users.noreply.github.com> Date: Wed, 22 Jul 2020 12:27:56 -0400 Subject: [PATCH 01/15] Adding gRPC instrumentor (#788) --- ext/opentelemetry-ext-grpc/CHANGELOG.md | 2 + ext/opentelemetry-ext-grpc/setup.cfg | 5 + .../src/opentelemetry/ext/grpc/__init__.py | 141 +++++++++++++++++- .../tests/test_server_interceptor.py | 58 ++++++- 4 files changed, 203 insertions(+), 3 deletions(-) diff --git a/ext/opentelemetry-ext-grpc/CHANGELOG.md b/ext/opentelemetry-ext-grpc/CHANGELOG.md index 3be32e05e59..4221ab53710 100644 --- a/ext/opentelemetry-ext-grpc/CHANGELOG.md +++ b/ext/opentelemetry-ext-grpc/CHANGELOG.md @@ -4,6 +4,8 @@ - Add status code to gRPC client spans ([896](https://github.com/open-telemetry/opentelemetry-python/pull/896)) +- Add gRPC client and server instrumentors + ([788](https://github.com/open-telemetry/opentelemetry-python/pull/788)) ## 0.8b0 diff --git a/ext/opentelemetry-ext-grpc/setup.cfg b/ext/opentelemetry-ext-grpc/setup.cfg index 2721a3b2578..dd296032475 100644 --- a/ext/opentelemetry-ext-grpc/setup.cfg +++ b/ext/opentelemetry-ext-grpc/setup.cfg @@ -51,3 +51,8 @@ test = [options.packages.find] where = src + +[options.entry_points] +opentelemetry_instrumentor = + grpc_client = opentelemetry.ext.grpc:GrpcInstrumentorClient + grpc_server = opentelemetry.ext.grpc:GrpcInstrumentorServer diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py index 0e9b19ef51b..368ae55f2e6 100644 --- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py +++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py @@ -12,13 +12,150 @@ # See the License for the specific language governing permissions and # limitations under the License. -# pylint:disable=import-outside-toplevel -# pylint:disable=import-self # pylint:disable=no-name-in-module # pylint:disable=relative-beyond-top-level +# pylint:disable=import-error +# pylint:disable=no-self-use +""" +Usage Client +------------ +.. code-block:: python + + import logging + + import grpc + + from opentelemetry import trace + from opentelemetry.ext.grpc import GrpcInstrumentorClient, client_interceptor + from opentelemetry.sdk.trace import TracerProvider + from opentelemetry.sdk.trace.export import ( + ConsoleSpanExporter, + SimpleExportSpanProcessor, + ) + + try: + from .gen import helloworld_pb2, helloworld_pb2_grpc + except ImportError: + from gen import helloworld_pb2, helloworld_pb2_grpc + + trace.set_tracer_provider(TracerProvider()) + trace.get_tracer_provider().add_span_processor( + SimpleExportSpanProcessor(ConsoleSpanExporter()) + ) + instrumentor = GrpcInstrumentorClient() + instrumentor.instrument() + + def run(): + with grpc.insecure_channel("localhost:50051") as channel: + + stub = helloworld_pb2_grpc.GreeterStub(channel) + response = stub.SayHello(helloworld_pb2.HelloRequest(name="YOU")) + + print("Greeter client received: " + response.message) + + + if __name__ == "__main__": + logging.basicConfig() + run() + +Usage Server +------------ +.. code-block:: python + + import logging + from concurrent import futures + + import grpc + + from opentelemetry import trace + from opentelemetry.ext.grpc import GrpcInstrumentorServer, server_interceptor + from opentelemetry.ext.grpc.grpcext import intercept_server + from opentelemetry.sdk.trace import TracerProvider + from opentelemetry.sdk.trace.export import ( + ConsoleSpanExporter, + SimpleExportSpanProcessor, + ) + + try: + from .gen import helloworld_pb2, helloworld_pb2_grpc + except ImportError: + from gen import helloworld_pb2, helloworld_pb2_grpc + + trace.set_tracer_provider(TracerProvider()) + trace.get_tracer_provider().add_span_processor( + SimpleExportSpanProcessor(ConsoleSpanExporter()) + ) + grpc_server_instrumentor = GrpcInstrumentorServer() + grpc_server_instrumentor.instrument() + + + class Greeter(helloworld_pb2_grpc.GreeterServicer): + def SayHello(self, request, context): + return helloworld_pb2.HelloReply(message="Hello, %s!" % request.name) + + + def serve(): + + server = grpc.server(futures.ThreadPoolExecutor()) + + helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) + server.add_insecure_port("[::]:50051") + server.start() + server.wait_for_termination() + + + if __name__ == "__main__": + logging.basicConfig() + serve() +""" +from contextlib import contextmanager + +import grpc +from wrapt import wrap_function_wrapper as _wrap from opentelemetry import trace +from opentelemetry.ext.grpc.grpcext import intercept_channel, intercept_server from opentelemetry.ext.grpc.version import __version__ +from opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from opentelemetry.instrumentation.utils import unwrap + +# pylint:disable=import-outside-toplevel +# pylint:disable=import-self +# pylint:disable=unused-argument +# isort:skip + + +class GrpcInstrumentorServer(BaseInstrumentor): + def _instrument(self, **kwargs): + _wrap("grpc", "server", self.wrapper_fn) + + def _uninstrument(self, **kwargs): + unwrap(grpc, "server") + + def wrapper_fn(self, original_func, instance, args, kwargs): + server = original_func(*args, **kwargs) + return intercept_server(server, server_interceptor()) + + +class GrpcInstrumentorClient(BaseInstrumentor): + def _instrument(self, **kwargs): + if kwargs.get("channel_type") == "secure": + _wrap("grpc", "secure_channel", self.wrapper_fn) + + else: + _wrap("grpc", "insecure_channel", self.wrapper_fn) + + def _uninstrument(self, **kwargs): + if kwargs.get("channel_type") == "secure": + unwrap(grpc, "secure_channel") + + else: + unwrap(grpc, "insecure_channel") + + @contextmanager + def wrapper_fn(self, original_func, instance, args, kwargs): + with original_func(*args, **kwargs) as channel: + yield intercept_channel(channel, client_interceptor()) def client_interceptor(tracer_provider=None): diff --git a/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py b/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py index ebe2a8c160a..0ba57a43228 100644 --- a/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py +++ b/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py @@ -22,7 +22,7 @@ import opentelemetry.ext.grpc from opentelemetry import trace -from opentelemetry.ext.grpc import server_interceptor +from opentelemetry.ext.grpc import GrpcInstrumentorServer, server_interceptor from opentelemetry.ext.grpc.grpcext import intercept_server from opentelemetry.sdk import trace as trace_sdk from opentelemetry.test.test_base import TestBase @@ -49,6 +49,62 @@ def service(self, handler_call_details): class TestOpenTelemetryServerInterceptor(TestBase): + def test_instrumentor(self): + def handler(request, context): + return b"" + + grpc_server_instrumentor = GrpcInstrumentorServer() + grpc_server_instrumentor.instrument() + server = grpc.server( + futures.ThreadPoolExecutor(max_workers=1), + options=(("grpc.so_reuseport", 0),), + ) + + server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) + + port = server.add_insecure_port("[::]:0") + channel = grpc.insecure_channel("localhost:{:d}".format(port)) + + try: + server.start() + channel.unary_unary("test")(b"test") + finally: + server.stop(None) + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 1) + span = spans_list[0] + self.assertEqual(span.name, "test") + self.assertIs(span.kind, trace.SpanKind.SERVER) + self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) + grpc_server_instrumentor.uninstrument() + + def test_uninstrument(self): + def handler(request, context): + return b"" + + grpc_server_instrumentor = GrpcInstrumentorServer() + grpc_server_instrumentor.instrument() + grpc_server_instrumentor.uninstrument() + server = grpc.server( + futures.ThreadPoolExecutor(max_workers=1), + options=(("grpc.so_reuseport", 0),), + ) + + server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) + + port = server.add_insecure_port("[::]:0") + channel = grpc.insecure_channel("localhost:{:d}".format(port)) + + try: + server.start() + channel.unary_unary("test")(b"test") + finally: + server.stop(None) + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 0) + def test_create_span(self): """Check that the interceptor wraps calls with spans server-side.""" From f2c6c8579453ddcb30ed4b47dddda1c4971e2e26 Mon Sep 17 00:00:00 2001 From: sartx Date: Fri, 24 Jul 2020 20:35:38 +0500 Subject: [PATCH 02/15] ext/aiopg: Add instrumentation for aiopg (#801) Co-authored-by: Leighton Chen Co-authored-by: Alex Boten --- docs-requirements.txt | 1 + docs/ext/aiopg/aiopg.rst | 7 + .../src/opentelemetry/ext/dbapi/__init__.py | 43 +- .../tests/postgres/test_aiopg_functional.py | 200 ++++++++ .../CHANGELOG.md | 5 + .../LICENSE | 201 ++++++++ .../MANIFEST.in | 9 + .../README.rst | 21 + .../setup.cfg | 58 +++ .../setup.py | 26 + .../instrumentation/aiopg/__init__.py | 121 +++++ .../aiopg/aiopg_integration.py | 144 ++++++ .../instrumentation/aiopg/version.py | 15 + .../instrumentation/aiopg/wrappers.py | 223 +++++++++ .../tests/__init__.py | 0 .../tests/test_aiopg_integration.py | 472 ++++++++++++++++++ tox.ini | 11 +- 17 files changed, 1535 insertions(+), 22 deletions(-) create mode 100644 docs/ext/aiopg/aiopg.rst create mode 100644 ext/opentelemetry-ext-docker-tests/tests/postgres/test_aiopg_functional.py create mode 100644 ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md create mode 100644 ext/opentelemetry-instrumentation-aiopg/LICENSE create mode 100644 ext/opentelemetry-instrumentation-aiopg/MANIFEST.in create mode 100644 ext/opentelemetry-instrumentation-aiopg/README.rst create mode 100644 ext/opentelemetry-instrumentation-aiopg/setup.cfg create mode 100644 ext/opentelemetry-instrumentation-aiopg/setup.py create mode 100644 ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/__init__.py create mode 100644 ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py create mode 100644 ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py create mode 100644 ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/wrappers.py create mode 100644 ext/opentelemetry-instrumentation-aiopg/tests/__init__.py create mode 100644 ext/opentelemetry-instrumentation-aiopg/tests/test_aiopg_integration.py diff --git a/docs-requirements.txt b/docs-requirements.txt index 0fa078ef233..10ecacb2fd8 100644 --- a/docs-requirements.txt +++ b/docs-requirements.txt @@ -7,6 +7,7 @@ asgiref~=3.0 asyncpg>=0.12.0 ddtrace>=0.34.0 aiohttp~= 3.0 +aiopg>=0.13.0 Deprecated>=1.2.6 django>=2.2 PyMySQL~=0.9.3 diff --git a/docs/ext/aiopg/aiopg.rst b/docs/ext/aiopg/aiopg.rst new file mode 100644 index 00000000000..ff8d91ed11d --- /dev/null +++ b/docs/ext/aiopg/aiopg.rst @@ -0,0 +1,7 @@ +OpenTelemetry aiopg instrumentation +=================================== + +.. automodule:: opentelemetry.instrumentation.aiopg + :members: + :undoc-members: + :show-inheritance: diff --git a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/__init__.py b/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/__init__.py index b34e41b2b4b..3838dc1b157 100644 --- a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/__init__.py +++ b/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/__init__.py @@ -46,6 +46,7 @@ import wrapt +from opentelemetry import trace as trace_api from opentelemetry.ext.dbapi.version import __version__ from opentelemetry.instrumentation.utils import unwrap from opentelemetry.trace import SpanKind, TracerProvider, get_tracer @@ -300,6 +301,26 @@ class TracedCursor: def __init__(self, db_api_integration: DatabaseApiIntegration): self._db_api_integration = db_api_integration + def _populate_span( + self, span: trace_api.Span, *args: typing.Tuple[typing.Any, typing.Any] + ): + statement = args[0] if args else "" + span.set_attribute( + "component", self._db_api_integration.database_component + ) + span.set_attribute("db.type", self._db_api_integration.database_type) + span.set_attribute("db.instance", self._db_api_integration.database) + span.set_attribute("db.statement", statement) + + for ( + attribute_key, + attribute_value, + ) in self._db_api_integration.span_attributes.items(): + span.set_attribute(attribute_key, attribute_value) + + if len(args) > 1: + span.set_attribute("db.statement.parameters", str(args[1])) + def traced_execution( self, query_method: typing.Callable[..., typing.Any], @@ -307,30 +328,10 @@ def traced_execution( **kwargs: typing.Dict[typing.Any, typing.Any] ): - statement = args[0] if args else "" with self._db_api_integration.get_tracer().start_as_current_span( self._db_api_integration.name, kind=SpanKind.CLIENT ) as span: - span.set_attribute( - "component", self._db_api_integration.database_component - ) - span.set_attribute( - "db.type", self._db_api_integration.database_type - ) - span.set_attribute( - "db.instance", self._db_api_integration.database - ) - span.set_attribute("db.statement", statement) - - for ( - attribute_key, - attribute_value, - ) in self._db_api_integration.span_attributes.items(): - span.set_attribute(attribute_key, attribute_value) - - if len(args) > 1: - span.set_attribute("db.statement.parameters", str(args[1])) - + self._populate_span(span, *args) try: result = query_method(*args, **kwargs) span.set_status(Status(StatusCanonicalCode.OK)) diff --git a/ext/opentelemetry-ext-docker-tests/tests/postgres/test_aiopg_functional.py b/ext/opentelemetry-ext-docker-tests/tests/postgres/test_aiopg_functional.py new file mode 100644 index 00000000000..1762da1d097 --- /dev/null +++ b/ext/opentelemetry-ext-docker-tests/tests/postgres/test_aiopg_functional.py @@ -0,0 +1,200 @@ +# Copyright 2020, 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 asyncio +import os +import time + +import aiopg +import psycopg2 +import pytest + +from opentelemetry import trace as trace_api +from opentelemetry.instrumentation.aiopg import AiopgInstrumentor +from opentelemetry.test.test_base import TestBase + +POSTGRES_HOST = os.getenv("POSTGRESQL_HOST ", "localhost") +POSTGRES_PORT = int(os.getenv("POSTGRESQL_PORT ", "5432")) +POSTGRES_DB_NAME = os.getenv("POSTGRESQL_DB_NAME ", "opentelemetry-tests") +POSTGRES_PASSWORD = os.getenv("POSTGRESQL_HOST ", "testpassword") +POSTGRES_USER = os.getenv("POSTGRESQL_HOST ", "testuser") + + +def async_call(coro): + loop = asyncio.get_event_loop() + return loop.run_until_complete(coro) + + +class TestFunctionalAiopgConnect(TestBase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls._connection = None + cls._cursor = None + cls._tracer = cls.tracer_provider.get_tracer(__name__) + AiopgInstrumentor().instrument(tracer_provider=cls.tracer_provider) + cls._connection = async_call( + aiopg.connect( + dbname=POSTGRES_DB_NAME, + user=POSTGRES_USER, + password=POSTGRES_PASSWORD, + host=POSTGRES_HOST, + port=POSTGRES_PORT, + ) + ) + cls._cursor = async_call(cls._connection.cursor()) + + @classmethod + def tearDownClass(cls): + if cls._cursor: + cls._cursor.close() + if cls._connection: + cls._connection.close() + AiopgInstrumentor().uninstrument() + + def validate_spans(self): + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 2) + for span in spans: + if span.name == "rootSpan": + root_span = span + else: + child_span = span + self.assertIsInstance(span.start_time, int) + self.assertIsInstance(span.end_time, int) + self.assertIsNotNone(root_span) + self.assertIsNotNone(child_span) + self.assertEqual(root_span.name, "rootSpan") + self.assertEqual(child_span.name, "postgresql.opentelemetry-tests") + self.assertIsNotNone(child_span.parent) + self.assertIs(child_span.parent, root_span.get_context()) + self.assertIs(child_span.kind, trace_api.SpanKind.CLIENT) + self.assertEqual( + child_span.attributes["db.instance"], POSTGRES_DB_NAME + ) + self.assertEqual(child_span.attributes["net.peer.name"], POSTGRES_HOST) + self.assertEqual(child_span.attributes["net.peer.port"], POSTGRES_PORT) + + def test_execute(self): + """Should create a child span for execute method + """ + with self._tracer.start_as_current_span("rootSpan"): + async_call( + self._cursor.execute( + "CREATE TABLE IF NOT EXISTS test (id integer)" + ) + ) + self.validate_spans() + + def test_executemany(self): + """Should create a child span for executemany + """ + with pytest.raises(psycopg2.ProgrammingError): + with self._tracer.start_as_current_span("rootSpan"): + data = (("1",), ("2",), ("3",)) + stmt = "INSERT INTO test (id) VALUES (%s)" + async_call(self._cursor.executemany(stmt, data)) + self.validate_spans() + + def test_callproc(self): + """Should create a child span for callproc + """ + with self._tracer.start_as_current_span("rootSpan"), self.assertRaises( + Exception + ): + async_call(self._cursor.callproc("test", ())) + self.validate_spans() + + +class TestFunctionalAiopgCreatePool(TestBase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls._connection = None + cls._cursor = None + cls._tracer = cls.tracer_provider.get_tracer(__name__) + AiopgInstrumentor().instrument(tracer_provider=cls.tracer_provider) + cls._pool = async_call( + aiopg.create_pool( + dbname=POSTGRES_DB_NAME, + user=POSTGRES_USER, + password=POSTGRES_PASSWORD, + host=POSTGRES_HOST, + port=POSTGRES_PORT, + ) + ) + cls._connection = async_call(cls._pool.acquire()) + cls._cursor = async_call(cls._connection.cursor()) + + @classmethod + def tearDownClass(cls): + if cls._cursor: + cls._cursor.close() + if cls._connection: + cls._connection.close() + if cls._pool: + cls._pool.close() + AiopgInstrumentor().uninstrument() + + def validate_spans(self): + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 2) + for span in spans: + if span.name == "rootSpan": + root_span = span + else: + child_span = span + self.assertIsInstance(span.start_time, int) + self.assertIsInstance(span.end_time, int) + self.assertIsNotNone(root_span) + self.assertIsNotNone(child_span) + self.assertEqual(root_span.name, "rootSpan") + self.assertEqual(child_span.name, "postgresql.opentelemetry-tests") + self.assertIsNotNone(child_span.parent) + self.assertIs(child_span.parent, root_span.get_context()) + self.assertIs(child_span.kind, trace_api.SpanKind.CLIENT) + self.assertEqual( + child_span.attributes["db.instance"], POSTGRES_DB_NAME + ) + self.assertEqual(child_span.attributes["net.peer.name"], POSTGRES_HOST) + self.assertEqual(child_span.attributes["net.peer.port"], POSTGRES_PORT) + + def test_execute(self): + """Should create a child span for execute method + """ + with self._tracer.start_as_current_span("rootSpan"): + async_call( + self._cursor.execute( + "CREATE TABLE IF NOT EXISTS test (id integer)" + ) + ) + self.validate_spans() + + def test_executemany(self): + """Should create a child span for executemany + """ + with pytest.raises(psycopg2.ProgrammingError): + with self._tracer.start_as_current_span("rootSpan"): + data = (("1",), ("2",), ("3",)) + stmt = "INSERT INTO test (id) VALUES (%s)" + async_call(self._cursor.executemany(stmt, data)) + self.validate_spans() + + def test_callproc(self): + """Should create a child span for callproc + """ + with self._tracer.start_as_current_span("rootSpan"), self.assertRaises( + Exception + ): + async_call(self._cursor.callproc("test", ())) + self.validate_spans() diff --git a/ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md b/ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md new file mode 100644 index 00000000000..3e04402cea9 --- /dev/null +++ b/ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## Unreleased + +- Initial release diff --git a/ext/opentelemetry-instrumentation-aiopg/LICENSE b/ext/opentelemetry-instrumentation-aiopg/LICENSE new file mode 100644 index 00000000000..261eeb9e9f8 --- /dev/null +++ b/ext/opentelemetry-instrumentation-aiopg/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/ext/opentelemetry-instrumentation-aiopg/MANIFEST.in b/ext/opentelemetry-instrumentation-aiopg/MANIFEST.in new file mode 100644 index 00000000000..aed3e33273b --- /dev/null +++ b/ext/opentelemetry-instrumentation-aiopg/MANIFEST.in @@ -0,0 +1,9 @@ +graft src +graft tests +global-exclude *.pyc +global-exclude *.pyo +global-exclude __pycache__/* +include CHANGELOG.md +include MANIFEST.in +include README.rst +include LICENSE diff --git a/ext/opentelemetry-instrumentation-aiopg/README.rst b/ext/opentelemetry-instrumentation-aiopg/README.rst new file mode 100644 index 00000000000..0e9248ec1d1 --- /dev/null +++ b/ext/opentelemetry-instrumentation-aiopg/README.rst @@ -0,0 +1,21 @@ +OpenTelemetry aiopg instrumentation +=================================== + +|pypi| + +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-aiopg.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-aiopg/ + +Installation +------------ + +:: + + pip install opentelemetry-instrumentation-aiopg + + +References +---------- + +* `OpenTelemetry aiopg instrumentation `_ +* `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-instrumentation-aiopg/setup.cfg b/ext/opentelemetry-instrumentation-aiopg/setup.cfg new file mode 100644 index 00000000000..4dade66644b --- /dev/null +++ b/ext/opentelemetry-instrumentation-aiopg/setup.cfg @@ -0,0 +1,58 @@ +# Copyright The 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-instrumentaation-aiopg +description = OpenTelemetry aiopg instrumentation +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/tree/master/ext/opentelemetry-instrumentation-aiopg +platforms = any +license = Apache-2.0 +classifiers = + Development Status :: 4 - Beta + Intended Audience :: Developers + License :: OSI Approved :: Apache Software License + Programming Language :: Python + Programming Language :: Python :: 3 + Programming Language :: Python :: 3.5 + Programming Language :: Python :: 3.6 + Programming Language :: Python :: 3.7 + Programming Language :: Python :: 3.8 + +[options] +python_requires = >=3.5 +package_dir= + =src +packages=find_namespace: +install_requires = + opentelemetry-api == 0.11.dev0 + opentelemetry-ext-dbapi == 0.11.dev0 + opentelemetry-instrumentation == 0.11.dev0 + aiopg >= 0.13.0 + wrapt >= 1.0.0, < 2.0.0 + +[options.extras_require] +test = + opentelemetry-test == 0.11.dev0 + +[options.packages.find] +where = src + + +[options.entry_points] +opentelemetry_instrumentor = + aiopg = opentelemetry.instrumentation.aiopg:AiopgInstrumentor diff --git a/ext/opentelemetry-instrumentation-aiopg/setup.py b/ext/opentelemetry-instrumentation-aiopg/setup.py new file mode 100644 index 00000000000..dfd463e5abb --- /dev/null +++ b/ext/opentelemetry-instrumentation-aiopg/setup.py @@ -0,0 +1,26 @@ +# Copyright The 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", "instrumentation", "aiopg", "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-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/__init__.py b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/__init__.py new file mode 100644 index 00000000000..d2cc90902eb --- /dev/null +++ b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/__init__.py @@ -0,0 +1,121 @@ +# Copyright The 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 integration with PostgreSQL supports the aiopg library, +it can be enabled by using ``AiopgInstrumentor``. + +.. aiopg: https://github.com/aio-libs/aiopg + +Usage +----- + +.. code-block:: python + + import aiopg + from opentelemetry.instrumentation.aiopg import AiopgInstrumentor + + AiopgInstrumentor().instrument() + + cnx = await aiopg.connect(database='Database') + cursor = await cnx.cursor() + await cursor.execute("INSERT INTO test (testField) VALUES (123)") + cursor.close() + cnx.close() + + pool = await aiopg.create_pool(database='Database') + cnx = await pool.acquire() + cursor = await cnx.cursor() + await cursor.execute("INSERT INTO test (testField) VALUES (123)") + cursor.close() + cnx.close() + +API +--- +""" + +from opentelemetry.instrumentation.aiopg import wrappers +from opentelemetry.instrumentation.aiopg.version import __version__ +from opentelemetry.instrumentation.instrumentor import BaseInstrumentor + + +class AiopgInstrumentor(BaseInstrumentor): + _CONNECTION_ATTRIBUTES = { + "database": "info.dbname", + "port": "info.port", + "host": "info.host", + "user": "info.user", + } + + _DATABASE_COMPONENT = "postgresql" + _DATABASE_TYPE = "sql" + + def _instrument(self, **kwargs): + """Integrate with PostgreSQL aiopg library. + aiopg: https://github.com/aio-libs/aiopg + """ + + tracer_provider = kwargs.get("tracer_provider") + + wrappers.wrap_connect( + __name__, + self._DATABASE_COMPONENT, + self._DATABASE_TYPE, + self._CONNECTION_ATTRIBUTES, + version=__version__, + tracer_provider=tracer_provider, + ) + + wrappers.wrap_create_pool( + __name__, + self._DATABASE_COMPONENT, + self._DATABASE_TYPE, + self._CONNECTION_ATTRIBUTES, + version=__version__, + tracer_provider=tracer_provider, + ) + + def _uninstrument(self, **kwargs): + """"Disable aiopg instrumentation""" + wrappers.unwrap_connect() + wrappers.unwrap_create_pool() + + # pylint:disable=no-self-use + def instrument_connection(self, connection): + """Enable instrumentation in a aiopg connection. + + Args: + connection: The connection to instrument. + + Returns: + An instrumented connection. + """ + return wrappers.instrument_connection( + __name__, + connection, + self._DATABASE_COMPONENT, + self._DATABASE_TYPE, + self._CONNECTION_ATTRIBUTES, + ) + + def uninstrument_connection(self, connection): + """Disable instrumentation in a aiopg connection. + + Args: + connection: The connection to uninstrument. + + Returns: + An uninstrumented connection. + """ + return wrappers.uninstrument_connection(connection) diff --git a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py new file mode 100644 index 00000000000..def4a72c3d1 --- /dev/null +++ b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py @@ -0,0 +1,144 @@ +import typing + +import wrapt +from aiopg.utils import _ContextManager, _PoolAcquireContextManager + +from opentelemetry.ext.dbapi import DatabaseApiIntegration, TracedCursor +from opentelemetry.trace import SpanKind +from opentelemetry.trace.status import Status, StatusCanonicalCode + + +# pylint: disable=abstract-method +class AsyncProxyObject(wrapt.ObjectProxy): + def __aiter__(self): + return self.__wrapped__.__aiter__() + + async def __anext__(self): + result = await self.__wrapped__.__anext__() + return result + + async def __aenter__(self): + return await self.__wrapped__.__aenter__() + + async def __aexit__(self, exc_type, exc_val, exc_tb): + return await self.__wrapped__.__aexit__(exc_type, exc_val, exc_tb) + + def __await__(self): + return self.__wrapped__.__await__() + + +class AiopgIntegration(DatabaseApiIntegration): + async def wrapped_connection( + self, + connect_method: typing.Callable[..., typing.Any], + args: typing.Tuple[typing.Any, typing.Any], + kwargs: typing.Dict[typing.Any, typing.Any], + ): + """Add object proxy to connection object. + """ + connection = await connect_method(*args, **kwargs) + # pylint: disable=protected-access + self.get_connection_attributes(connection._conn) + return get_traced_connection_proxy(connection, self) + + async def wrapped_pool(self, create_pool_method, args, kwargs): + pool = await create_pool_method(*args, **kwargs) + async with pool.acquire() as connection: + # pylint: disable=protected-access + self.get_connection_attributes(connection._conn) + return get_traced_pool_proxy(pool, self) + + +def get_traced_connection_proxy( + connection, db_api_integration, *args, **kwargs +): + # pylint: disable=abstract-method + class TracedConnectionProxy(AsyncProxyObject): + # pylint: disable=unused-argument + def __init__(self, connection, *args, **kwargs): + super().__init__(connection) + + def cursor(self, *args, **kwargs): + coro = self._cursor(*args, **kwargs) + return _ContextManager(coro) + + async def _cursor(self, *args, **kwargs): + # pylint: disable=protected-access + cursor = await self.__wrapped__._cursor(*args, **kwargs) + return get_traced_cursor_proxy(cursor, db_api_integration) + + return TracedConnectionProxy(connection, *args, **kwargs) + + +def get_traced_pool_proxy(pool, db_api_integration, *args, **kwargs): + # pylint: disable=abstract-method + class TracedPoolProxy(AsyncProxyObject): + # pylint: disable=unused-argument + def __init__(self, pool, *args, **kwargs): + super().__init__(pool) + + def acquire(self): + """Acquire free connection from the pool.""" + coro = self._acquire() + return _PoolAcquireContextManager(coro, self) + + async def _acquire(self): + # pylint: disable=protected-access + connection = await self.__wrapped__._acquire() + return get_traced_connection_proxy( + connection, db_api_integration, *args, **kwargs + ) + + return TracedPoolProxy(pool, *args, **kwargs) + + +class AsyncTracedCursor(TracedCursor): + async def traced_execution( + self, + query_method: typing.Callable[..., typing.Any], + *args: typing.Tuple[typing.Any, typing.Any], + **kwargs: typing.Dict[typing.Any, typing.Any] + ): + + with self._db_api_integration.get_tracer().start_as_current_span( + self._db_api_integration.name, kind=SpanKind.CLIENT + ) as span: + self._populate_span(span, *args) + try: + result = await query_method(*args, **kwargs) + span.set_status(Status(StatusCanonicalCode.OK)) + return result + except Exception as ex: # pylint: disable=broad-except + span.set_status(Status(StatusCanonicalCode.UNKNOWN, str(ex))) + raise ex + + +def get_traced_cursor_proxy(cursor, db_api_integration, *args, **kwargs): + _traced_cursor = AsyncTracedCursor(db_api_integration) + + # pylint: disable=abstract-method + class AsyncTracedCursorProxy(AsyncProxyObject): + + # pylint: disable=unused-argument + def __init__(self, cursor, *args, **kwargs): + super().__init__(cursor) + + async def execute(self, *args, **kwargs): + result = await _traced_cursor.traced_execution( + self.__wrapped__.execute, *args, **kwargs + ) + return result + + async def executemany(self, *args, **kwargs): + result = await _traced_cursor.traced_execution( + self.__wrapped__.executemany, *args, **kwargs + ) + return result + + async def callproc(self, *args, **kwargs): + result = await _traced_cursor.traced_execution( + self.__wrapped__.callproc, *args, **kwargs + ) + return result + + return AsyncTracedCursorProxy(cursor, *args, **kwargs) diff --git a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py new file mode 100644 index 00000000000..858e73960ff --- /dev/null +++ b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py @@ -0,0 +1,15 @@ +# Copyright The 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.11.dev0" diff --git a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/wrappers.py b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/wrappers.py new file mode 100644 index 00000000000..473c5039c32 --- /dev/null +++ b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/wrappers.py @@ -0,0 +1,223 @@ +# Copyright The 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 trace integration with aiopg based on dbapi integration, +where replaced sync wrap methods to async + +Usage +----- + +.. code-block:: python + + from opentelemetry import trace + from opentelemetry.instrumentation.aiopg import trace_integration + from opentelemetry.trace import TracerProvider + + trace.set_tracer_provider(TracerProvider()) + + trace_integration(aiopg.connection, "_connect", "postgresql", "sql") + +API +--- +""" +import logging +import typing + +import aiopg +import wrapt + +from opentelemetry.instrumentation.aiopg.aiopg_integration import ( + AiopgIntegration, + get_traced_connection_proxy, +) +from opentelemetry.instrumentation.aiopg.version import __version__ +from opentelemetry.instrumentation.utils import unwrap +from opentelemetry.trace import TracerProvider + +logger = logging.getLogger(__name__) + + +def trace_integration( + database_component: str, + database_type: str = "", + connection_attributes: typing.Dict = None, + tracer_provider: typing.Optional[TracerProvider] = None, +): + """Integrate with aiopg library. + based on dbapi integration, where replaced sync wrap methods to async + + Args: + database_component: Database driver name or + database name "postgreSQL". + database_type: The Database type. For any SQL database, "sql". + connection_attributes: Attribute names for database, port, host and + user in Connection object. + tracer_provider: The :class:`opentelemetry.trace.TracerProvider` to + use. If ommited the current configured one is used. + """ + + wrap_connect( + __name__, + database_component, + database_type, + connection_attributes, + __version__, + tracer_provider, + ) + + +def wrap_connect( + name: str, + database_component: str, + database_type: str = "", + connection_attributes: typing.Dict = None, + version: str = "", + tracer_provider: typing.Optional[TracerProvider] = None, +): + """Integrate with aiopg library. + https://github.com/aio-libs/aiopg + + Args: + name: Name of opentelemetry extension for aiopg. + database_component: Database driver name + or database name "postgreSQL". + database_type: The Database type. For any SQL database, "sql". + connection_attributes: Attribute names for database, port, host and + user in Connection object. + version: Version of opentelemetry extension for aiopg. + tracer_provider: The :class:`opentelemetry.trace.TracerProvider` to + use. If ommited the current configured one is used. + """ + + # pylint: disable=unused-argument + async def wrap_connect_( + wrapped: typing.Callable[..., typing.Any], + instance: typing.Any, + args: typing.Tuple[typing.Any, typing.Any], + kwargs: typing.Dict[typing.Any, typing.Any], + ): + db_integration = AiopgIntegration( + name, + database_component, + database_type=database_type, + connection_attributes=connection_attributes, + version=version, + tracer_provider=tracer_provider, + ) + return await db_integration.wrapped_connection(wrapped, args, kwargs) + + try: + wrapt.wrap_function_wrapper(aiopg, "connect", wrap_connect_) + except Exception as ex: # pylint: disable=broad-except + logger.warning("Failed to integrate with aiopg. %s", str(ex)) + + +def unwrap_connect(): + """"Disable integration with aiopg library. + https://github.com/aio-libs/aiopg + """ + + unwrap(aiopg, "connect") + + +def instrument_connection( + name: str, + connection, + database_component: str, + database_type: str = "", + connection_attributes: typing.Dict = None, + version: str = "", + tracer_provider: typing.Optional[TracerProvider] = None, +): + """Enable instrumentation in a database connection. + + Args: + name: Name of opentelemetry extension for aiopg. + connection: The connection to instrument. + database_component: Database driver name or database name "postgreSQL". + database_type: The Database type. For any SQL database, "sql". + connection_attributes: Attribute names for database, port, host and + user in a connection object. + version: Version of opentelemetry extension for aiopg. + tracer_provider: The :class:`opentelemetry.trace.TracerProvider` to + use. If ommited the current configured one is used. + + Returns: + An instrumented connection. + """ + db_integration = AiopgIntegration( + name, + database_component, + database_type, + connection_attributes=connection_attributes, + version=version, + tracer_provider=tracer_provider, + ) + db_integration.get_connection_attributes(connection) + return get_traced_connection_proxy(connection, db_integration) + + +def uninstrument_connection(connection): + """Disable instrumentation in a database connection. + + Args: + connection: The connection to uninstrument. + + Returns: + An uninstrumented connection. + """ + if isinstance(connection, wrapt.ObjectProxy): + return connection.__wrapped__ + + logger.warning("Connection is not instrumented") + return connection + + +def wrap_create_pool( + name: str, + database_component: str, + database_type: str = "", + connection_attributes: typing.Dict = None, + version: str = "", + tracer_provider: typing.Optional[TracerProvider] = None, +): + # pylint: disable=unused-argument + async def wrap_create_pool_( + wrapped: typing.Callable[..., typing.Any], + instance: typing.Any, + args: typing.Tuple[typing.Any, typing.Any], + kwargs: typing.Dict[typing.Any, typing.Any], + ): + db_integration = AiopgIntegration( + name, + database_component, + database_type, + connection_attributes=connection_attributes, + version=version, + tracer_provider=tracer_provider, + ) + return await db_integration.wrapped_pool(wrapped, args, kwargs) + + try: + wrapt.wrap_function_wrapper(aiopg, "create_pool", wrap_create_pool_) + except Exception as ex: # pylint: disable=broad-except + logger.warning("Failed to integrate with DB API. %s", str(ex)) + + +def unwrap_create_pool(): + """"Disable integration with aiopg library. + https://github.com/aio-libs/aiopg + """ + unwrap(aiopg, "create_pool") diff --git a/ext/opentelemetry-instrumentation-aiopg/tests/__init__.py b/ext/opentelemetry-instrumentation-aiopg/tests/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/ext/opentelemetry-instrumentation-aiopg/tests/test_aiopg_integration.py b/ext/opentelemetry-instrumentation-aiopg/tests/test_aiopg_integration.py new file mode 100644 index 00000000000..f7daf7ccc0f --- /dev/null +++ b/ext/opentelemetry-instrumentation-aiopg/tests/test_aiopg_integration.py @@ -0,0 +1,472 @@ +# Copyright The 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 asyncio +import logging +from unittest import mock +from unittest.mock import MagicMock + +import aiopg +from aiopg.utils import _ContextManager, _PoolAcquireContextManager + +import opentelemetry.instrumentation.aiopg +from opentelemetry import trace as trace_api +from opentelemetry.instrumentation.aiopg import AiopgInstrumentor, wrappers +from opentelemetry.instrumentation.aiopg.aiopg_integration import ( + AiopgIntegration, +) +from opentelemetry.sdk import resources +from opentelemetry.test.test_base import TestBase + + +def async_call(coro): + loop = asyncio.get_event_loop() + return loop.run_until_complete(coro) + + +class TestAiopgInstrumentor(TestBase): + def setUp(self): + super().setUp() + self.origin_aiopg_connect = aiopg.connect + self.origin_aiopg_create_pool = aiopg.create_pool + aiopg.connect = mock_connect + aiopg.create_pool = mock_create_pool + + def tearDown(self): + super().tearDown() + aiopg.connect = self.origin_aiopg_connect + aiopg.create_pool = self.origin_aiopg_create_pool + with self.disable_logging(): + AiopgInstrumentor().uninstrument() + + def test_instrumentor_connect(self): + AiopgInstrumentor().instrument() + + cnx = async_call(aiopg.connect(database="test")) + + cursor = async_call(cnx.cursor()) + + query = "SELECT * FROM test" + async_call(cursor.execute(query)) + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 1) + span = spans_list[0] + + # Check version and name in span's instrumentation info + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.aiopg + ) + + # check that no spans are generated after uninstrument + AiopgInstrumentor().uninstrument() + + cnx = async_call(aiopg.connect(database="test")) + cursor = async_call(cnx.cursor()) + query = "SELECT * FROM test" + cursor.execute(query) + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 1) + + def test_instrumentor_create_pool(self): + AiopgInstrumentor().instrument() + + pool = async_call(aiopg.create_pool(database="test")) + cnx = async_call(pool.acquire()) + cursor = async_call(cnx.cursor()) + + query = "SELECT * FROM test" + async_call(cursor.execute(query)) + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 1) + span = spans_list[0] + + # Check version and name in span's instrumentation info + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.aiopg + ) + + # check that no spans are generated after uninstrument + AiopgInstrumentor().uninstrument() + + pool = async_call(aiopg.create_pool(database="test")) + cnx = async_call(pool.acquire()) + cursor = async_call(cnx.cursor()) + query = "SELECT * FROM test" + cursor.execute(query) + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 1) + + def test_custom_tracer_provider_connect(self): + resource = resources.Resource.create({}) + result = self.create_tracer_provider(resource=resource) + tracer_provider, exporter = result + + AiopgInstrumentor().instrument(tracer_provider=tracer_provider) + + cnx = async_call(aiopg.connect(database="test")) + cursor = async_call(cnx.cursor()) + query = "SELECT * FROM test" + async_call(cursor.execute(query)) + + spans_list = exporter.get_finished_spans() + self.assertEqual(len(spans_list), 1) + span = spans_list[0] + self.assertIs(span.resource, resource) + + def test_custom_tracer_provider_create_pool(self): + resource = resources.Resource.create({}) + result = self.create_tracer_provider(resource=resource) + tracer_provider, exporter = result + + AiopgInstrumentor().instrument(tracer_provider=tracer_provider) + + pool = async_call(aiopg.create_pool(database="test")) + cnx = async_call(pool.acquire()) + cursor = async_call(cnx.cursor()) + query = "SELECT * FROM test" + async_call(cursor.execute(query)) + + spans_list = exporter.get_finished_spans() + self.assertEqual(len(spans_list), 1) + span = spans_list[0] + + self.assertIs(span.resource, resource) + + def test_instrument_connection(self): + cnx = async_call(aiopg.connect(database="test")) + query = "SELECT * FROM test" + cursor = async_call(cnx.cursor()) + async_call(cursor.execute(query)) + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 0) + + cnx = AiopgInstrumentor().instrument_connection(cnx) + cursor = async_call(cnx.cursor()) + async_call(cursor.execute(query)) + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 1) + + def test_uninstrument_connection(self): + AiopgInstrumentor().instrument() + cnx = async_call(aiopg.connect(database="test")) + query = "SELECT * FROM test" + cursor = async_call(cnx.cursor()) + async_call(cursor.execute(query)) + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 1) + + cnx = AiopgInstrumentor().uninstrument_connection(cnx) + cursor = async_call(cnx.cursor()) + async_call(cursor.execute(query)) + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 1) + + +class TestAiopgIntegration(TestBase): + def setUp(self): + super().setUp() + self.tracer = self.tracer_provider.get_tracer(__name__) + + def test_span_succeeded(self): + connection_props = { + "database": "testdatabase", + "server_host": "testhost", + "server_port": 123, + "user": "testuser", + } + connection_attributes = { + "database": "database", + "port": "server_port", + "host": "server_host", + "user": "user", + } + db_integration = AiopgIntegration( + self.tracer, "testcomponent", "testtype", connection_attributes + ) + mock_connection = async_call( + db_integration.wrapped_connection( + mock_connect, {}, connection_props + ) + ) + cursor = async_call(mock_connection.cursor()) + async_call(cursor.execute("Test query", ("param1Value", False))) + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 1) + span = spans_list[0] + self.assertEqual(span.name, "testcomponent.testdatabase") + self.assertIs(span.kind, trace_api.SpanKind.CLIENT) + + self.assertEqual(span.attributes["component"], "testcomponent") + self.assertEqual(span.attributes["db.type"], "testtype") + self.assertEqual(span.attributes["db.instance"], "testdatabase") + self.assertEqual(span.attributes["db.statement"], "Test query") + self.assertEqual( + span.attributes["db.statement.parameters"], + "('param1Value', False)", + ) + self.assertEqual(span.attributes["db.user"], "testuser") + self.assertEqual(span.attributes["net.peer.name"], "testhost") + self.assertEqual(span.attributes["net.peer.port"], 123) + self.assertIs( + span.status.canonical_code, + trace_api.status.StatusCanonicalCode.OK, + ) + + def test_span_failed(self): + db_integration = AiopgIntegration(self.tracer, "testcomponent") + mock_connection = async_call( + db_integration.wrapped_connection(mock_connect, {}, {}) + ) + cursor = async_call(mock_connection.cursor()) + with self.assertRaises(Exception): + async_call(cursor.execute("Test query", throw_exception=True)) + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 1) + span = spans_list[0] + self.assertEqual(span.attributes["db.statement"], "Test query") + self.assertIs( + span.status.canonical_code, + trace_api.status.StatusCanonicalCode.UNKNOWN, + ) + self.assertEqual(span.status.description, "Test Exception") + + def test_executemany(self): + db_integration = AiopgIntegration(self.tracer, "testcomponent") + mock_connection = async_call( + db_integration.wrapped_connection(mock_connect, {}, {}) + ) + cursor = async_call(mock_connection.cursor()) + async_call(cursor.executemany("Test query")) + spans_list = self.memory_exporter.get_finished_spans() + + self.assertEqual(len(spans_list), 1) + span = spans_list[0] + self.assertEqual(span.attributes["db.statement"], "Test query") + + def test_callproc(self): + db_integration = AiopgIntegration(self.tracer, "testcomponent") + mock_connection = async_call( + db_integration.wrapped_connection(mock_connect, {}, {}) + ) + cursor = async_call(mock_connection.cursor()) + async_call(cursor.callproc("Test stored procedure")) + spans_list = self.memory_exporter.get_finished_spans() + + self.assertEqual(len(spans_list), 1) + span = spans_list[0] + self.assertEqual( + span.attributes["db.statement"], "Test stored procedure" + ) + + def test_wrap_connect(self): + aiopg_mock = AiopgMock() + with mock.patch("aiopg.connect", aiopg_mock.connect): + wrappers.wrap_connect(self.tracer, "-") + connection = async_call(aiopg.connect()) + self.assertEqual(aiopg_mock.connect_call_count, 1) + self.assertIsInstance(connection.__wrapped__, mock.Mock) + + def test_unwrap_connect(self): + wrappers.wrap_connect(self.tracer, "-") + aiopg_mock = AiopgMock() + with mock.patch("aiopg.connect", aiopg_mock.connect): + connection = async_call(aiopg.connect()) + self.assertEqual(aiopg_mock.connect_call_count, 1) + wrappers.unwrap_connect() + connection = async_call(aiopg.connect()) + self.assertEqual(aiopg_mock.connect_call_count, 2) + self.assertIsInstance(connection, mock.Mock) + + def test_wrap_create_pool(self): + async def check_connection(pool): + async with pool.acquire() as connection: + self.assertEqual(aiopg_mock.create_pool_call_count, 1) + self.assertIsInstance( + connection.__wrapped__, AiopgConnectionMock + ) + + aiopg_mock = AiopgMock() + with mock.patch("aiopg.create_pool", aiopg_mock.create_pool): + wrappers.wrap_create_pool(self.tracer, "-") + pool = async_call(aiopg.create_pool()) + async_call(check_connection(pool)) + + def test_unwrap_create_pool(self): + async def check_connection(pool): + async with pool.acquire() as connection: + self.assertEqual(aiopg_mock.create_pool_call_count, 2) + self.assertIsInstance(connection, AiopgConnectionMock) + + aiopg_mock = AiopgMock() + with mock.patch("aiopg.create_pool", aiopg_mock.create_pool): + wrappers.wrap_create_pool(self.tracer, "-") + pool = async_call(aiopg.create_pool()) + self.assertEqual(aiopg_mock.create_pool_call_count, 1) + + wrappers.unwrap_create_pool() + pool = async_call(aiopg.create_pool()) + async_call(check_connection(pool)) + + def test_instrument_connection(self): + connection = mock.Mock() + # Avoid get_attributes failing because can't concatenate mock + connection.database = "-" + connection2 = wrappers.instrument_connection( + self.tracer, connection, "-" + ) + self.assertIs(connection2.__wrapped__, connection) + + def test_uninstrument_connection(self): + connection = mock.Mock() + # Set connection.database to avoid a failure because mock can't + # be concatenated + connection.database = "-" + connection2 = wrappers.instrument_connection( + self.tracer, connection, "-" + ) + self.assertIs(connection2.__wrapped__, connection) + + connection3 = wrappers.uninstrument_connection(connection2) + self.assertIs(connection3, connection) + + with self.assertLogs(level=logging.WARNING): + connection4 = wrappers.uninstrument_connection(connection) + self.assertIs(connection4, connection) + + +# pylint: disable=unused-argument +async def mock_connect(*args, **kwargs): + database = kwargs.get("database") + server_host = kwargs.get("server_host") + server_port = kwargs.get("server_port") + user = kwargs.get("user") + return MockConnection(database, server_port, server_host, user) + + +# pylint: disable=unused-argument +async def mock_create_pool(*args, **kwargs): + database = kwargs.get("database") + server_host = kwargs.get("server_host") + server_port = kwargs.get("server_port") + user = kwargs.get("user") + return MockPool(database, server_port, server_host, user) + + +class MockPool: + def __init__(self, database, server_port, server_host, user): + self.database = database + self.server_port = server_port + self.server_host = server_host + self.user = user + + async def release(self, conn): + return conn + + def acquire(self): + """Acquire free connection from the pool.""" + coro = self._acquire() + return _PoolAcquireContextManager(coro, self) + + async def _acquire(self): + connect = await mock_connect( + self.database, self.server_port, self.server_host, self.user + ) + return connect + + +class MockPsycopg2Connection: + def __init__(self, database, server_port, server_host, user): + self.database = database + self.server_port = server_port + self.server_host = server_host + self.user = user + + +class MockConnection: + def __init__(self, database, server_port, server_host, user): + self._conn = MockPsycopg2Connection( + database, server_port, server_host, user + ) + + # pylint: disable=no-self-use + def cursor(self): + coro = self._cursor() + return _ContextManager(coro) + + async def _cursor(self): + return MockCursor() + + def close(self): + pass + + +class MockCursor: + # pylint: disable=unused-argument, no-self-use + async def execute(self, query, params=None, throw_exception=False): + if throw_exception: + raise Exception("Test Exception") + + # pylint: disable=unused-argument, no-self-use + async def executemany(self, query, params=None, throw_exception=False): + if throw_exception: + raise Exception("Test Exception") + + # pylint: disable=unused-argument, no-self-use + async def callproc(self, query, params=None, throw_exception=False): + if throw_exception: + raise Exception("Test Exception") + + +class AiopgConnectionMock: + _conn = MagicMock() + + async def __aexit__(self, exc_type, exc_val, exc_tb): + pass + + async def __aenter__(self): + return MagicMock() + + +class AiopgPoolMock: + async def release(self, conn): + return conn + + def acquire(self): + coro = self._acquire() + return _PoolAcquireContextManager(coro, self) + + async def _acquire(self): + return AiopgConnectionMock() + + +class AiopgMock: + def __init__(self): + self.connect_call_count = 0 + self.create_pool_call_count = 0 + + async def connect(self, *args, **kwargs): + self.connect_call_count += 1 + return MagicMock() + + async def create_pool(self, *args, **kwargs): + self.create_pool_call_count += 1 + return AiopgPoolMock() diff --git a/tox.ini b/tox.ini index ad7b8ad3e92..f956733d566 100644 --- a/tox.ini +++ b/tox.ini @@ -32,6 +32,10 @@ envlist = py3{5,6,7,8}-test-instrumentation-aiohttp-client pypy3-test-instrumentation-aiohttp-client + ; opentelemetry-instrumentation-aiopg + py3{5,6,7,8}-test-instrumentation-aiopg + ; instrumentation-aiopg intentionally excluded from pypy3 + ; opentelemetry-ext-botocore py3{6,7,8}-test-instrumentation-botocore pypy3-test-instrumentation-botocore @@ -116,7 +120,7 @@ envlist = ; opentelemetry-ext-pyramid py3{4,5,6,7,8}-test-instrumentation-pyramid pypy3-test-instrumentation-pyramid - + ; opentelemetry-ext-asgi py3{5,6,7,8}-test-instrumentation-asgi pypy3-test-instrumentation-asgi @@ -194,6 +198,7 @@ changedir = test-core-opentracing-shim: ext/opentelemetry-ext-opentracing-shim/tests test-instrumentation-aiohttp-client: ext/opentelemetry-ext-aiohttp-client/tests + test-instrumentation-aiopg: ext/opentelemetry-instrumentation-aiopg/tests test-instrumentation-asgi: ext/opentelemetry-ext-asgi/tests test-instrumentation-asyncpg: ext/opentelemetry-ext-asyncpg/tests test-instrumentation-boto: ext/opentelemetry-ext-boto/tests @@ -295,6 +300,8 @@ commands_pre = aiohttp-client: pip install {toxinidir}/opentelemetry-sdk {toxinidir}/ext/opentelemetry-ext-aiohttp-client + aiopg: pip install {toxinidir}/ext/opentelemetry-ext-dbapi pip install {toxinidir}/ext/opentelemetry-instrumentation-aiopg[test] + jaeger: pip install {toxinidir}/ext/opentelemetry-ext-jaeger opentracing-shim: pip install {toxinidir}/opentelemetry-sdk @@ -392,6 +399,7 @@ deps = pymongo ~= 3.1 pymysql ~= 0.9.3 psycopg2-binary ~= 2.8.4 + aiopg >= 0.13.0 sqlalchemy ~= 1.3.16 redis ~= 3.3.11 celery ~= 4.0, != 4.4.4 @@ -412,6 +420,7 @@ commands_pre = -e {toxinidir}/ext/opentelemetry-ext-pymongo \ -e {toxinidir}/ext/opentelemetry-ext-pymysql \ -e {toxinidir}/ext/opentelemetry-ext-sqlalchemy \ + -e {toxinidir}/ext/opentelemetry-instrumentation-aiopg \ -e {toxinidir}/ext/opentelemetry-ext-redis \ -e {toxinidir}/ext/opentelemetry-ext-system-metrics \ -e {toxinidir}/ext/opentelemetry-ext-opencensusexporter From 935280c3b8820351d9761c786148f1ff0e9b120d Mon Sep 17 00:00:00 2001 From: alrex Date: Fri, 24 Jul 2020 08:48:44 -0700 Subject: [PATCH 03/15] api/sdk: Rename record_error to record_exception per spec (#927) --- opentelemetry-api/CHANGELOG.md | 2 ++ .../src/opentelemetry/trace/span.py | 6 +++--- opentelemetry-sdk/CHANGELOG.md | 2 ++ .../src/opentelemetry/sdk/trace/__init__.py | 12 ++++++------ opentelemetry-sdk/tests/trace/test_trace.py | 19 ++++++++++++------- 5 files changed, 25 insertions(+), 16 deletions(-) diff --git a/opentelemetry-api/CHANGELOG.md b/opentelemetry-api/CHANGELOG.md index 413946b85b9..d6348459917 100644 --- a/opentelemetry-api/CHANGELOG.md +++ b/opentelemetry-api/CHANGELOG.md @@ -4,6 +4,8 @@ - Return INVALID_SPAN if no TracerProvider set for get_current_span ([#751](https://github.com/open-telemetry/opentelemetry-python/pull/751)) +- Rename record_error to record_exception + ([#927](https://github.com/open-telemetry/opentelemetry-python/pull/927)) ## 0.9b0 diff --git a/opentelemetry-api/src/opentelemetry/trace/span.py b/opentelemetry-api/src/opentelemetry/trace/span.py index baea6670f63..d207ecf565b 100644 --- a/opentelemetry-api/src/opentelemetry/trace/span.py +++ b/opentelemetry-api/src/opentelemetry/trace/span.py @@ -89,8 +89,8 @@ def set_status(self, status: Status) -> None: """ @abc.abstractmethod - def record_error(self, err: Exception) -> None: - """Records an error as a span event.""" + def record_exception(self, exception: Exception) -> None: + """Records an exception as a span event.""" def __enter__(self) -> "Span": """Invoked when `Span` is used as a context manager. @@ -257,7 +257,7 @@ def update_name(self, name: str) -> None: def set_status(self, status: Status) -> None: pass - def record_error(self, err: Exception) -> None: + def record_exception(self, exception: Exception) -> None: pass diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md index 46ad8b8e29c..6427b2c9b51 100644 --- a/opentelemetry-sdk/CHANGELOG.md +++ b/opentelemetry-sdk/CHANGELOG.md @@ -4,6 +4,8 @@ - Add support for resources and resource detector ([#853](https://github.com/open-telemetry/opentelemetry-python/pull/853)) +- Rename record_error to record_exception + ([#927](https://github.com/open-telemetry/opentelemetry-python/pull/927)) ## Version 0.10b0 diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index 1118b424888..848f571e6a8 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -683,14 +683,14 @@ def __exit__( super().__exit__(exc_type, exc_val, exc_tb) - def record_error(self, err: Exception) -> None: - """Records an error as a span event.""" + def record_exception(self, exception: Exception) -> None: + """Records an exception as a span event.""" self.add_event( - name="error", + name="exception", attributes={ - "error.type": err.__class__.__name__, - "error.message": str(err), - "error.stack": traceback.format_exc(), + "exception.type": exception.__class__.__name__, + "exception.message": str(exception), + "exception.stacktrace": traceback.format_exc(), }, ) diff --git a/opentelemetry-sdk/tests/trace/test_trace.py b/opentelemetry-sdk/tests/trace/test_trace.py index a43db73a3da..02cc836e882 100644 --- a/opentelemetry-sdk/tests/trace/test_trace.py +++ b/opentelemetry-sdk/tests/trace/test_trace.py @@ -801,18 +801,23 @@ def error_status_test(context): .start_as_current_span("root") ) - def test_record_error(self): + def test_record_exception(self): span = trace.Span("name", mock.Mock(spec=trace_api.SpanContext)) try: raise ValueError("invalid") except ValueError as err: - span.record_error(err) - error_event = span.events[0] - self.assertEqual("error", error_event.name) - self.assertEqual("invalid", error_event.attributes["error.message"]) - self.assertEqual("ValueError", error_event.attributes["error.type"]) + span.record_exception(err) + exception_event = span.events[0] + self.assertEqual("exception", exception_event.name) + self.assertEqual( + "invalid", exception_event.attributes["exception.message"] + ) + self.assertEqual( + "ValueError", exception_event.attributes["exception.type"] + ) self.assertIn( - "ValueError: invalid", error_event.attributes["error.stack"] + "ValueError: invalid", + exception_event.attributes["exception.stacktrace"], ) From 004896f1987e84b2d8f5c84bb1505099e178694c Mon Sep 17 00:00:00 2001 From: achronak Date: Fri, 24 Jul 2020 21:43:19 +0300 Subject: [PATCH 04/15] docs: Update README.rst (#935) --- docs/examples/basic_meter/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/examples/basic_meter/README.rst b/docs/examples/basic_meter/README.rst index d77fbb7c4bb..46efe363883 100644 --- a/docs/examples/basic_meter/README.rst +++ b/docs/examples/basic_meter/README.rst @@ -5,7 +5,7 @@ These examples show how to use OpenTelemetry to capture and report metrics. There are three different examples: -* basic_metrics: Shows to how create a metric instrument, how to configure an +* basic_metrics: Shows how to create a metric instrument, how to configure an exporter and a controller and also how to capture data by using the direct calling convention. From 4a922d6b4f3a0f3c624b401a7d249fca0af996ce Mon Sep 17 00:00:00 2001 From: alrex Date: Mon, 27 Jul 2020 08:05:09 -0700 Subject: [PATCH 05/15] meta: adding aabmass as approver (#941) once approved the PR, aabmass will be added to the approvers team --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c4e335589d6..624166d25e2 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,7 @@ Meeting notes are available as a public [Google doc](https://docs.google.com/doc Approvers ([@open-telemetry/python-approvers](https://github.com/orgs/open-telemetry/teams/python-approvers)): +- [Aaron Abbott](https://github.com/aabmass), Google - [Carlos Alberto Cortez](https://github.com/carlosalberto), Lightstep - [Tahir H. Butt](https://github.com/majorgreys) DataDog - [Chris Kleinknecht](https://github.com/c24t), Google From 090fb7c68417270339a4486574f51b6960d82944 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mauricio=20V=C3=A1squez?= Date: Mon, 27 Jul 2020 17:44:39 -0500 Subject: [PATCH 06/15] Drop mauriciovasquezbernal from approvers (#948) I haven't contributed to the project in a while and I don't expect to start contributing again. This commit removes myself as an approver of the project. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 624166d25e2..a402e5c73e9 100644 --- a/README.md +++ b/README.md @@ -109,7 +109,6 @@ Approvers ([@open-telemetry/python-approvers](https://github.com/orgs/open-telem - [Chris Kleinknecht](https://github.com/c24t), Google - [Diego Hurtado](https://github.com/ocelotl) - [Hector Hernandez](https://github.com/hectorhdzg), Microsoft -- [Mauricio Vásquez](https://github.com/mauriciovasquezbernal), Kinvolk - [Reiley Yang](https://github.com/reyang), Microsoft - [Yusuke Tsutsumi](https://github.com/toumorokoshi), Google From 7f74a890086de2dc0fd34a6ba6d926b3b3fd82e5 Mon Sep 17 00:00:00 2001 From: Thomas Desrosiers <681004+thomasdesr@users.noreply.github.com> Date: Tue, 28 Jul 2020 11:40:32 -0400 Subject: [PATCH 07/15] ext/asyncpg: Shouldn't capture query parameters by default (#854) * Update CHANGELOG.md Co-authored-by: alrex --- ext/opentelemetry-ext-asyncpg/CHANGELOG.md | 3 + .../src/opentelemetry/ext/asyncpg/__init__.py | 66 ++++--- .../tests/asyncpg/test_asyncpg_functional.py | 176 +++++++++++------- 3 files changed, 150 insertions(+), 95 deletions(-) diff --git a/ext/opentelemetry-ext-asyncpg/CHANGELOG.md b/ext/opentelemetry-ext-asyncpg/CHANGELOG.md index e81079bfb8c..052b66ea4e5 100644 --- a/ext/opentelemetry-ext-asyncpg/CHANGELOG.md +++ b/ext/opentelemetry-ext-asyncpg/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Shouldn't capture query parameters by default + ([#854](https://github.com/open-telemetry/opentelemetry-python/pull/854)) + ## Version 0.10b0 Released 2020-06-23 diff --git a/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/__init__.py b/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/__init__.py index c373d7194dc..4a3a51ac08d 100644 --- a/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/__init__.py +++ b/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/__init__.py @@ -74,36 +74,11 @@ def _hydrate_span_from_args(connection, query, parameters) -> dict: return span_attributes -async def _do_execute(func, instance, args, kwargs): - span_attributes = _hydrate_span_from_args(instance, args[0], args[1:]) - tracer = getattr(asyncpg, _APPLIED) - - exception = None - - with tracer.start_as_current_span( - "postgresql", kind=SpanKind.CLIENT - ) as span: - - for attribute, value in span_attributes.items(): - span.set_attribute(attribute, value) - - try: - result = await func(*args, **kwargs) - except Exception as exc: # pylint: disable=W0703 - exception = exc - raise - finally: - if exception is not None: - span.set_status( - Status(_exception_to_canonical_code(exception)) - ) - else: - span.set_status(Status(StatusCanonicalCode.OK)) - - return result - - class AsyncPGInstrumentor(BaseInstrumentor): + def __init__(self, capture_parameters=False): + super().__init__() + self.capture_parameters = capture_parameters + def _instrument(self, **kwargs): tracer_provider = kwargs.get( "tracer_provider", trace.get_tracer_provider() @@ -113,6 +88,7 @@ def _instrument(self, **kwargs): _APPLIED, tracer_provider.get_tracer("asyncpg", __version__), ) + for method in [ "Connection.execute", "Connection.executemany", @@ -121,7 +97,7 @@ def _instrument(self, **kwargs): "Connection.fetchrow", ]: wrapt.wrap_function_wrapper( - "asyncpg.connection", method, _do_execute + "asyncpg.connection", method, self._do_execute ) def _uninstrument(self, **__): @@ -134,3 +110,33 @@ def _uninstrument(self, **__): "fetchrow", ]: unwrap(asyncpg.Connection, method) + + async def _do_execute(self, func, instance, args, kwargs): + span_attributes = _hydrate_span_from_args( + instance, args[0], args[1:] if self.capture_parameters else None, + ) + tracer = getattr(asyncpg, _APPLIED) + + exception = None + + with tracer.start_as_current_span( + "postgresql", kind=SpanKind.CLIENT + ) as span: + + for attribute, value in span_attributes.items(): + span.set_attribute(attribute, value) + + try: + result = await func(*args, **kwargs) + except Exception as exc: # pylint: disable=W0703 + exception = exc + raise + finally: + if exception is not None: + span.set_status( + Status(_exception_to_canonical_code(exception)) + ) + else: + span.set_status(Status(StatusCanonicalCode.OK)) + + return result diff --git a/ext/opentelemetry-ext-docker-tests/tests/asyncpg/test_asyncpg_functional.py b/ext/opentelemetry-ext-docker-tests/tests/asyncpg/test_asyncpg_functional.py index c5f55574381..d3060592a64 100644 --- a/ext/opentelemetry-ext-docker-tests/tests/asyncpg/test_asyncpg_functional.py +++ b/ext/opentelemetry-ext-docker-tests/tests/asyncpg/test_asyncpg_functional.py @@ -19,7 +19,7 @@ def _await(coro): return loop.run_until_complete(coro) -class TestFunctionalPsycopg(TestBase): +class TestFunctionalAsyncPG(TestBase): @classmethod def setUpClass(cls): super().setUpClass() @@ -58,24 +58,6 @@ def test_instrumented_execute_method_without_arguments(self, *_, **__): }, ) - def test_instrumented_execute_method_with_arguments(self, *_, **__): - _await(self._connection.execute("SELECT $1;", "1")) - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - self.assertEqual( - StatusCanonicalCode.OK, spans[0].status.canonical_code - ) - self.assertEqual( - spans[0].attributes, - { - "db.type": "sql", - "db.user": POSTGRES_USER, - "db.statement.parameters": "('1',)", - "db.instance": POSTGRES_DB_NAME, - "db.statement": "SELECT $1;", - }, - ) - def test_instrumented_fetch_method_without_arguments(self, *_, **__): _await(self._connection.fetch("SELECT 42;")) spans = self.memory_exporter.get_finished_spans() @@ -90,52 +72,6 @@ def test_instrumented_fetch_method_without_arguments(self, *_, **__): }, ) - def test_instrumented_fetch_method_with_arguments(self, *_, **__): - _await(self._connection.fetch("SELECT $1;", "1")) - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - self.assertEqual( - spans[0].attributes, - { - "db.type": "sql", - "db.user": POSTGRES_USER, - "db.statement.parameters": "('1',)", - "db.instance": POSTGRES_DB_NAME, - "db.statement": "SELECT $1;", - }, - ) - - def test_instrumented_executemany_method_with_arguments(self, *_, **__): - _await(self._connection.executemany("SELECT $1;", [["1"], ["2"]])) - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - self.assertEqual( - { - "db.type": "sql", - "db.statement": "SELECT $1;", - "db.statement.parameters": "([['1'], ['2']],)", - "db.user": POSTGRES_USER, - "db.instance": POSTGRES_DB_NAME, - }, - spans[0].attributes, - ) - - def test_instrumented_execute_interface_error_method(self, *_, **__): - with self.assertRaises(asyncpg.InterfaceError): - _await(self._connection.execute("SELECT 42;", 1, 2, 3)) - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - self.assertEqual( - spans[0].attributes, - { - "db.type": "sql", - "db.instance": POSTGRES_DB_NAME, - "db.user": POSTGRES_USER, - "db.statement.parameters": "(1, 2, 3)", - "db.statement": "SELECT 42;", - }, - ) - def test_instrumented_transaction_method(self, *_, **__): async def _transaction_execute(): async with self._connection.transaction(): @@ -229,3 +165,113 @@ async def _transaction_execute(): self.assertEqual( StatusCanonicalCode.OK, spans[2].status.canonical_code ) + + def test_instrumented_method_doesnt_capture_parameters(self, *_, **__): + _await(self._connection.execute("SELECT $1;", "1")) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + self.assertEqual( + StatusCanonicalCode.OK, spans[0].status.canonical_code + ) + self.assertEqual( + spans[0].attributes, + { + "db.type": "sql", + "db.user": POSTGRES_USER, + # This shouldn't be set because we don't capture parameters by + # default + # + # "db.statement.parameters": "('1',)", + "db.instance": POSTGRES_DB_NAME, + "db.statement": "SELECT $1;", + }, + ) + + +class TestFunctionalAsyncPG_CaptureParameters(TestBase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls._connection = None + cls._cursor = None + cls._tracer = cls.tracer_provider.get_tracer(__name__) + AsyncPGInstrumentor(capture_parameters=True).instrument( + tracer_provider=cls.tracer_provider + ) + cls._connection = _await( + asyncpg.connect( + database=POSTGRES_DB_NAME, + user=POSTGRES_USER, + password=POSTGRES_PASSWORD, + host=POSTGRES_HOST, + port=POSTGRES_PORT, + ) + ) + + @classmethod + def tearDownClass(cls): + AsyncPGInstrumentor().uninstrument() + + def test_instrumented_execute_method_with_arguments(self, *_, **__): + _await(self._connection.execute("SELECT $1;", "1")) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + self.assertEqual( + StatusCanonicalCode.OK, spans[0].status.canonical_code + ) + self.assertEqual( + spans[0].attributes, + { + "db.type": "sql", + "db.user": POSTGRES_USER, + "db.statement.parameters": "('1',)", + "db.instance": POSTGRES_DB_NAME, + "db.statement": "SELECT $1;", + }, + ) + + def test_instrumented_fetch_method_with_arguments(self, *_, **__): + _await(self._connection.fetch("SELECT $1;", "1")) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + self.assertEqual( + spans[0].attributes, + { + "db.type": "sql", + "db.user": POSTGRES_USER, + "db.statement.parameters": "('1',)", + "db.instance": POSTGRES_DB_NAME, + "db.statement": "SELECT $1;", + }, + ) + + def test_instrumented_executemany_method_with_arguments(self, *_, **__): + _await(self._connection.executemany("SELECT $1;", [["1"], ["2"]])) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + self.assertEqual( + { + "db.type": "sql", + "db.statement": "SELECT $1;", + "db.statement.parameters": "([['1'], ['2']],)", + "db.user": POSTGRES_USER, + "db.instance": POSTGRES_DB_NAME, + }, + spans[0].attributes, + ) + + def test_instrumented_execute_interface_error_method(self, *_, **__): + with self.assertRaises(asyncpg.InterfaceError): + _await(self._connection.execute("SELECT 42;", 1, 2, 3)) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + self.assertEqual( + spans[0].attributes, + { + "db.type": "sql", + "db.instance": POSTGRES_DB_NAME, + "db.user": POSTGRES_USER, + "db.statement.parameters": "(1, 2, 3)", + "db.statement": "SELECT 42;", + }, + ) From 8bc7786b191b4f1b1f161de983db71643bf9f51e Mon Sep 17 00:00:00 2001 From: alrex Date: Tue, 28 Jul 2020 09:18:19 -0700 Subject: [PATCH 08/15] chore: create pull_request_template.md (#952) --- .github/pull_request_template.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000000..2281d05e176 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,27 @@ +# Description + +Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. + +Fixes # (issue) + +## Type of change + +Please delete options that are not relevant. + +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) +- [ ] This change requires a documentation update + +# How Has This Been Tested? + +Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration + +- [ ] Test A + +# Checklist: + +- [ ] Followed the style guidelines of this project +- [ ] Changelogs have been updated +- [ ] Unit tests have been added +- [ ] Documentation has been updated From f682cf57a90828f24969281a98980a7dafe0ee26 Mon Sep 17 00:00:00 2001 From: alrex Date: Tue, 28 Jul 2020 13:26:40 -0700 Subject: [PATCH 09/15] release: updating versions and changelogs (#954) --- docs/examples/opentelemetry-example-app/setup.cfg | 8 ++++---- .../src/opentelemetry_example_app/version.py | 2 +- ext/opentelemetry-ext-aiohttp-client/setup.cfg | 4 ++-- .../src/opentelemetry/ext/aiohttp_client/version.py | 2 +- ext/opentelemetry-ext-asgi/setup.cfg | 4 ++-- .../src/opentelemetry/ext/asgi/version.py | 2 +- ext/opentelemetry-ext-asyncpg/CHANGELOG.md | 4 ++++ ext/opentelemetry-ext-asyncpg/setup.cfg | 6 +++--- .../src/opentelemetry/ext/asyncpg/version.py | 2 +- ext/opentelemetry-ext-boto/CHANGELOG.md | 4 ++++ ext/opentelemetry-ext-boto/setup.cfg | 6 +++--- .../src/opentelemetry/ext/boto/version.py | 2 +- ext/opentelemetry-ext-botocore/CHANGELOG.md | 4 ++++ ext/opentelemetry-ext-botocore/setup.cfg | 6 +++--- .../src/opentelemetry/ext/botocore/version.py | 2 +- ext/opentelemetry-ext-celery/setup.cfg | 6 +++--- .../src/opentelemetry/ext/celery/version.py | 2 +- ext/opentelemetry-ext-datadog/setup.cfg | 4 ++-- .../src/opentelemetry/ext/datadog/version.py | 2 +- ext/opentelemetry-ext-dbapi/setup.cfg | 6 +++--- .../src/opentelemetry/ext/dbapi/version.py | 2 +- ext/opentelemetry-ext-django/CHANGELOG.md | 4 ++++ ext/opentelemetry-ext-django/setup.cfg | 8 ++++---- .../src/opentelemetry/ext/django/version.py | 2 +- ext/opentelemetry-ext-elasticsearch/setup.cfg | 6 +++--- .../src/opentelemetry/ext/elasticsearch/version.py | 2 +- ext/opentelemetry-ext-flask/CHANGELOG.md | 4 ++++ ext/opentelemetry-ext-flask/setup.cfg | 8 ++++---- .../src/opentelemetry/ext/flask/version.py | 2 +- ext/opentelemetry-ext-grpc/CHANGELOG.md | 4 ++++ ext/opentelemetry-ext-grpc/setup.cfg | 6 +++--- .../src/opentelemetry/ext/grpc/version.py | 2 +- ext/opentelemetry-ext-jaeger/setup.cfg | 4 ++-- .../src/opentelemetry/ext/jaeger/version.py | 2 +- ext/opentelemetry-ext-jinja2/setup.cfg | 6 +++--- .../src/opentelemetry/ext/jinja2/version.py | 2 +- ext/opentelemetry-ext-mysql/CHANGELOG.md | 4 ++++ ext/opentelemetry-ext-mysql/setup.cfg | 8 ++++---- .../src/opentelemetry/ext/mysql/version.py | 2 +- ext/opentelemetry-ext-opencensusexporter/setup.cfg | 4 ++-- .../src/opentelemetry/ext/opencensusexporter/version.py | 2 +- ext/opentelemetry-ext-opentracing-shim/setup.cfg | 4 ++-- .../src/opentelemetry/ext/opentracing_shim/version.py | 2 +- ext/opentelemetry-ext-otlp/CHANGELOG.md | 4 ++++ ext/opentelemetry-ext-otlp/setup.cfg | 6 +++--- .../src/opentelemetry/ext/otlp/version.py | 2 +- ext/opentelemetry-ext-prometheus/setup.cfg | 4 ++-- .../src/opentelemetry/ext/prometheus/version.py | 2 +- ext/opentelemetry-ext-psycopg2/setup.cfg | 8 ++++---- .../src/opentelemetry/ext/psycopg2/version.py | 2 +- ext/opentelemetry-ext-pymemcache/setup.cfg | 6 +++--- .../src/opentelemetry/ext/pymemcache/version.py | 2 +- ext/opentelemetry-ext-pymongo/setup.cfg | 6 +++--- .../src/opentelemetry/ext/pymongo/version.py | 2 +- ext/opentelemetry-ext-pymysql/setup.cfg | 8 ++++---- .../src/opentelemetry/ext/pymysql/version.py | 2 +- ext/opentelemetry-ext-pyramid/CHANGELOG.md | 4 ++++ ext/opentelemetry-ext-pyramid/setup.cfg | 8 ++++---- .../src/opentelemetry/ext/pyramid/version.py | 2 +- ext/opentelemetry-ext-redis/setup.cfg | 8 ++++---- .../src/opentelemetry/ext/redis/version.py | 2 +- ext/opentelemetry-ext-requests/setup.cfg | 6 +++--- .../src/opentelemetry/ext/requests/version.py | 2 +- ext/opentelemetry-ext-sqlalchemy/setup.cfg | 6 +++--- .../src/opentelemetry/ext/sqlalchemy/version.py | 2 +- ext/opentelemetry-ext-sqlite3/setup.cfg | 8 ++++---- .../src/opentelemetry/ext/sqlite3/version.py | 2 +- ext/opentelemetry-ext-system-metrics/setup.cfg | 4 ++-- .../src/opentelemetry/ext/system_metrics/version.py | 2 +- ext/opentelemetry-ext-wsgi/CHANGELOG.md | 4 ++++ ext/opentelemetry-ext-wsgi/setup.cfg | 6 +++--- .../src/opentelemetry/ext/wsgi/version.py | 2 +- ext/opentelemetry-ext-zipkin/setup.cfg | 4 ++-- .../src/opentelemetry/ext/zipkin/version.py | 2 +- ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md | 4 ++++ ext/opentelemetry-instrumentation-aiopg/setup.cfg | 8 ++++---- .../src/opentelemetry/instrumentation/aiopg/version.py | 2 +- ext/opentelemetry-instrumentation-fastapi/CHANGELOG.md | 4 ++++ ext/opentelemetry-instrumentation-fastapi/setup.cfg | 6 +++--- .../src/opentelemetry/instrumentation/fastapi/version.py | 2 +- ext/opentelemetry-instrumentation-starlette/setup.cfg | 6 +++--- .../opentelemetry/instrumentation/starlette/version.py | 2 +- opentelemetry-api/CHANGELOG.md | 4 ++++ opentelemetry-api/src/opentelemetry/version.py | 2 +- opentelemetry-instrumentation/setup.cfg | 2 +- .../src/opentelemetry/instrumentation/version.py | 2 +- opentelemetry-proto/src/opentelemetry/proto/version.py | 2 +- opentelemetry-sdk/CHANGELOG.md | 4 ++++ opentelemetry-sdk/setup.cfg | 2 +- opentelemetry-sdk/src/opentelemetry/sdk/version.py | 2 +- tests/util/src/opentelemetry/test/version.py | 2 +- 91 files changed, 204 insertions(+), 148 deletions(-) diff --git a/docs/examples/opentelemetry-example-app/setup.cfg b/docs/examples/opentelemetry-example-app/setup.cfg index 185229dc920..8905023bbff 100644 --- a/docs/examples/opentelemetry-example-app/setup.cfg +++ b/docs/examples/opentelemetry-example-app/setup.cfg @@ -43,10 +43,10 @@ zip_safe = False include_package_data = True install_requires = typing; python_version<'3.5' - opentelemetry-api == 0.11.dev0 - opentelemetry-sdk == 0.11.dev0 - opentelemetry-ext-requests == 0.11.dev0 - opentelemetry-ext-flask == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-sdk == 0.11b0 + opentelemetry-ext-requests == 0.11b0 + opentelemetry-ext-flask == 0.11b0 flask requests protobuf~=3.11 diff --git a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py index 858e73960ff..15e8d9536da 100644 --- a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py +++ b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-aiohttp-client/setup.cfg b/ext/opentelemetry-ext-aiohttp-client/setup.cfg index 157b6918033..9044083ff72 100644 --- a/ext/opentelemetry-ext-aiohttp-client/setup.cfg +++ b/ext/opentelemetry-ext-aiohttp-client/setup.cfg @@ -39,8 +39,8 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api >= 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api >= 0.11b0 + opentelemetry-instrumentation == 0.11b0 aiohttp ~= 3.0 [options.packages.find] diff --git a/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py b/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py index 5924968fb21..ae93e514558 100644 --- a/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py +++ b/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-asgi/setup.cfg b/ext/opentelemetry-ext-asgi/setup.cfg index 75b4c12f833..9183287f0d2 100644 --- a/ext/opentelemetry-ext-asgi/setup.cfg +++ b/ext/opentelemetry-ext-asgi/setup.cfg @@ -39,8 +39,8 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-instrumentation == 0.11b0 asgiref ~= 3.0 [options.extras_require] diff --git a/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py b/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py +++ b/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-asyncpg/CHANGELOG.md b/ext/opentelemetry-ext-asyncpg/CHANGELOG.md index 052b66ea4e5..2dc9ad6f044 100644 --- a/ext/opentelemetry-ext-asyncpg/CHANGELOG.md +++ b/ext/opentelemetry-ext-asyncpg/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## Version 0.11b0 + +Released 2020-07-28 + - Shouldn't capture query parameters by default ([#854](https://github.com/open-telemetry/opentelemetry-python/pull/854)) diff --git a/ext/opentelemetry-ext-asyncpg/setup.cfg b/ext/opentelemetry-ext-asyncpg/setup.cfg index 786e69f6ee9..2eaa54b8477 100644 --- a/ext/opentelemetry-ext-asyncpg/setup.cfg +++ b/ext/opentelemetry-ext-asyncpg/setup.cfg @@ -39,13 +39,13 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-instrumentation == 0.11b0 asyncpg >= 0.12.0 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py b/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py +++ b/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-boto/CHANGELOG.md b/ext/opentelemetry-ext-boto/CHANGELOG.md index 612b73b39a1..ec62b405955 100644 --- a/ext/opentelemetry-ext-boto/CHANGELOG.md +++ b/ext/opentelemetry-ext-boto/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## Version 0.11b0 + +Released 2020-07-28 + - ext/boto and ext/botocore: fails to export spans via jaeger ([#866](https://github.com/open-telemetry/opentelemetry-python/pull/866)) diff --git a/ext/opentelemetry-ext-boto/setup.cfg b/ext/opentelemetry-ext-boto/setup.cfg index 64a9932756c..a9e0ec9f4e6 100644 --- a/ext/opentelemetry-ext-boto/setup.cfg +++ b/ext/opentelemetry-ext-boto/setup.cfg @@ -41,14 +41,14 @@ package_dir= packages=find_namespace: install_requires = boto ~= 2.0 - opentelemetry-api == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-instrumentation == 0.11b0 [options.extras_require] test = boto~=2.0 moto~=1.0 - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py b/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py +++ b/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-botocore/CHANGELOG.md b/ext/opentelemetry-ext-botocore/CHANGELOG.md index ccdc954a6b7..ac8d9c4a514 100644 --- a/ext/opentelemetry-ext-botocore/CHANGELOG.md +++ b/ext/opentelemetry-ext-botocore/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## Version 0.11b0 + +Released 2020-07-28 + - ext/boto and ext/botocore: fails to export spans via jaeger ([#866](https://github.com/open-telemetry/opentelemetry-python/pull/866)) diff --git a/ext/opentelemetry-ext-botocore/setup.cfg b/ext/opentelemetry-ext-botocore/setup.cfg index 9e0aabfd23b..5e2d0e0b35d 100644 --- a/ext/opentelemetry-ext-botocore/setup.cfg +++ b/ext/opentelemetry-ext-botocore/setup.cfg @@ -41,13 +41,13 @@ package_dir= packages=find_namespace: install_requires = botocore ~= 1.0 - opentelemetry-api == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-instrumentation == 0.11b0 [options.extras_require] test = moto ~= 1.0 - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py b/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py +++ b/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-celery/setup.cfg b/ext/opentelemetry-ext-celery/setup.cfg index 67609b2c2c9..d70e0f7b011 100644 --- a/ext/opentelemetry-ext-celery/setup.cfg +++ b/ext/opentelemetry-ext-celery/setup.cfg @@ -39,14 +39,14 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-instrumentation == 0.11b0 celery ~= 4.0 [options.extras_require] test = pytest - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py b/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py +++ b/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-datadog/setup.cfg b/ext/opentelemetry-ext-datadog/setup.cfg index d97bcdaa69f..62ffd1c907b 100644 --- a/ext/opentelemetry-ext-datadog/setup.cfg +++ b/ext/opentelemetry-ext-datadog/setup.cfg @@ -40,8 +40,8 @@ package_dir= packages=find_namespace: install_requires = ddtrace>=0.34.0 - opentelemetry-api == 0.11.dev0 - opentelemetry-sdk == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-sdk == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py b/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py +++ b/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-dbapi/setup.cfg b/ext/opentelemetry-ext-dbapi/setup.cfg index bf7af968f71..5ee74e322a0 100644 --- a/ext/opentelemetry-ext-dbapi/setup.cfg +++ b/ext/opentelemetry-ext-dbapi/setup.cfg @@ -40,13 +40,13 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-instrumentation == 0.11b0 wrapt >= 1.0.0, < 2.0.0 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py b/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py +++ b/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-django/CHANGELOG.md b/ext/opentelemetry-ext-django/CHANGELOG.md index abbf90451b6..6e3cc9c9827 100644 --- a/ext/opentelemetry-ext-django/CHANGELOG.md +++ b/ext/opentelemetry-ext-django/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## Version 0.11b0 + +Released 2020-07-28 + - Use one general exclude list instead of two ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/872)) ## 0.8b0 diff --git a/ext/opentelemetry-ext-django/setup.cfg b/ext/opentelemetry-ext-django/setup.cfg index e9cea61cede..8474194ef5e 100644 --- a/ext/opentelemetry-ext-django/setup.cfg +++ b/ext/opentelemetry-ext-django/setup.cfg @@ -41,13 +41,13 @@ package_dir= packages=find_namespace: install_requires = django >= 1.10 - opentelemetry-ext-wsgi == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 - opentelemetry-api == 0.11.dev0 + opentelemetry-ext-wsgi == 0.11b0 + opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.11b0 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py b/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py +++ b/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-elasticsearch/setup.cfg b/ext/opentelemetry-ext-elasticsearch/setup.cfg index 40f3b392b4d..46f32b13ef7 100644 --- a/ext/opentelemetry-ext-elasticsearch/setup.cfg +++ b/ext/opentelemetry-ext-elasticsearch/setup.cfg @@ -40,14 +40,14 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-instrumentation == 0.11b0 wrapt >= 1.0.0, < 2.0.0 elasticsearch >= 2.0 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 elasticsearch-dsl >= 2.0 [options.packages.find] diff --git a/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py b/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py +++ b/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-flask/CHANGELOG.md b/ext/opentelemetry-ext-flask/CHANGELOG.md index 1db23d4e805..3109c159023 100644 --- a/ext/opentelemetry-ext-flask/CHANGELOG.md +++ b/ext/opentelemetry-ext-flask/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## Version 0.11b0 + +Released 2020-07-28 + - Use one general exclude list instead of two ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/872)) ## 0.7b1 diff --git a/ext/opentelemetry-ext-flask/setup.cfg b/ext/opentelemetry-ext-flask/setup.cfg index 663b2169a59..3d99a53a8c0 100644 --- a/ext/opentelemetry-ext-flask/setup.cfg +++ b/ext/opentelemetry-ext-flask/setup.cfg @@ -41,14 +41,14 @@ package_dir= packages=find_namespace: install_requires = flask ~= 1.0 - opentelemetry-ext-wsgi == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 - opentelemetry-api == 0.11.dev0 + opentelemetry-ext-wsgi == 0.11b0 + opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.11b0 [options.extras_require] test = flask~=1.0 - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py b/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py +++ b/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-grpc/CHANGELOG.md b/ext/opentelemetry-ext-grpc/CHANGELOG.md index 4221ab53710..fff83ab5a7b 100644 --- a/ext/opentelemetry-ext-grpc/CHANGELOG.md +++ b/ext/opentelemetry-ext-grpc/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## Version 0.11b0 + +Released 2020-07-28 + - Add status code to gRPC client spans ([896](https://github.com/open-telemetry/opentelemetry-python/pull/896)) - Add gRPC client and server instrumentors diff --git a/ext/opentelemetry-ext-grpc/setup.cfg b/ext/opentelemetry-ext-grpc/setup.cfg index dd296032475..4dd808a19ea 100644 --- a/ext/opentelemetry-ext-grpc/setup.cfg +++ b/ext/opentelemetry-ext-grpc/setup.cfg @@ -40,13 +40,13 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 + opentelemetry-api == 0.11b0 grpcio ~= 1.27 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 - opentelemetry-sdk == 0.11.dev0 + opentelemetry-test == 0.11b0 + opentelemetry-sdk == 0.11b0 protobuf == 3.12.2 [options.packages.find] diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py +++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-jaeger/setup.cfg b/ext/opentelemetry-ext-jaeger/setup.cfg index c19107eedd4..1c0a006529c 100644 --- a/ext/opentelemetry-ext-jaeger/setup.cfg +++ b/ext/opentelemetry-ext-jaeger/setup.cfg @@ -41,8 +41,8 @@ package_dir= packages=find_namespace: install_requires = thrift >= 0.10.0 - opentelemetry-api == 0.11.dev0 - opentelemetry-sdk == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-sdk == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py b/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py index 60f2f9e9d22..13bf32b8f8c 100644 --- a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py +++ b/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-jinja2/setup.cfg b/ext/opentelemetry-ext-jinja2/setup.cfg index 54a7515150f..1fbd74a3d04 100644 --- a/ext/opentelemetry-ext-jinja2/setup.cfg +++ b/ext/opentelemetry-ext-jinja2/setup.cfg @@ -39,14 +39,14 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-instrumentation == 0.11b0 jinja2~=2.7 wrapt >= 1.0.0, < 2.0.0 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py b/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py +++ b/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-mysql/CHANGELOG.md b/ext/opentelemetry-ext-mysql/CHANGELOG.md index a4ab4809397..46b9d327dd3 100644 --- a/ext/opentelemetry-ext-mysql/CHANGELOG.md +++ b/ext/opentelemetry-ext-mysql/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## Version 0.11b0 + +Released 2020-07-28 + - bugfix: Fix auto-instrumentation entry point for mysql ([#858](https://github.com/open-telemetry/opentelemetry-python/pull/858)) diff --git a/ext/opentelemetry-ext-mysql/setup.cfg b/ext/opentelemetry-ext-mysql/setup.cfg index ceb985e8b41..0e7209b1686 100644 --- a/ext/opentelemetry-ext-mysql/setup.cfg +++ b/ext/opentelemetry-ext-mysql/setup.cfg @@ -40,15 +40,15 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-ext-dbapi == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-ext-dbapi == 0.11b0 + opentelemetry-instrumentation == 0.11b0 mysql-connector-python ~= 8.0 wrapt >= 1.0.0, < 2.0.0 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py b/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py +++ b/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-opencensusexporter/setup.cfg b/ext/opentelemetry-ext-opencensusexporter/setup.cfg index ea963dce187..1cf9d1a3cfc 100644 --- a/ext/opentelemetry-ext-opencensusexporter/setup.cfg +++ b/ext/opentelemetry-ext-opencensusexporter/setup.cfg @@ -42,8 +42,8 @@ packages=find_namespace: install_requires = grpcio >= 1.0.0, < 2.0.0 opencensus-proto >= 0.1.0, < 1.0.0 - opentelemetry-api == 0.11.dev0 - opentelemetry-sdk == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-sdk == 0.11b0 protobuf >= 3.8.0 [options.packages.find] diff --git a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py b/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py +++ b/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-opentracing-shim/setup.cfg b/ext/opentelemetry-ext-opentracing-shim/setup.cfg index abc052a5aaa..d2b9cf28ccf 100644 --- a/ext/opentelemetry-ext-opentracing-shim/setup.cfg +++ b/ext/opentelemetry-ext-opentracing-shim/setup.cfg @@ -42,11 +42,11 @@ packages=find_namespace: install_requires = Deprecated >= 1.2.6 opentracing ~= 2.0 - opentelemetry-api == 0.11.dev0 + opentelemetry-api == 0.11b0 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 opentracing ~= 2.2.0 [options.packages.find] diff --git a/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py b/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py +++ b/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-otlp/CHANGELOG.md b/ext/opentelemetry-ext-otlp/CHANGELOG.md index fbfff4496e0..32e75eda55d 100644 --- a/ext/opentelemetry-ext-otlp/CHANGELOG.md +++ b/ext/opentelemetry-ext-otlp/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## Version 0.11b0 + +Released 2020-07-28 + - Update span exporter to use OpenTelemetry Proto v0.4.0 ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/889)) ## 0.9b0 diff --git a/ext/opentelemetry-ext-otlp/setup.cfg b/ext/opentelemetry-ext-otlp/setup.cfg index 65908e0a3c0..b6f7068d7fd 100644 --- a/ext/opentelemetry-ext-otlp/setup.cfg +++ b/ext/opentelemetry-ext-otlp/setup.cfg @@ -41,9 +41,9 @@ packages=find_namespace: install_requires = grpcio >= 1.0.0, < 2.0.0 googleapis-common-protos ~= 1.52.0 - opentelemetry-api == 0.11.dev0 - opentelemetry-sdk == 0.11.dev0 - opentelemetry-proto == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-sdk == 0.11b0 + opentelemetry-proto == 0.11b0 backoff ~= 1.10.0 [options.extras_require] diff --git a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py b/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py +++ b/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-prometheus/setup.cfg b/ext/opentelemetry-ext-prometheus/setup.cfg index 5dae17f5cbc..3c55f3121c4 100644 --- a/ext/opentelemetry-ext-prometheus/setup.cfg +++ b/ext/opentelemetry-ext-prometheus/setup.cfg @@ -41,8 +41,8 @@ package_dir= packages=find_namespace: install_requires = prometheus_client >= 0.5.0, < 1.0.0 - opentelemetry-api == 0.11.dev0 - opentelemetry-sdk == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-sdk == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py b/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py +++ b/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-psycopg2/setup.cfg b/ext/opentelemetry-ext-psycopg2/setup.cfg index bb0fd9a57c4..9cf7b560c73 100644 --- a/ext/opentelemetry-ext-psycopg2/setup.cfg +++ b/ext/opentelemetry-ext-psycopg2/setup.cfg @@ -40,15 +40,15 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-ext-dbapi == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-ext-dbapi == 0.11b0 + opentelemetry-instrumentation == 0.11b0 psycopg2-binary >= 2.7.3.1 wrapt >= 1.0.0, < 2.0.0 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py b/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py +++ b/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-pymemcache/setup.cfg b/ext/opentelemetry-ext-pymemcache/setup.cfg index c2252274b1f..0fbc8d60add 100644 --- a/ext/opentelemetry-ext-pymemcache/setup.cfg +++ b/ext/opentelemetry-ext-pymemcache/setup.cfg @@ -40,14 +40,14 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-instrumentation == 0.11b0 pymemcache ~= 1.3 wrapt >= 1.0.0, < 2.0.0 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py b/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py +++ b/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-pymongo/setup.cfg b/ext/opentelemetry-ext-pymongo/setup.cfg index 5e08d987763..a1f72846059 100644 --- a/ext/opentelemetry-ext-pymongo/setup.cfg +++ b/ext/opentelemetry-ext-pymongo/setup.cfg @@ -40,13 +40,13 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-instrumentation == 0.11b0 pymongo ~= 3.1 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py b/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py +++ b/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-pymysql/setup.cfg b/ext/opentelemetry-ext-pymysql/setup.cfg index db28ef9581e..adb51131b76 100644 --- a/ext/opentelemetry-ext-pymysql/setup.cfg +++ b/ext/opentelemetry-ext-pymysql/setup.cfg @@ -40,14 +40,14 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-ext-dbapi == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-ext-dbapi == 0.11b0 + opentelemetry-instrumentation == 0.11b0 PyMySQL ~= 0.9.3 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py b/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py +++ b/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-pyramid/CHANGELOG.md b/ext/opentelemetry-ext-pyramid/CHANGELOG.md index 586f8bb5ce5..f871a0aa5f8 100644 --- a/ext/opentelemetry-ext-pyramid/CHANGELOG.md +++ b/ext/opentelemetry-ext-pyramid/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## Version 0.11b0 + +Released 2020-07-28 + - Use one general exclude list instead of two ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/872)) ## 0.9b0 diff --git a/ext/opentelemetry-ext-pyramid/setup.cfg b/ext/opentelemetry-ext-pyramid/setup.cfg index bcdf850e87c..1255dbad149 100644 --- a/ext/opentelemetry-ext-pyramid/setup.cfg +++ b/ext/opentelemetry-ext-pyramid/setup.cfg @@ -41,15 +41,15 @@ package_dir= packages=find_namespace: install_requires = pyramid >= 1.7 - opentelemetry-instrumentation == 0.11.dev0 - opentelemetry-api == 0.11.dev0 - opentelemetry-ext-wsgi == 0.11.dev0 + opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.11b0 + opentelemetry-ext-wsgi == 0.11b0 wrapt >= 1.0.0, < 2.0.0 [options.extras_require] test = werkzeug == 0.16.1 - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py b/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py +++ b/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-redis/setup.cfg b/ext/opentelemetry-ext-redis/setup.cfg index 26159c6568b..e654b81addf 100644 --- a/ext/opentelemetry-ext-redis/setup.cfg +++ b/ext/opentelemetry-ext-redis/setup.cfg @@ -40,15 +40,15 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-instrumentation == 0.11b0 redis >= 2.6 wrapt >= 1.12.1 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 - opentelemetry-sdk == 0.11.dev0 + opentelemetry-test == 0.11b0 + opentelemetry-sdk == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py b/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py +++ b/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-requests/setup.cfg b/ext/opentelemetry-ext-requests/setup.cfg index 714a1b3231a..4ded4aa45d0 100644 --- a/ext/opentelemetry-ext-requests/setup.cfg +++ b/ext/opentelemetry-ext-requests/setup.cfg @@ -40,13 +40,13 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-instrumentation == 0.11b0 requests ~= 2.0 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 httpretty ~= 1.0 [options.packages.find] diff --git a/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py b/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py +++ b/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-sqlalchemy/setup.cfg b/ext/opentelemetry-ext-sqlalchemy/setup.cfg index 76178b82456..153ebf831e0 100644 --- a/ext/opentelemetry-ext-sqlalchemy/setup.cfg +++ b/ext/opentelemetry-ext-sqlalchemy/setup.cfg @@ -40,14 +40,14 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-instrumentation == 0.11b0 wrapt >= 1.11.2 sqlalchemy [options.extras_require] test = - opentelemetry-sdk == 0.11.dev0 + opentelemetry-sdk == 0.11b0 pytest [options.packages.find] diff --git a/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py b/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py +++ b/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-sqlite3/setup.cfg b/ext/opentelemetry-ext-sqlite3/setup.cfg index 95f60988eab..c986e1f0670 100644 --- a/ext/opentelemetry-ext-sqlite3/setup.cfg +++ b/ext/opentelemetry-ext-sqlite3/setup.cfg @@ -40,14 +40,14 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-ext-dbapi == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-ext-dbapi == 0.11b0 + opentelemetry-instrumentation == 0.11b0 wrapt >= 1.0.0, < 2.0.0 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py b/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py +++ b/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-system-metrics/setup.cfg b/ext/opentelemetry-ext-system-metrics/setup.cfg index 4006290514e..d26d13ae62c 100644 --- a/ext/opentelemetry-ext-system-metrics/setup.cfg +++ b/ext/opentelemetry-ext-system-metrics/setup.cfg @@ -40,12 +40,12 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 + opentelemetry-api == 0.11b0 psutil ~= 5.7.0 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py b/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py +++ b/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-wsgi/CHANGELOG.md b/ext/opentelemetry-ext-wsgi/CHANGELOG.md index da9df382f46..739ee7b0cc5 100644 --- a/ext/opentelemetry-ext-wsgi/CHANGELOG.md +++ b/ext/opentelemetry-ext-wsgi/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## Version 0.11b0 + +Released 2020-07-28 + - Set span status on wsgi errors ([#864](https://github.com/open-telemetry/opentelemetry-python/pull/864)) diff --git a/ext/opentelemetry-ext-wsgi/setup.cfg b/ext/opentelemetry-ext-wsgi/setup.cfg index e7f30870537..39388451455 100644 --- a/ext/opentelemetry-ext-wsgi/setup.cfg +++ b/ext/opentelemetry-ext-wsgi/setup.cfg @@ -40,12 +40,12 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-instrumentation == 0.11b0 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py b/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py +++ b/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-ext-zipkin/setup.cfg b/ext/opentelemetry-ext-zipkin/setup.cfg index 164f0d84c23..a280c9cca35 100644 --- a/ext/opentelemetry-ext-zipkin/setup.cfg +++ b/ext/opentelemetry-ext-zipkin/setup.cfg @@ -41,8 +41,8 @@ package_dir= packages=find_namespace: install_requires = requests ~= 2.7 - opentelemetry-api == 0.11.dev0 - opentelemetry-sdk == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-sdk == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py b/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py +++ b/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md b/ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md index 3e04402cea9..c62fac06178 100644 --- a/ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md +++ b/ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md @@ -2,4 +2,8 @@ ## Unreleased +## Version 0.11b0 + +Released 2020-07-28 + - Initial release diff --git a/ext/opentelemetry-instrumentation-aiopg/setup.cfg b/ext/opentelemetry-instrumentation-aiopg/setup.cfg index 4dade66644b..8c2e79eaca2 100644 --- a/ext/opentelemetry-instrumentation-aiopg/setup.cfg +++ b/ext/opentelemetry-instrumentation-aiopg/setup.cfg @@ -39,15 +39,15 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-ext-dbapi == 0.11.dev0 - opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-ext-dbapi == 0.11b0 + opentelemetry-instrumentation == 0.11b0 aiopg >= 0.13.0 wrapt >= 1.0.0, < 2.0.0 [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 [options.packages.find] where = src diff --git a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py +++ b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-instrumentation-fastapi/CHANGELOG.md b/ext/opentelemetry-instrumentation-fastapi/CHANGELOG.md index 684dece0c62..c8c5cea0d3d 100644 --- a/ext/opentelemetry-instrumentation-fastapi/CHANGELOG.md +++ b/ext/opentelemetry-instrumentation-fastapi/CHANGELOG.md @@ -2,4 +2,8 @@ ## Unreleased +## Version 0.11b0 + +Released 2020-07-28 + - Initial release ([#890](https://github.com/open-telemetry/opentelemetry-python/pull/890)) \ No newline at end of file diff --git a/ext/opentelemetry-instrumentation-fastapi/setup.cfg b/ext/opentelemetry-instrumentation-fastapi/setup.cfg index 5e7c2fafa6b..dab33428049 100644 --- a/ext/opentelemetry-instrumentation-fastapi/setup.cfg +++ b/ext/opentelemetry-instrumentation-fastapi/setup.cfg @@ -38,8 +38,8 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-ext-asgi == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-ext-asgi == 0.11b0 [options.entry_points] opentelemetry_instrumentor = @@ -47,7 +47,7 @@ opentelemetry_instrumentor = [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 fastapi ~= 0.58.1 requests ~= 2.23.0 # needed for testclient diff --git a/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py b/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py +++ b/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/ext/opentelemetry-instrumentation-starlette/setup.cfg b/ext/opentelemetry-instrumentation-starlette/setup.cfg index 4c777a18c50..26ae27198b1 100644 --- a/ext/opentelemetry-instrumentation-starlette/setup.cfg +++ b/ext/opentelemetry-instrumentation-starlette/setup.cfg @@ -38,8 +38,8 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11.dev0 - opentelemetry-ext-asgi == 0.11.dev0 + opentelemetry-api == 0.11b0 + opentelemetry-ext-asgi == 0.11b0 [options.entry_points] opentelemetry_instrumentor = @@ -47,7 +47,7 @@ opentelemetry_instrumentor = [options.extras_require] test = - opentelemetry-test == 0.11.dev0 + opentelemetry-test == 0.11b0 starlette ~= 0.13.0 requests ~= 2.23.0 # needed for testclient diff --git a/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py b/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py index 858e73960ff..15e8d9536da 100644 --- a/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py +++ b/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/opentelemetry-api/CHANGELOG.md b/opentelemetry-api/CHANGELOG.md index d6348459917..da976ed37e4 100644 --- a/opentelemetry-api/CHANGELOG.md +++ b/opentelemetry-api/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## Version 0.11b0 + +Released 2020-07-28 + - Return INVALID_SPAN if no TracerProvider set for get_current_span ([#751](https://github.com/open-telemetry/opentelemetry-python/pull/751)) - Rename record_error to record_exception diff --git a/opentelemetry-api/src/opentelemetry/version.py b/opentelemetry-api/src/opentelemetry/version.py index 858e73960ff..15e8d9536da 100644 --- a/opentelemetry-api/src/opentelemetry/version.py +++ b/opentelemetry-api/src/opentelemetry/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/opentelemetry-instrumentation/setup.cfg b/opentelemetry-instrumentation/setup.cfg index a51705177b5..8744c8cdaa1 100644 --- a/opentelemetry-instrumentation/setup.cfg +++ b/opentelemetry-instrumentation/setup.cfg @@ -42,7 +42,7 @@ packages=find_namespace: zip_safe = False include_package_data = True install_requires = - opentelemetry-api == 0.11.dev0 + opentelemetry-api == 0.11b0 wrapt >= 1.0.0, < 2.0.0 [options.packages.find] diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py index 858e73960ff..15e8d9536da 100644 --- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py +++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/opentelemetry-proto/src/opentelemetry/proto/version.py b/opentelemetry-proto/src/opentelemetry/proto/version.py index 858e73960ff..15e8d9536da 100644 --- a/opentelemetry-proto/src/opentelemetry/proto/version.py +++ b/opentelemetry-proto/src/opentelemetry/proto/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md index 6427b2c9b51..cbb96eabcd5 100644 --- a/opentelemetry-sdk/CHANGELOG.md +++ b/opentelemetry-sdk/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## Version 0.11b0 + +Released 2020-07-28 + - Add support for resources and resource detector ([#853](https://github.com/open-telemetry/opentelemetry-python/pull/853)) - Rename record_error to record_exception diff --git a/opentelemetry-sdk/setup.cfg b/opentelemetry-sdk/setup.cfg index b4e7ed6a9d9..cb2cb5184e5 100644 --- a/opentelemetry-sdk/setup.cfg +++ b/opentelemetry-sdk/setup.cfg @@ -42,7 +42,7 @@ packages=find_namespace: zip_safe = False include_package_data = True install_requires = - opentelemetry-api == 0.11.dev0 + opentelemetry-api == 0.11b0 [options.packages.find] where = src diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/version.py b/opentelemetry-sdk/src/opentelemetry/sdk/version.py index 858e73960ff..15e8d9536da 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/version.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11.dev0" +__version__ = "0.11b0" diff --git a/tests/util/src/opentelemetry/test/version.py b/tests/util/src/opentelemetry/test/version.py index c41ce2492a1..f3cf7aea33b 100644 --- a/tests/util/src/opentelemetry/test/version.py +++ b/tests/util/src/opentelemetry/test/version.py @@ -1 +1 @@ -__version__ = "0.11.dev0" +__version__ = "0.11b0" From 158d6c984750cf905165c7137e5cbc6790c947ff Mon Sep 17 00:00:00 2001 From: Diego Hurtado Date: Tue, 28 Jul 2020 16:04:31 -0600 Subject: [PATCH 10/15] Move duplicated code to a dependency (#942) --- eachdist.ini | 1 + ext/opentelemetry-ext-boto/setup.cfg | 1 + .../src/opentelemetry/ext/boto/__init__.py | 55 +------------------ .../opentelemetry/ext/botocore/__init__.py | 31 +++++------ tox.ini | 2 +- 5 files changed, 20 insertions(+), 70 deletions(-) diff --git a/eachdist.ini b/eachdist.ini index c77d82f345f..4a197ad2914 100644 --- a/eachdist.ini +++ b/eachdist.ini @@ -10,6 +10,7 @@ sortfirst= ext/opentelemetry-ext-wsgi ext/opentelemetry-ext-dbapi ext/opentelemetry-ext-asgi + ext/opentelemetry-ext-botocore ext/* [lintroots] diff --git a/ext/opentelemetry-ext-boto/setup.cfg b/ext/opentelemetry-ext-boto/setup.cfg index 64a9932756c..67956bad83a 100644 --- a/ext/opentelemetry-ext-boto/setup.cfg +++ b/ext/opentelemetry-ext-boto/setup.cfg @@ -43,6 +43,7 @@ install_requires = boto ~= 2.0 opentelemetry-api == 0.11.dev0 opentelemetry-instrumentation == 0.11.dev0 + opentelemetry-ext-botocore == 0.11.dev0 [options.extras_require] test = diff --git a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/__init__.py b/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/__init__.py index 637200b078b..f1f04723afa 100644 --- a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/__init__.py +++ b/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/__init__.py @@ -48,9 +48,10 @@ from inspect import currentframe from boto.connection import AWSAuthConnection, AWSQueryConnection -from wrapt import ObjectProxy, wrap_function_wrapper +from wrapt import wrap_function_wrapper from opentelemetry.ext.boto.version import __version__ +from opentelemetry.ext.botocore import add_span_arg_tags, unwrap from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.sdk.trace import Resource from opentelemetry.trace import SpanKind, get_tracer @@ -197,55 +198,3 @@ def _patched_auth_request(self, original_func, instance, args, kwargs): args, kwargs, ) - - -def truncate_arg_value(value, max_len=1024): - """Truncate values which are bytes and greater than ``max_len``. - Useful for parameters like "Body" in ``put_object`` operations. - """ - if isinstance(value, bytes) and len(value) > max_len: - return b"..." - - return value - - -def add_span_arg_tags(span, endpoint_name, args, args_names, args_traced): - if endpoint_name not in ["kms", "sts"]: - tags = dict( - (name, value) - for (name, value) in zip(args_names, args) - if name in args_traced - ) - tags = flatten_dict(tags) - for key, value in { - k: truncate_arg_value(v) - for k, v in tags.items() - if k not in {"s3": ["params.Body"]}.get(endpoint_name, []) - }.items(): - span.set_attribute(key, value) - - -def flatten_dict(dict_, sep=".", prefix=""): - """ - Returns a normalized dict of depth 1 with keys in order of embedding - """ - # adapted from https://stackoverflow.com/a/19647596 - return ( - { - prefix + sep + k if prefix else k: v - for kk, vv in dict_.items() - for k, v in flatten_dict(vv, sep, kk).items() - } - if isinstance(dict_, dict) - else {prefix: dict_} - ) - - -def unwrap(obj, attr): - function = getattr(obj, attr, None) - if ( - function - and isinstance(function, ObjectProxy) - and hasattr(function, "__wrapped__") - ): - setattr(obj, attr, function.__wrapped__) diff --git a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/__init__.py b/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/__init__.py index f9da154d970..70e790d9bf6 100644 --- a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/__init__.py +++ b/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/__init__.py @@ -160,6 +160,21 @@ def truncate_arg_value(value, max_len=1024): return value + def flatten_dict(dict_, sep=".", prefix=""): + """ + Returns a normalized dict of depth 1 with keys in order of embedding + """ + # adapted from https://stackoverflow.com/a/19647596 + return ( + { + prefix + sep + k if prefix else k: v + for kk, vv in dict_.items() + for k, v in flatten_dict(vv, sep, kk).items() + } + if isinstance(dict_, dict) + else {prefix: dict_} + ) + if endpoint_name not in {"kms", "sts"}: tags = dict( (name, value) @@ -175,22 +190,6 @@ def truncate_arg_value(value, max_len=1024): span.set_attribute(key, value) -def flatten_dict(dict_, sep=".", prefix=""): - """ - Returns a normalized dict of depth 1 with keys in order of embedding - """ - # adapted from https://stackoverflow.com/a/19647596 - return ( - { - prefix + sep + k if prefix else k: v - for kk, vv in dict_.items() - for k, v in flatten_dict(vv, sep, kk).items() - } - if isinstance(dict_, dict) - else {prefix: dict_} - ) - - def deep_getattr(obj, attr_string, default=None): """ Returns the attribute of ``obj`` at the dotted path given by diff --git a/tox.ini b/tox.ini index f956733d566..07a0bf42bdf 100644 --- a/tox.ini +++ b/tox.ini @@ -256,11 +256,11 @@ commands_pre = asyncpg: pip install {toxinidir}/ext/opentelemetry-ext-asyncpg + boto: pip install {toxinidir}/ext/opentelemetry-ext-botocore[test] boto: pip install {toxinidir}/ext/opentelemetry-ext-boto[test] flask: pip install {toxinidir}/ext/opentelemetry-ext-flask[test] - botocore: pip install {toxinidir}/opentelemetry-instrumentation botocore: pip install {toxinidir}/ext/opentelemetry-ext-botocore[test] dbapi: pip install {toxinidir}/ext/opentelemetry-ext-dbapi[test] From d67ad7b7344af0e58dafeaa5d881eb1d16ddaa46 Mon Sep 17 00:00:00 2001 From: Alex Boten Date: Tue, 28 Jul 2020 15:26:00 -0700 Subject: [PATCH 11/15] bumping version to 0.12.dev0 --- docs/examples/opentelemetry-example-app/setup.cfg | 8 ++++---- .../src/opentelemetry_example_app/version.py | 2 +- ext/opentelemetry-ext-aiohttp-client/setup.cfg | 4 ++-- .../src/opentelemetry/ext/aiohttp_client/version.py | 2 +- ext/opentelemetry-ext-asgi/setup.cfg | 4 ++-- .../src/opentelemetry/ext/asgi/version.py | 2 +- ext/opentelemetry-ext-asyncpg/setup.cfg | 6 +++--- .../src/opentelemetry/ext/asyncpg/version.py | 2 +- ext/opentelemetry-ext-boto/setup.cfg | 6 +++--- .../src/opentelemetry/ext/boto/version.py | 2 +- ext/opentelemetry-ext-botocore/setup.cfg | 6 +++--- .../src/opentelemetry/ext/botocore/version.py | 2 +- ext/opentelemetry-ext-celery/setup.cfg | 6 +++--- .../src/opentelemetry/ext/celery/version.py | 2 +- ext/opentelemetry-ext-datadog/setup.cfg | 4 ++-- .../src/opentelemetry/ext/datadog/version.py | 2 +- ext/opentelemetry-ext-dbapi/setup.cfg | 6 +++--- .../src/opentelemetry/ext/dbapi/version.py | 2 +- ext/opentelemetry-ext-django/setup.cfg | 8 ++++---- .../src/opentelemetry/ext/django/version.py | 2 +- ext/opentelemetry-ext-elasticsearch/setup.cfg | 6 +++--- .../src/opentelemetry/ext/elasticsearch/version.py | 2 +- ext/opentelemetry-ext-flask/setup.cfg | 8 ++++---- .../src/opentelemetry/ext/flask/version.py | 2 +- ext/opentelemetry-ext-grpc/setup.cfg | 6 +++--- .../src/opentelemetry/ext/grpc/version.py | 2 +- ext/opentelemetry-ext-jaeger/setup.cfg | 4 ++-- .../src/opentelemetry/ext/jaeger/version.py | 2 +- ext/opentelemetry-ext-jinja2/setup.cfg | 6 +++--- .../src/opentelemetry/ext/jinja2/version.py | 2 +- ext/opentelemetry-ext-mysql/setup.cfg | 8 ++++---- .../src/opentelemetry/ext/mysql/version.py | 2 +- ext/opentelemetry-ext-opencensusexporter/setup.cfg | 4 ++-- .../src/opentelemetry/ext/opencensusexporter/version.py | 2 +- ext/opentelemetry-ext-opentracing-shim/setup.cfg | 4 ++-- .../src/opentelemetry/ext/opentracing_shim/version.py | 2 +- ext/opentelemetry-ext-otlp/setup.cfg | 6 +++--- .../src/opentelemetry/ext/otlp/version.py | 2 +- ext/opentelemetry-ext-prometheus/setup.cfg | 4 ++-- .../src/opentelemetry/ext/prometheus/version.py | 2 +- ext/opentelemetry-ext-psycopg2/setup.cfg | 8 ++++---- .../src/opentelemetry/ext/psycopg2/version.py | 2 +- ext/opentelemetry-ext-pymemcache/setup.cfg | 6 +++--- .../src/opentelemetry/ext/pymemcache/version.py | 2 +- ext/opentelemetry-ext-pymongo/setup.cfg | 6 +++--- .../src/opentelemetry/ext/pymongo/version.py | 2 +- ext/opentelemetry-ext-pymysql/setup.cfg | 8 ++++---- .../src/opentelemetry/ext/pymysql/version.py | 2 +- ext/opentelemetry-ext-pyramid/setup.cfg | 8 ++++---- .../src/opentelemetry/ext/pyramid/version.py | 2 +- ext/opentelemetry-ext-redis/setup.cfg | 8 ++++---- .../src/opentelemetry/ext/redis/version.py | 2 +- ext/opentelemetry-ext-requests/setup.cfg | 6 +++--- .../src/opentelemetry/ext/requests/version.py | 2 +- ext/opentelemetry-ext-sqlalchemy/setup.cfg | 6 +++--- .../src/opentelemetry/ext/sqlalchemy/version.py | 2 +- ext/opentelemetry-ext-sqlite3/setup.cfg | 8 ++++---- .../src/opentelemetry/ext/sqlite3/version.py | 2 +- ext/opentelemetry-ext-system-metrics/setup.cfg | 4 ++-- .../src/opentelemetry/ext/system_metrics/version.py | 2 +- ext/opentelemetry-ext-wsgi/setup.cfg | 6 +++--- .../src/opentelemetry/ext/wsgi/version.py | 2 +- ext/opentelemetry-ext-zipkin/setup.cfg | 4 ++-- .../src/opentelemetry/ext/zipkin/version.py | 2 +- ext/opentelemetry-instrumentation-aiopg/setup.cfg | 8 ++++---- .../src/opentelemetry/instrumentation/aiopg/version.py | 2 +- ext/opentelemetry-instrumentation-fastapi/setup.cfg | 6 +++--- .../src/opentelemetry/instrumentation/fastapi/version.py | 2 +- ext/opentelemetry-instrumentation-starlette/setup.cfg | 6 +++--- .../opentelemetry/instrumentation/starlette/version.py | 2 +- opentelemetry-api/src/opentelemetry/version.py | 2 +- opentelemetry-instrumentation/setup.cfg | 2 +- .../src/opentelemetry/instrumentation/version.py | 2 +- opentelemetry-proto/src/opentelemetry/proto/version.py | 2 +- opentelemetry-sdk/setup.cfg | 2 +- opentelemetry-sdk/src/opentelemetry/sdk/version.py | 2 +- tests/util/src/opentelemetry/test/version.py | 2 +- 77 files changed, 148 insertions(+), 148 deletions(-) diff --git a/docs/examples/opentelemetry-example-app/setup.cfg b/docs/examples/opentelemetry-example-app/setup.cfg index 8905023bbff..f7dd1eccdf1 100644 --- a/docs/examples/opentelemetry-example-app/setup.cfg +++ b/docs/examples/opentelemetry-example-app/setup.cfg @@ -43,10 +43,10 @@ zip_safe = False include_package_data = True install_requires = typing; python_version<'3.5' - opentelemetry-api == 0.11b0 - opentelemetry-sdk == 0.11b0 - opentelemetry-ext-requests == 0.11b0 - opentelemetry-ext-flask == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-sdk == 0.12.dev0 + opentelemetry-ext-requests == 0.12.dev0 + opentelemetry-ext-flask == 0.12.dev0 flask requests protobuf~=3.11 diff --git a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py +++ b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-aiohttp-client/setup.cfg b/ext/opentelemetry-ext-aiohttp-client/setup.cfg index 9044083ff72..d2be7e8c6ea 100644 --- a/ext/opentelemetry-ext-aiohttp-client/setup.cfg +++ b/ext/opentelemetry-ext-aiohttp-client/setup.cfg @@ -39,8 +39,8 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api >= 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api >= 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 aiohttp ~= 3.0 [options.packages.find] diff --git a/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py b/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py index ae93e514558..8d947df443a 100644 --- a/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py +++ b/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-asgi/setup.cfg b/ext/opentelemetry-ext-asgi/setup.cfg index 9183287f0d2..175e2649950 100644 --- a/ext/opentelemetry-ext-asgi/setup.cfg +++ b/ext/opentelemetry-ext-asgi/setup.cfg @@ -39,8 +39,8 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 asgiref ~= 3.0 [options.extras_require] diff --git a/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py b/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py +++ b/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-asyncpg/setup.cfg b/ext/opentelemetry-ext-asyncpg/setup.cfg index 2eaa54b8477..bf1670172b4 100644 --- a/ext/opentelemetry-ext-asyncpg/setup.cfg +++ b/ext/opentelemetry-ext-asyncpg/setup.cfg @@ -39,13 +39,13 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 asyncpg >= 0.12.0 [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py b/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py +++ b/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-boto/setup.cfg b/ext/opentelemetry-ext-boto/setup.cfg index a9e0ec9f4e6..9d447b81356 100644 --- a/ext/opentelemetry-ext-boto/setup.cfg +++ b/ext/opentelemetry-ext-boto/setup.cfg @@ -41,14 +41,14 @@ package_dir= packages=find_namespace: install_requires = boto ~= 2.0 - opentelemetry-api == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 [options.extras_require] test = boto~=2.0 moto~=1.0 - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py b/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py +++ b/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-botocore/setup.cfg b/ext/opentelemetry-ext-botocore/setup.cfg index 5e2d0e0b35d..0d8b9e4ad4a 100644 --- a/ext/opentelemetry-ext-botocore/setup.cfg +++ b/ext/opentelemetry-ext-botocore/setup.cfg @@ -41,13 +41,13 @@ package_dir= packages=find_namespace: install_requires = botocore ~= 1.0 - opentelemetry-api == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 [options.extras_require] test = moto ~= 1.0 - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py b/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py +++ b/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-celery/setup.cfg b/ext/opentelemetry-ext-celery/setup.cfg index d70e0f7b011..39e019e83a9 100644 --- a/ext/opentelemetry-ext-celery/setup.cfg +++ b/ext/opentelemetry-ext-celery/setup.cfg @@ -39,14 +39,14 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 celery ~= 4.0 [options.extras_require] test = pytest - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py b/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py +++ b/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-datadog/setup.cfg b/ext/opentelemetry-ext-datadog/setup.cfg index 62ffd1c907b..95b0bb08571 100644 --- a/ext/opentelemetry-ext-datadog/setup.cfg +++ b/ext/opentelemetry-ext-datadog/setup.cfg @@ -40,8 +40,8 @@ package_dir= packages=find_namespace: install_requires = ddtrace>=0.34.0 - opentelemetry-api == 0.11b0 - opentelemetry-sdk == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-sdk == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py b/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py +++ b/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-dbapi/setup.cfg b/ext/opentelemetry-ext-dbapi/setup.cfg index 5ee74e322a0..34542525dd3 100644 --- a/ext/opentelemetry-ext-dbapi/setup.cfg +++ b/ext/opentelemetry-ext-dbapi/setup.cfg @@ -40,13 +40,13 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 wrapt >= 1.0.0, < 2.0.0 [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py b/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py +++ b/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-django/setup.cfg b/ext/opentelemetry-ext-django/setup.cfg index 8474194ef5e..602a2cf7ba3 100644 --- a/ext/opentelemetry-ext-django/setup.cfg +++ b/ext/opentelemetry-ext-django/setup.cfg @@ -41,13 +41,13 @@ package_dir= packages=find_namespace: install_requires = django >= 1.10 - opentelemetry-ext-wsgi == 0.11b0 - opentelemetry-instrumentation == 0.11b0 - opentelemetry-api == 0.11b0 + opentelemetry-ext-wsgi == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 + opentelemetry-api == 0.12.dev0 [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py b/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py +++ b/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-elasticsearch/setup.cfg b/ext/opentelemetry-ext-elasticsearch/setup.cfg index 46f32b13ef7..877f62872c5 100644 --- a/ext/opentelemetry-ext-elasticsearch/setup.cfg +++ b/ext/opentelemetry-ext-elasticsearch/setup.cfg @@ -40,14 +40,14 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 wrapt >= 1.0.0, < 2.0.0 elasticsearch >= 2.0 [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 elasticsearch-dsl >= 2.0 [options.packages.find] diff --git a/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py b/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py +++ b/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-flask/setup.cfg b/ext/opentelemetry-ext-flask/setup.cfg index 3d99a53a8c0..e4b978645b8 100644 --- a/ext/opentelemetry-ext-flask/setup.cfg +++ b/ext/opentelemetry-ext-flask/setup.cfg @@ -41,14 +41,14 @@ package_dir= packages=find_namespace: install_requires = flask ~= 1.0 - opentelemetry-ext-wsgi == 0.11b0 - opentelemetry-instrumentation == 0.11b0 - opentelemetry-api == 0.11b0 + opentelemetry-ext-wsgi == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 + opentelemetry-api == 0.12.dev0 [options.extras_require] test = flask~=1.0 - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py b/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py +++ b/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-grpc/setup.cfg b/ext/opentelemetry-ext-grpc/setup.cfg index 4dd808a19ea..0a4e4e5b679 100644 --- a/ext/opentelemetry-ext-grpc/setup.cfg +++ b/ext/opentelemetry-ext-grpc/setup.cfg @@ -40,13 +40,13 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 + opentelemetry-api == 0.12.dev0 grpcio ~= 1.27 [options.extras_require] test = - opentelemetry-test == 0.11b0 - opentelemetry-sdk == 0.11b0 + opentelemetry-test == 0.12.dev0 + opentelemetry-sdk == 0.12.dev0 protobuf == 3.12.2 [options.packages.find] diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py +++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-jaeger/setup.cfg b/ext/opentelemetry-ext-jaeger/setup.cfg index 1c0a006529c..fc581301b6f 100644 --- a/ext/opentelemetry-ext-jaeger/setup.cfg +++ b/ext/opentelemetry-ext-jaeger/setup.cfg @@ -41,8 +41,8 @@ package_dir= packages=find_namespace: install_requires = thrift >= 0.10.0 - opentelemetry-api == 0.11b0 - opentelemetry-sdk == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-sdk == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py b/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py index 13bf32b8f8c..4a2d033215f 100644 --- a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py +++ b/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-jinja2/setup.cfg b/ext/opentelemetry-ext-jinja2/setup.cfg index 1fbd74a3d04..fc0222a0e44 100644 --- a/ext/opentelemetry-ext-jinja2/setup.cfg +++ b/ext/opentelemetry-ext-jinja2/setup.cfg @@ -39,14 +39,14 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 jinja2~=2.7 wrapt >= 1.0.0, < 2.0.0 [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py b/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py +++ b/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-mysql/setup.cfg b/ext/opentelemetry-ext-mysql/setup.cfg index 0e7209b1686..e114ae1dbea 100644 --- a/ext/opentelemetry-ext-mysql/setup.cfg +++ b/ext/opentelemetry-ext-mysql/setup.cfg @@ -40,15 +40,15 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-ext-dbapi == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-ext-dbapi == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 mysql-connector-python ~= 8.0 wrapt >= 1.0.0, < 2.0.0 [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py b/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py +++ b/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-opencensusexporter/setup.cfg b/ext/opentelemetry-ext-opencensusexporter/setup.cfg index 1cf9d1a3cfc..0a3376083a7 100644 --- a/ext/opentelemetry-ext-opencensusexporter/setup.cfg +++ b/ext/opentelemetry-ext-opencensusexporter/setup.cfg @@ -42,8 +42,8 @@ packages=find_namespace: install_requires = grpcio >= 1.0.0, < 2.0.0 opencensus-proto >= 0.1.0, < 1.0.0 - opentelemetry-api == 0.11b0 - opentelemetry-sdk == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-sdk == 0.12.dev0 protobuf >= 3.8.0 [options.packages.find] diff --git a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py b/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py +++ b/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-opentracing-shim/setup.cfg b/ext/opentelemetry-ext-opentracing-shim/setup.cfg index d2b9cf28ccf..f0878b82b64 100644 --- a/ext/opentelemetry-ext-opentracing-shim/setup.cfg +++ b/ext/opentelemetry-ext-opentracing-shim/setup.cfg @@ -42,11 +42,11 @@ packages=find_namespace: install_requires = Deprecated >= 1.2.6 opentracing ~= 2.0 - opentelemetry-api == 0.11b0 + opentelemetry-api == 0.12.dev0 [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 opentracing ~= 2.2.0 [options.packages.find] diff --git a/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py b/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py +++ b/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-otlp/setup.cfg b/ext/opentelemetry-ext-otlp/setup.cfg index b6f7068d7fd..b6bfac669b9 100644 --- a/ext/opentelemetry-ext-otlp/setup.cfg +++ b/ext/opentelemetry-ext-otlp/setup.cfg @@ -41,9 +41,9 @@ packages=find_namespace: install_requires = grpcio >= 1.0.0, < 2.0.0 googleapis-common-protos ~= 1.52.0 - opentelemetry-api == 0.11b0 - opentelemetry-sdk == 0.11b0 - opentelemetry-proto == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-sdk == 0.12.dev0 + opentelemetry-proto == 0.12.dev0 backoff ~= 1.10.0 [options.extras_require] diff --git a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py b/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py +++ b/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-prometheus/setup.cfg b/ext/opentelemetry-ext-prometheus/setup.cfg index 3c55f3121c4..3571f93c540 100644 --- a/ext/opentelemetry-ext-prometheus/setup.cfg +++ b/ext/opentelemetry-ext-prometheus/setup.cfg @@ -41,8 +41,8 @@ package_dir= packages=find_namespace: install_requires = prometheus_client >= 0.5.0, < 1.0.0 - opentelemetry-api == 0.11b0 - opentelemetry-sdk == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-sdk == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py b/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py +++ b/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-psycopg2/setup.cfg b/ext/opentelemetry-ext-psycopg2/setup.cfg index 9cf7b560c73..73d541cad61 100644 --- a/ext/opentelemetry-ext-psycopg2/setup.cfg +++ b/ext/opentelemetry-ext-psycopg2/setup.cfg @@ -40,15 +40,15 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-ext-dbapi == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-ext-dbapi == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 psycopg2-binary >= 2.7.3.1 wrapt >= 1.0.0, < 2.0.0 [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py b/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py +++ b/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-pymemcache/setup.cfg b/ext/opentelemetry-ext-pymemcache/setup.cfg index 0fbc8d60add..798988461c4 100644 --- a/ext/opentelemetry-ext-pymemcache/setup.cfg +++ b/ext/opentelemetry-ext-pymemcache/setup.cfg @@ -40,14 +40,14 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 pymemcache ~= 1.3 wrapt >= 1.0.0, < 2.0.0 [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py b/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py +++ b/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-pymongo/setup.cfg b/ext/opentelemetry-ext-pymongo/setup.cfg index a1f72846059..4aae442aa17 100644 --- a/ext/opentelemetry-ext-pymongo/setup.cfg +++ b/ext/opentelemetry-ext-pymongo/setup.cfg @@ -40,13 +40,13 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 pymongo ~= 3.1 [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py b/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py +++ b/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-pymysql/setup.cfg b/ext/opentelemetry-ext-pymysql/setup.cfg index adb51131b76..9d8ccdff6f6 100644 --- a/ext/opentelemetry-ext-pymysql/setup.cfg +++ b/ext/opentelemetry-ext-pymysql/setup.cfg @@ -40,14 +40,14 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-ext-dbapi == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-ext-dbapi == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 PyMySQL ~= 0.9.3 [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py b/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py +++ b/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-pyramid/setup.cfg b/ext/opentelemetry-ext-pyramid/setup.cfg index 1255dbad149..21a4910ac41 100644 --- a/ext/opentelemetry-ext-pyramid/setup.cfg +++ b/ext/opentelemetry-ext-pyramid/setup.cfg @@ -41,15 +41,15 @@ package_dir= packages=find_namespace: install_requires = pyramid >= 1.7 - opentelemetry-instrumentation == 0.11b0 - opentelemetry-api == 0.11b0 - opentelemetry-ext-wsgi == 0.11b0 + opentelemetry-instrumentation == 0.12.dev0 + opentelemetry-api == 0.12.dev0 + opentelemetry-ext-wsgi == 0.12.dev0 wrapt >= 1.0.0, < 2.0.0 [options.extras_require] test = werkzeug == 0.16.1 - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py b/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py +++ b/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-redis/setup.cfg b/ext/opentelemetry-ext-redis/setup.cfg index e654b81addf..0b245f341a1 100644 --- a/ext/opentelemetry-ext-redis/setup.cfg +++ b/ext/opentelemetry-ext-redis/setup.cfg @@ -40,15 +40,15 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 redis >= 2.6 wrapt >= 1.12.1 [options.extras_require] test = - opentelemetry-test == 0.11b0 - opentelemetry-sdk == 0.11b0 + opentelemetry-test == 0.12.dev0 + opentelemetry-sdk == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py b/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py +++ b/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-requests/setup.cfg b/ext/opentelemetry-ext-requests/setup.cfg index 4ded4aa45d0..52d6f96739e 100644 --- a/ext/opentelemetry-ext-requests/setup.cfg +++ b/ext/opentelemetry-ext-requests/setup.cfg @@ -40,13 +40,13 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 requests ~= 2.0 [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 httpretty ~= 1.0 [options.packages.find] diff --git a/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py b/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py +++ b/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-sqlalchemy/setup.cfg b/ext/opentelemetry-ext-sqlalchemy/setup.cfg index 153ebf831e0..16416f37ef8 100644 --- a/ext/opentelemetry-ext-sqlalchemy/setup.cfg +++ b/ext/opentelemetry-ext-sqlalchemy/setup.cfg @@ -40,14 +40,14 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 wrapt >= 1.11.2 sqlalchemy [options.extras_require] test = - opentelemetry-sdk == 0.11b0 + opentelemetry-sdk == 0.12.dev0 pytest [options.packages.find] diff --git a/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py b/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py +++ b/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-sqlite3/setup.cfg b/ext/opentelemetry-ext-sqlite3/setup.cfg index c986e1f0670..51f6b2f30d7 100644 --- a/ext/opentelemetry-ext-sqlite3/setup.cfg +++ b/ext/opentelemetry-ext-sqlite3/setup.cfg @@ -40,14 +40,14 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-ext-dbapi == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-ext-dbapi == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 wrapt >= 1.0.0, < 2.0.0 [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py b/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py +++ b/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-system-metrics/setup.cfg b/ext/opentelemetry-ext-system-metrics/setup.cfg index d26d13ae62c..08a1fe8f1c4 100644 --- a/ext/opentelemetry-ext-system-metrics/setup.cfg +++ b/ext/opentelemetry-ext-system-metrics/setup.cfg @@ -40,12 +40,12 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 + opentelemetry-api == 0.12.dev0 psutil ~= 5.7.0 [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py b/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py +++ b/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-wsgi/setup.cfg b/ext/opentelemetry-ext-wsgi/setup.cfg index 39388451455..97445a847cd 100644 --- a/ext/opentelemetry-ext-wsgi/setup.cfg +++ b/ext/opentelemetry-ext-wsgi/setup.cfg @@ -40,12 +40,12 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py b/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py +++ b/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-zipkin/setup.cfg b/ext/opentelemetry-ext-zipkin/setup.cfg index a280c9cca35..7674cab5365 100644 --- a/ext/opentelemetry-ext-zipkin/setup.cfg +++ b/ext/opentelemetry-ext-zipkin/setup.cfg @@ -41,8 +41,8 @@ package_dir= packages=find_namespace: install_requires = requests ~= 2.7 - opentelemetry-api == 0.11b0 - opentelemetry-sdk == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-sdk == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py b/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py +++ b/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-instrumentation-aiopg/setup.cfg b/ext/opentelemetry-instrumentation-aiopg/setup.cfg index 8c2e79eaca2..f2428301b5e 100644 --- a/ext/opentelemetry-instrumentation-aiopg/setup.cfg +++ b/ext/opentelemetry-instrumentation-aiopg/setup.cfg @@ -39,15 +39,15 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-ext-dbapi == 0.11b0 - opentelemetry-instrumentation == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-ext-dbapi == 0.12.dev0 + opentelemetry-instrumentation == 0.12.dev0 aiopg >= 0.13.0 wrapt >= 1.0.0, < 2.0.0 [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 [options.packages.find] where = src diff --git a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py +++ b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-instrumentation-fastapi/setup.cfg b/ext/opentelemetry-instrumentation-fastapi/setup.cfg index dab33428049..b700b3d724a 100644 --- a/ext/opentelemetry-instrumentation-fastapi/setup.cfg +++ b/ext/opentelemetry-instrumentation-fastapi/setup.cfg @@ -38,8 +38,8 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-ext-asgi == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-ext-asgi == 0.12.dev0 [options.entry_points] opentelemetry_instrumentor = @@ -47,7 +47,7 @@ opentelemetry_instrumentor = [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 fastapi ~= 0.58.1 requests ~= 2.23.0 # needed for testclient diff --git a/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py b/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py +++ b/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-instrumentation-starlette/setup.cfg b/ext/opentelemetry-instrumentation-starlette/setup.cfg index 26ae27198b1..f1613a8cd8f 100644 --- a/ext/opentelemetry-instrumentation-starlette/setup.cfg +++ b/ext/opentelemetry-instrumentation-starlette/setup.cfg @@ -38,8 +38,8 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.11b0 - opentelemetry-ext-asgi == 0.11b0 + opentelemetry-api == 0.12.dev0 + opentelemetry-ext-asgi == 0.12.dev0 [options.entry_points] opentelemetry_instrumentor = @@ -47,7 +47,7 @@ opentelemetry_instrumentor = [options.extras_require] test = - opentelemetry-test == 0.11b0 + opentelemetry-test == 0.12.dev0 starlette ~= 0.13.0 requests ~= 2.23.0 # needed for testclient diff --git a/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py b/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py +++ b/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/opentelemetry-api/src/opentelemetry/version.py b/opentelemetry-api/src/opentelemetry/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/opentelemetry-api/src/opentelemetry/version.py +++ b/opentelemetry-api/src/opentelemetry/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/opentelemetry-instrumentation/setup.cfg b/opentelemetry-instrumentation/setup.cfg index 8744c8cdaa1..4dee7c3cf83 100644 --- a/opentelemetry-instrumentation/setup.cfg +++ b/opentelemetry-instrumentation/setup.cfg @@ -42,7 +42,7 @@ packages=find_namespace: zip_safe = False include_package_data = True install_requires = - opentelemetry-api == 0.11b0 + opentelemetry-api == 0.12.dev0 wrapt >= 1.0.0, < 2.0.0 [options.packages.find] diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py +++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/opentelemetry-proto/src/opentelemetry/proto/version.py b/opentelemetry-proto/src/opentelemetry/proto/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/opentelemetry-proto/src/opentelemetry/proto/version.py +++ b/opentelemetry-proto/src/opentelemetry/proto/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/opentelemetry-sdk/setup.cfg b/opentelemetry-sdk/setup.cfg index cb2cb5184e5..6ea60117a1f 100644 --- a/opentelemetry-sdk/setup.cfg +++ b/opentelemetry-sdk/setup.cfg @@ -42,7 +42,7 @@ packages=find_namespace: zip_safe = False include_package_data = True install_requires = - opentelemetry-api == 0.11b0 + opentelemetry-api == 0.12.dev0 [options.packages.find] where = src diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/version.py b/opentelemetry-sdk/src/opentelemetry/sdk/version.py index 15e8d9536da..780a92b6a1b 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/version.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.11b0" +__version__ = "0.12.dev0" diff --git a/tests/util/src/opentelemetry/test/version.py b/tests/util/src/opentelemetry/test/version.py index f3cf7aea33b..1ad7bc603eb 100644 --- a/tests/util/src/opentelemetry/test/version.py +++ b/tests/util/src/opentelemetry/test/version.py @@ -1 +1 @@ -__version__ = "0.11b0" +__version__ = "0.12.dev0" From eec050ba92340459be8c489fe5e906fe8ba58899 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Wed, 29 Jul 2020 10:03:46 -0700 Subject: [PATCH 12/15] Rename exporter packages from "ext" to "exporter" (#953) --- .flake8 | 4 +- .github/workflows/docs.yml | 1 + docs/conf.py | 9 ++- docs/examples/cloud_monitoring/README.rst | 48 ----------- .../cloud_monitoring/basic_metrics.py | 43 ---------- docs/examples/cloud_trace_exporter/README.rst | 79 ------------------- .../cloud_trace_exporter/basic_trace.py | 14 ---- docs/examples/datadog_exporter/README.rst | 4 +- .../datadog_exporter/basic_example.py | 2 +- docs/examples/datadog_exporter/client.py | 2 +- docs/examples/datadog_exporter/server.py | 4 +- .../opencensus-exporter-metrics/README.rst | 4 +- .../opencensus-exporter-metrics/collector.py | 2 +- .../opencensus-exporter-tracer/README.rst | 4 +- .../opencensus-exporter-tracer/collector.py | 2 +- docs/examples/opentracing/main.py | 2 +- docs/examples/opentracing/requirements.txt | 2 +- docs/{ext => exporter}/datadog/datadog.rst | 2 +- docs/{ext => exporter}/jaeger/jaeger.rst | 4 +- .../opencensus/opencensus.rst} | 2 +- docs/{ext => exporter}/otlp/otlp.rst | 2 +- .../prometheus/prometheus.rst | 2 +- docs/{ext => exporter}/zipkin/zipkin.rst | 2 +- .../ext/cloud_monitoring/cloud_monitoring.rst | 7 -- docs/ext/cloud_trace/cloud_trace.rst | 7 -- docs/getting_started/jaeger_example.py | 2 +- docs/getting_started/prometheus_example.py | 2 +- docs/index.rst | 12 ++- eachdist.ini | 1 + .../CHANGELOG.md | 3 + .../README.rst | 6 +- .../opentelemetry-exporter-datadog}/setup.cfg | 4 +- .../opentelemetry-exporter-datadog}/setup.py | 3 +- .../exporter}/datadog/__init__.py | 4 +- .../exporter}/datadog/constants.py | 0 .../exporter}/datadog/exporter.py | 0 .../exporter}/datadog/propagator.py | 0 .../exporter}/datadog/spanprocessor.py | 0 .../exporter}/datadog/version.py | 0 .../tests/__init__.py | 0 .../tests/test_datadog_exporter.py | 2 +- .../tests/test_datadog_format.py | 2 +- .../CHANGELOG.md | 3 + .../opentelemetry-exporter-jaeger}/LICENSE | 0 .../MANIFEST.in | 0 .../opentelemetry-exporter-jaeger}/README.rst | 8 +- .../examples/jaeger_exporter_example.py | 2 +- .../opentelemetry-exporter-jaeger}/setup.cfg | 4 +- .../opentelemetry-exporter-jaeger}/setup.py | 2 +- .../exporter}/jaeger/__init__.py | 6 +- .../exporter}/jaeger/gen/__init__.py | 0 .../exporter}/jaeger/gen/agent/Agent-remote | 0 .../exporter}/jaeger/gen/agent/Agent.py | 0 .../exporter}/jaeger/gen/agent/__init__.py | 0 .../exporter}/jaeger/gen/agent/constants.py | 0 .../exporter}/jaeger/gen/agent/ttypes.py | 0 .../jaeger/gen/jaeger/Collector-remote | 0 .../exporter}/jaeger/gen/jaeger/Collector.py | 0 .../exporter}/jaeger/gen/jaeger/__init__.py | 0 .../exporter}/jaeger/gen/jaeger/constants.py | 0 .../exporter}/jaeger/gen/jaeger/ttypes.py | 0 .../gen/zipkincore/ZipkinCollector-remote | 0 .../jaeger/gen/zipkincore/ZipkinCollector.py | 0 .../jaeger/gen/zipkincore/__init__.py | 0 .../jaeger/gen/zipkincore/constants.py | 0 .../exporter}/jaeger/gen/zipkincore/ttypes.py | 0 .../opentelemetry/exporter}/jaeger/version.py | 0 .../tests/__init__.py | 0 .../tests/test_jaeger_exporter.py | 4 +- .../thrift/agent.thrift | 0 .../thrift/jaeger.thrift | 0 .../thrift/zipkincore.thrift | 0 .../CHANGELOG.md | 3 + .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 8 +- .../setup.cfg | 4 +- .../setup.py | 26 ++++++ .../exporter/opencensus}/__init__.py | 0 .../opencensus}/metrics_exporter/__init__.py | 2 +- .../opencensus}/trace_exporter/__init__.py | 2 +- .../exporter/opencensus}/util.py | 2 +- .../exporter/opencensus}/version.py | 0 .../tests/__init__.py | 0 .../test_otcollector_metrics_exporter.py | 4 +- .../tests/test_otcollector_trace_exporter.py | 6 +- .../opentelemetry-exporter-otlp}/CHANGELOG.md | 3 + .../opentelemetry-exporter-otlp}/LICENSE | 0 .../opentelemetry-exporter-otlp}/MANIFEST.in | 0 .../opentelemetry-exporter-otlp}/README.rst | 8 +- .../opentelemetry-exporter-otlp}/setup.cfg | 4 +- .../opentelemetry-exporter-otlp}/setup.py | 3 +- .../opentelemetry/exporter}/otlp/__init__.py | 2 +- .../exporter}/otlp/trace_exporter/__init__.py | 0 .../opentelemetry/exporter}/otlp/version.py | 0 .../tests/__init__.py | 0 .../tests/test_otlp_trace_exporter.py | 10 +-- .../CHANGELOG.md | 12 +++ .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 8 +- .../setup.cfg | 4 +- .../setup.py | 26 ++++++ .../exporter}/prometheus/__init__.py | 2 +- .../exporter}/prometheus/version.py | 0 .../tests/__init__.py | 0 .../tests/test_prometheus_exporter.py | 4 +- .../CHANGELOG.md | 3 + .../opentelemetry-exporter-zipkin}/LICENSE | 0 .../MANIFEST.in | 0 .../opentelemetry-exporter-zipkin}/README.rst | 8 +- .../opentelemetry-exporter-zipkin}/setup.cfg | 4 +- .../opentelemetry-exporter-zipkin}/setup.py | 2 +- .../exporter}/zipkin/__init__.py | 2 +- .../opentelemetry/exporter}/zipkin/version.py | 0 .../tests/__init__.py | 0 .../tests/test_zipkin_exporter.py | 2 +- .../test_opencensusexporter_functional.py | 2 +- .../setup.py | 26 ------ ext/opentelemetry-ext-prometheus/CHANGELOG.md | 9 --- ext/opentelemetry-ext-zipkin/setup.py | 26 ------ pyproject.toml | 2 +- scripts/build.sh | 2 +- scripts/coverage.sh | 6 +- tox.ini | 44 +++++------ 125 files changed, 221 insertions(+), 384 deletions(-) delete mode 100644 docs/examples/cloud_monitoring/README.rst delete mode 100644 docs/examples/cloud_monitoring/basic_metrics.py delete mode 100644 docs/examples/cloud_trace_exporter/README.rst delete mode 100644 docs/examples/cloud_trace_exporter/basic_trace.py rename docs/{ext => exporter}/datadog/datadog.rst (71%) rename docs/{ext => exporter}/jaeger/jaeger.rst (64%) rename docs/{ext/opencensusexporter/opencensusexporter.rst => exporter/opencensus/opencensus.rst} (64%) rename docs/{ext => exporter}/otlp/otlp.rst (72%) rename docs/{ext => exporter}/prometheus/prometheus.rst (71%) rename docs/{ext => exporter}/zipkin/zipkin.rst (71%) delete mode 100644 docs/ext/cloud_monitoring/cloud_monitoring.rst delete mode 100644 docs/ext/cloud_trace/cloud_trace.rst rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/CHANGELOG.md (55%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/README.rst (71%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/setup.cfg (91%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-datadog}/setup.py (91%) rename {ext/opentelemetry-ext-datadog/src/opentelemetry/ext => exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter}/datadog/__init__.py (93%) rename {ext/opentelemetry-ext-datadog/src/opentelemetry/ext => exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter}/datadog/constants.py (100%) rename {ext/opentelemetry-ext-datadog/src/opentelemetry/ext => exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter}/datadog/exporter.py (100%) rename {ext/opentelemetry-ext-datadog/src/opentelemetry/ext => exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter}/datadog/propagator.py (100%) rename {ext/opentelemetry-ext-datadog/src/opentelemetry/ext => exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter}/datadog/spanprocessor.py (100%) rename {ext/opentelemetry-ext-datadog/src/opentelemetry/ext => exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter}/datadog/version.py (100%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/tests/test_datadog_exporter.py (99%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/tests/test_datadog_format.py (98%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/CHANGELOG.md (87%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/LICENSE (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/MANIFEST.in (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/README.rst (66%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/examples/jaeger_exporter_example.py (97%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/setup.cfg (94%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-jaeger}/setup.py (91%) rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/__init__.py (98%) rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/__init__.py (100%) rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/agent/Agent-remote (100%) mode change 100755 => 100644 rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/agent/Agent.py (100%) rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/agent/__init__.py (100%) rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/agent/constants.py (100%) rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/agent/ttypes.py (100%) rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/jaeger/Collector-remote (100%) mode change 100755 => 100644 rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/jaeger/Collector.py (100%) rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/jaeger/__init__.py (100%) rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/jaeger/constants.py (100%) rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/jaeger/ttypes.py (100%) rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/zipkincore/ZipkinCollector-remote (100%) mode change 100755 => 100644 rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/zipkincore/ZipkinCollector.py (100%) rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/zipkincore/__init__.py (100%) rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/zipkincore/constants.py (100%) rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/zipkincore/ttypes.py (100%) rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/version.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/tests/test_jaeger_exporter.py (99%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/thrift/agent.thrift (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/thrift/jaeger.thrift (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/thrift/zipkincore.thrift (100%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/CHANGELOG.md (61%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/LICENSE (100%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/MANIFEST.in (100%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/README.rst (57%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/setup.cfg (94%) create mode 100644 exporter/opentelemetry-exporter-opencensus/setup.py rename {ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter => exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus}/__init__.py (100%) rename {ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter => exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus}/metrics_exporter/__init__.py (98%) rename {ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter => exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus}/trace_exporter/__init__.py (99%) rename {ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter => exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus}/util.py (98%) rename {ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter => exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus}/version.py (100%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/tests/test_otcollector_metrics_exporter.py (98%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/tests/test_otcollector_trace_exporter.py (98%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/CHANGELOG.md (65%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/LICENSE (100%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/MANIFEST.in (100%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/README.rst (70%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/setup.cfg (95%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-otlp}/setup.py (92%) rename {ext/opentelemetry-ext-otlp/src/opentelemetry/ext => exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter}/otlp/__init__.py (95%) rename {ext/opentelemetry-ext-otlp/src/opentelemetry/ext => exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter}/otlp/trace_exporter/__init__.py (100%) rename {ext/opentelemetry-ext-otlp/src/opentelemetry/ext => exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter}/otlp/version.py (100%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/tests/test_otlp_trace_exporter.py (97%) create mode 100644 exporter/opentelemetry-exporter-prometheus/CHANGELOG.md rename {ext/opentelemetry-ext-prometheus => exporter/opentelemetry-exporter-prometheus}/LICENSE (100%) rename {ext/opentelemetry-ext-prometheus => exporter/opentelemetry-exporter-prometheus}/MANIFEST.in (100%) rename {ext/opentelemetry-ext-prometheus => exporter/opentelemetry-exporter-prometheus}/README.rst (58%) rename {ext/opentelemetry-ext-prometheus => exporter/opentelemetry-exporter-prometheus}/setup.cfg (94%) create mode 100644 exporter/opentelemetry-exporter-prometheus/setup.py rename {ext/opentelemetry-ext-prometheus/src/opentelemetry/ext => exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter}/prometheus/__init__.py (98%) rename {ext/opentelemetry-ext-prometheus/src/opentelemetry/ext => exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter}/prometheus/version.py (100%) rename {ext/opentelemetry-ext-prometheus => exporter/opentelemetry-exporter-prometheus}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-prometheus => exporter/opentelemetry-exporter-prometheus}/tests/test_prometheus_exporter.py (97%) rename {ext/opentelemetry-ext-zipkin => exporter/opentelemetry-exporter-zipkin}/CHANGELOG.md (73%) rename {ext/opentelemetry-ext-zipkin => exporter/opentelemetry-exporter-zipkin}/LICENSE (100%) rename {ext/opentelemetry-ext-zipkin => exporter/opentelemetry-exporter-zipkin}/MANIFEST.in (100%) rename {ext/opentelemetry-ext-zipkin => exporter/opentelemetry-exporter-zipkin}/README.rst (59%) rename {ext/opentelemetry-ext-zipkin => exporter/opentelemetry-exporter-zipkin}/setup.cfg (95%) rename {ext/opentelemetry-ext-prometheus => exporter/opentelemetry-exporter-zipkin}/setup.py (91%) rename {ext/opentelemetry-ext-zipkin/src/opentelemetry/ext => exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter}/zipkin/__init__.py (99%) rename {ext/opentelemetry-ext-zipkin/src/opentelemetry/ext => exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter}/zipkin/version.py (100%) rename {ext/opentelemetry-ext-zipkin => exporter/opentelemetry-exporter-zipkin}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-zipkin => exporter/opentelemetry-exporter-zipkin}/tests/test_zipkin_exporter.py (99%) delete mode 100644 ext/opentelemetry-ext-opencensusexporter/setup.py delete mode 100644 ext/opentelemetry-ext-prometheus/CHANGELOG.md delete mode 100644 ext/opentelemetry-ext-zipkin/setup.py diff --git a/.flake8 b/.flake8 index 8555d626c6f..2780677a643 100644 --- a/.flake8 +++ b/.flake8 @@ -16,8 +16,8 @@ exclude = venv*/ target __pycache__ - ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/ - ext/opentelemetry-ext-jaeger/build/* + exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/ + exporter/opentelemetry-exporter-jaeger/build/* docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/gen/ docs/examples/opentelemetry-example-app/build/* opentelemetry-proto/build/* diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 59c825e7e28..1860c696a0c 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -6,6 +6,7 @@ on: - master paths: - 'docs/**' + - 'exporter/**' - 'ext/**' - 'opentelemetry-python/opentelemetry-api/src/opentelemetry/**' - 'opentelemetry-python/opentelemetry-sdk/src/opentelemetry/sdk/**' diff --git a/docs/conf.py b/docs/conf.py index 74ae754c60c..d3af10b7d66 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -30,13 +30,20 @@ os.path.abspath("../opentelemetry-instrumentation/src/"), ] +exp = "../exporter" +exp_dirs = [ + os.path.abspath("/".join(["../exporter", f, "src"])) + for f in listdir(exp) + if isdir(join(exp, f)) +] + ext = "../ext" ext_dirs = [ os.path.abspath("/".join(["../ext", f, "src"])) for f in listdir(ext) if isdir(join(ext, f)) ] -sys.path[:0] = source_dirs + ext_dirs +sys.path[:0] = source_dirs + exp_dirs + ext_dirs # -- Project information ----------------------------------------------------- diff --git a/docs/examples/cloud_monitoring/README.rst b/docs/examples/cloud_monitoring/README.rst deleted file mode 100644 index 818446dc157..00000000000 --- a/docs/examples/cloud_monitoring/README.rst +++ /dev/null @@ -1,48 +0,0 @@ -Cloud Monitoring Exporter Example -================================= - -These examples show how to use OpenTelemetry to send metrics data to Cloud Monitoring. - - -Basic Example -------------- - -To use this exporter you first need to: - * `Create a Google Cloud project `_. - * Enable the Cloud Monitoring API (aka Stackdriver Monitoring API) in the project `here `_. - * Enable `Default Application Credentials `_. - -* Installation - -.. code-block:: sh - - pip install opentelemetry-api - pip install opentelemetry-sdk - pip install opentelemetry-exporter-cloud-monitoring - -* Run example - -.. literalinclude:: basic_metrics.py - :language: python - :lines: 1- - -Viewing Output --------------------------- - -After running the example: - * Go to the `Cloud Monitoring Metrics Explorer page `_. - * In "Find resource type and metric" enter "OpenTelemetry/request_counter". - * You can filter by labels and change the graphical output here as well. - -Troubleshooting --------------------------- - -``One or more points were written more frequently than the maximum sampling period configured for the metric`` -############################################################################################################## - -Currently, Cloud Monitoring allows one write every 10 seconds for any unique tuple (metric_name, metric_label_value_1, metric_label_value_2, ...). The exporter should rate limit on its own but issues arise if: - - * You are restarting the server more than once every 10 seconds. - * You have a multiple exporters (possibly on different threads) writing to the same tuple. - -For both cases, you can pass ``add_unique_identifier=True`` to the CloudMonitoringMetricsExporter constructor. This adds a UUID label_value, making the tuple unique again. For the first case, you can also choose to just wait longer than 10 seconds between restarts. diff --git a/docs/examples/cloud_monitoring/basic_metrics.py b/docs/examples/cloud_monitoring/basic_metrics.py deleted file mode 100644 index fa00fc068b6..00000000000 --- a/docs/examples/cloud_monitoring/basic_metrics.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python3 -# Copyright The 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 time - -from opentelemetry import metrics -from opentelemetry.exporter.cloud_monitoring import ( - CloudMonitoringMetricsExporter, -) -from opentelemetry.sdk.metrics import Counter, MeterProvider - -metrics.set_meter_provider(MeterProvider()) -meter = metrics.get_meter(__name__) -metrics.get_meter_provider().start_pipeline( - meter, CloudMonitoringMetricsExporter(), 5 -) - -requests_counter = meter.create_metric( - name="request_counter", - description="number of requests", - unit="1", - value_type=int, - metric_type=Counter, - label_keys=("environment"), -) - -staging_labels = {"environment": "staging"} - -for i in range(20): - requests_counter.add(25, staging_labels) - time.sleep(10) diff --git a/docs/examples/cloud_trace_exporter/README.rst b/docs/examples/cloud_trace_exporter/README.rst deleted file mode 100644 index 65674759b61..00000000000 --- a/docs/examples/cloud_trace_exporter/README.rst +++ /dev/null @@ -1,79 +0,0 @@ -Cloud Trace Exporter Example -============================ - -These examples show how to use OpenTelemetry to send tracing data to Cloud Trace. - - -Basic Example -------------- - -To use this exporter you first need to: - * A Google Cloud project. You can `create one here `_. - * Enable Cloud Trace API (listed in the Cloud Console as Stackdriver Trace API) in the project `here `_. - * If the page says "API Enabled" then you're done! No need to do anything. - * Enable Default Application Credentials by creating setting `GOOGLE_APPLICATION_CREDENTIALS `_ or by `installing gcloud sdk `_ and calling ``gcloud auth application-default login``. - -* Installation - -.. code-block:: sh - - pip install opentelemetry-api - pip install opentelemetry-sdk - pip install opentelemetry-exporter-cloud-trace - -* Run an example locally - -.. literalinclude:: basic_trace.py - :language: python - :lines: 1- - -Checking Output --------------------------- - -After running any of these examples, you can go to `Cloud Trace overview `_ to see the results. - - -Further Reading --------------------------- - -* `More information about exporters in general `_ - -Troubleshooting --------------------------- - -Running basic_trace.py hangs: -############################# - * Make sure you've setup Application Default Credentials. Either run ``gcloud auth application-default login`` or set the ``GOOGLE_APPLICATION_CREDENTIALS`` environment variable to be a path to a service account token file. - -Getting error ``google.api_core.exceptions.ResourceExhausted: 429 Resource has been exhausted``: -################################################################################################ - * Check that you've enabled the `Cloud Trace (Stackdriver Trace) API `_ - -bash: pip: command not found: -############################# - * `Install pip `_ - * If your machine uses python2 by default, pip will also be the python2 version. Try using ``pip3`` instead of ``pip``. - -pip install is hanging -###################### -Try upgrading pip - -.. code-block:: sh - - pip install --upgrade pip - -``pip install grcpio`` has been known to hang when you aren't using an upgraded version. - -ImportError: No module named opentelemetry -########################################## -Make sure you are using python3. If - -.. code-block:: sh - - python --version - -returns ``Python 2.X.X`` try calling - -.. code-block:: sh - - python3 basic_trace.py diff --git a/docs/examples/cloud_trace_exporter/basic_trace.py b/docs/examples/cloud_trace_exporter/basic_trace.py deleted file mode 100644 index 76840a291ec..00000000000 --- a/docs/examples/cloud_trace_exporter/basic_trace.py +++ /dev/null @@ -1,14 +0,0 @@ -from opentelemetry import trace -from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter -from opentelemetry.sdk.trace import TracerProvider -from opentelemetry.sdk.trace.export import SimpleExportSpanProcessor - -trace.set_tracer_provider(TracerProvider()) - -cloud_trace_exporter = CloudTraceSpanExporter() -trace.get_tracer_provider().add_span_processor( - SimpleExportSpanProcessor(cloud_trace_exporter) -) -tracer = trace.get_tracer(__name__) -with tracer.start_as_current_span("foo"): - print("Hello world!") diff --git a/docs/examples/datadog_exporter/README.rst b/docs/examples/datadog_exporter/README.rst index d851550b279..250eec2b84a 100644 --- a/docs/examples/datadog_exporter/README.rst +++ b/docs/examples/datadog_exporter/README.rst @@ -13,7 +13,7 @@ Basic Example pip install opentelemetry-api pip install opentelemetry-sdk - pip install opentelemetry-ext-datadog + pip install opentelemetry-exporter-datadog * Start Datadog Agent @@ -48,7 +48,7 @@ Distributed Example pip install opentelemetry-api pip install opentelemetry-sdk - pip install opentelemetry-ext-datadog + pip install opentelemetry-exporter-datadog pip install opentelemetry-instrumentation pip install opentelemetry-ext-flask pip install flask diff --git a/docs/examples/datadog_exporter/basic_example.py b/docs/examples/datadog_exporter/basic_example.py index a41f9e0462c..5eb470719b7 100644 --- a/docs/examples/datadog_exporter/basic_example.py +++ b/docs/examples/datadog_exporter/basic_example.py @@ -15,7 +15,7 @@ # limitations under the License. from opentelemetry import trace -from opentelemetry.ext.datadog import ( +from opentelemetry.exporter.datadog import ( DatadogExportSpanProcessor, DatadogSpanExporter, ) diff --git a/docs/examples/datadog_exporter/client.py b/docs/examples/datadog_exporter/client.py index 3969ef04d9a..2570c426d5f 100644 --- a/docs/examples/datadog_exporter/client.py +++ b/docs/examples/datadog_exporter/client.py @@ -17,7 +17,7 @@ from requests import get from opentelemetry import propagators, trace -from opentelemetry.ext.datadog import ( +from opentelemetry.exporter.datadog import ( DatadogExportSpanProcessor, DatadogSpanExporter, ) diff --git a/docs/examples/datadog_exporter/server.py b/docs/examples/datadog_exporter/server.py index e2099fdf25c..15d10f34934 100644 --- a/docs/examples/datadog_exporter/server.py +++ b/docs/examples/datadog_exporter/server.py @@ -15,11 +15,11 @@ from flask import Flask, request from opentelemetry import propagators, trace -from opentelemetry.ext.datadog import ( +from opentelemetry.exporter.datadog import ( DatadogExportSpanProcessor, DatadogSpanExporter, ) -from opentelemetry.ext.datadog.propagator import DatadogFormat +from opentelemetry.exporter.datadog.propagator import DatadogFormat from opentelemetry.sdk.trace import TracerProvider app = Flask(__name__) diff --git a/docs/examples/opencensus-exporter-metrics/README.rst b/docs/examples/opencensus-exporter-metrics/README.rst index 30961e061df..0a71685ee9f 100644 --- a/docs/examples/opencensus-exporter-metrics/README.rst +++ b/docs/examples/opencensus-exporter-metrics/README.rst @@ -13,7 +13,7 @@ Installation pip install opentelemetry-api pip install opentelemetry-sdk - pip install opentelemetry-ext-opencensusexporter + pip install opentelemetry-exporter-opencensus Run the Example --------------- @@ -46,7 +46,7 @@ Useful links - OpenTelemetry_ - `OpenTelemetry Collector`_ - :doc:`../../api/trace` -- :doc:`../../ext/opencensusexporter/opencensusexporter` +- :doc:`../../exporter/opencensus/opencensus` .. _OpenTelemetry: https://github.com/open-telemetry/opentelemetry-python/ .. _OpenTelemetry Collector: https://github.com/open-telemetry/opentelemetry-collector diff --git a/docs/examples/opencensus-exporter-metrics/collector.py b/docs/examples/opencensus-exporter-metrics/collector.py index 725f07b77ab..dc39f0cf4cd 100644 --- a/docs/examples/opencensus-exporter-metrics/collector.py +++ b/docs/examples/opencensus-exporter-metrics/collector.py @@ -17,7 +17,7 @@ """ from opentelemetry import metrics -from opentelemetry.ext.opencensusexporter.metrics_exporter import ( +from opentelemetry.exporter.opencensus.metrics_exporter import ( OpenCensusMetricsExporter, ) from opentelemetry.sdk.metrics import Counter, MeterProvider diff --git a/docs/examples/opencensus-exporter-tracer/README.rst b/docs/examples/opencensus-exporter-tracer/README.rst index 00199943086..d147f008d49 100644 --- a/docs/examples/opencensus-exporter-tracer/README.rst +++ b/docs/examples/opencensus-exporter-tracer/README.rst @@ -13,7 +13,7 @@ Installation pip install opentelemetry-api pip install opentelemetry-sdk - pip install opentelemetry-ext-opencensusexporter + pip install opentelemetry-exporter-opencensus Run the Example --------------- @@ -45,7 +45,7 @@ Useful links - OpenTelemetry_ - `OpenTelemetry Collector`_ - :doc:`../../api/trace` -- :doc:`../../ext/opencensusexporter/opencensusexporter` +- :doc:`../../exporter/opencensus/opencensus` .. _OpenTelemetry: https://github.com/open-telemetry/opentelemetry-python/ .. _OpenTelemetry Collector: https://github.com/open-telemetry/opentelemetry-collector diff --git a/docs/examples/opencensus-exporter-tracer/collector.py b/docs/examples/opencensus-exporter-tracer/collector.py index 3f0c18aaf75..d404cfbce5f 100644 --- a/docs/examples/opencensus-exporter-tracer/collector.py +++ b/docs/examples/opencensus-exporter-tracer/collector.py @@ -15,7 +15,7 @@ # limitations under the License. from opentelemetry import trace -from opentelemetry.ext.opencensusexporter.trace_exporter import ( +from opentelemetry.exporter.opencensus.trace_exporter import ( OpenCensusSpanExporter, ) from opentelemetry.sdk.trace import TracerProvider diff --git a/docs/examples/opentracing/main.py b/docs/examples/opentracing/main.py index 8586e0b789e..9ecbbba8ca4 100755 --- a/docs/examples/opentracing/main.py +++ b/docs/examples/opentracing/main.py @@ -1,8 +1,8 @@ #!/usr/bin/env python from opentelemetry import trace +from opentelemetry.exporter.jaeger import JaegerSpanExporter from opentelemetry.ext import opentracing_shim -from opentelemetry.ext.jaeger import JaegerSpanExporter from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import SimpleExportSpanProcessor from rediscache import RedisCache diff --git a/docs/examples/opentracing/requirements.txt b/docs/examples/opentracing/requirements.txt index d87842f4d89..fa4b520936d 100644 --- a/docs/examples/opentracing/requirements.txt +++ b/docs/examples/opentracing/requirements.txt @@ -1,6 +1,6 @@ opentelemetry-api opentelemetry-sdk -opentelemetry-ext-jaeger +opentelemetry-exporter-jaeger opentelemetry-opentracing-shim redis redis_opentracing diff --git a/docs/ext/datadog/datadog.rst b/docs/exporter/datadog/datadog.rst similarity index 71% rename from docs/ext/datadog/datadog.rst rename to docs/exporter/datadog/datadog.rst index 5ae7e042890..3b43c2bdf72 100644 --- a/docs/ext/datadog/datadog.rst +++ b/docs/exporter/datadog/datadog.rst @@ -1,7 +1,7 @@ OpenTelemetry Datadog Exporter ============================== -.. automodule:: opentelemetry.ext.datadog +.. automodule:: opentelemetry.exporter.datadog :members: :undoc-members: :show-inheritance: diff --git a/docs/ext/jaeger/jaeger.rst b/docs/exporter/jaeger/jaeger.rst similarity index 64% rename from docs/ext/jaeger/jaeger.rst rename to docs/exporter/jaeger/jaeger.rst index d7b93a6f10f..6988d8cea9c 100644 --- a/docs/ext/jaeger/jaeger.rst +++ b/docs/exporter/jaeger/jaeger.rst @@ -1,7 +1,7 @@ Opentelemetry Jaeger Exporter ============================= -.. automodule:: opentelemetry.ext.jaeger +.. automodule:: opentelemetry.exporter.jaeger :members: :undoc-members: :show-inheritance: @@ -10,7 +10,7 @@ Opentelemetry Jaeger Exporter Submodules ---------- -.. automodule:: opentelemetry.ext.jaeger.gen.jaeger.ttypes +.. automodule:: opentelemetry.exporter.jaeger.gen.jaeger.ttypes :members: :undoc-members: :show-inheritance: diff --git a/docs/ext/opencensusexporter/opencensusexporter.rst b/docs/exporter/opencensus/opencensus.rst similarity index 64% rename from docs/ext/opencensusexporter/opencensusexporter.rst rename to docs/exporter/opencensus/opencensus.rst index 07b9a855582..6bdcd6a873c 100644 --- a/docs/ext/opencensusexporter/opencensusexporter.rst +++ b/docs/exporter/opencensus/opencensus.rst @@ -1,7 +1,7 @@ OpenCensus Exporter =================== -.. automodule:: opentelemetry.ext.opencensusexporter +.. automodule:: opentelemetry.exporter.opencensus :members: :undoc-members: :show-inheritance: diff --git a/docs/ext/otlp/otlp.rst b/docs/exporter/otlp/otlp.rst similarity index 72% rename from docs/ext/otlp/otlp.rst rename to docs/exporter/otlp/otlp.rst index 4739d21a581..7663ec9489c 100644 --- a/docs/ext/otlp/otlp.rst +++ b/docs/exporter/otlp/otlp.rst @@ -1,7 +1,7 @@ Opentelemetry OTLP Exporter =========================== -.. automodule:: opentelemetry.ext.otlp +.. automodule:: opentelemetry.exporter.otlp :members: :undoc-members: :show-inheritance: diff --git a/docs/ext/prometheus/prometheus.rst b/docs/exporter/prometheus/prometheus.rst similarity index 71% rename from docs/ext/prometheus/prometheus.rst rename to docs/exporter/prometheus/prometheus.rst index 9ca7754af95..f4ad1a8245b 100644 --- a/docs/ext/prometheus/prometheus.rst +++ b/docs/exporter/prometheus/prometheus.rst @@ -1,7 +1,7 @@ OpenTelemetry Prometheus Exporter ================================= -.. automodule:: opentelemetry.ext.prometheus +.. automodule:: opentelemetry.exporter.prometheus :members: :undoc-members: :show-inheritance: diff --git a/docs/ext/zipkin/zipkin.rst b/docs/exporter/zipkin/zipkin.rst similarity index 71% rename from docs/ext/zipkin/zipkin.rst rename to docs/exporter/zipkin/zipkin.rst index 8a5191a86d1..18042022a45 100644 --- a/docs/ext/zipkin/zipkin.rst +++ b/docs/exporter/zipkin/zipkin.rst @@ -1,7 +1,7 @@ Opentelemetry Zipkin Exporter ============================= -.. automodule:: opentelemetry.ext.zipkin +.. automodule:: opentelemetry.exporter.zipkin :members: :undoc-members: :show-inheritance: diff --git a/docs/ext/cloud_monitoring/cloud_monitoring.rst b/docs/ext/cloud_monitoring/cloud_monitoring.rst deleted file mode 100644 index a3a4f5660ad..00000000000 --- a/docs/ext/cloud_monitoring/cloud_monitoring.rst +++ /dev/null @@ -1,7 +0,0 @@ -OpenTelemetry Cloud Monitoring Exporter -======================================= - -.. automodule:: opentelemetry.exporter.cloud_monitoring - :members: - :undoc-members: - :show-inheritance: \ No newline at end of file diff --git a/docs/ext/cloud_trace/cloud_trace.rst b/docs/ext/cloud_trace/cloud_trace.rst deleted file mode 100644 index 5914b00d1a4..00000000000 --- a/docs/ext/cloud_trace/cloud_trace.rst +++ /dev/null @@ -1,7 +0,0 @@ -OpenTelemetry Cloud Trace Exporter -================================== - -.. automodule:: opentelemetry.exporter.cloud_trace - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/getting_started/jaeger_example.py b/docs/getting_started/jaeger_example.py index 8ddb4a0586d..f9c8e5cd059 100644 --- a/docs/getting_started/jaeger_example.py +++ b/docs/getting_started/jaeger_example.py @@ -14,7 +14,7 @@ # jaeger_example.py from opentelemetry import trace -from opentelemetry.ext import jaeger +from opentelemetry.exporter import jaeger from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchExportSpanProcessor diff --git a/docs/getting_started/prometheus_example.py b/docs/getting_started/prometheus_example.py index ce658d3419f..0377e570b86 100644 --- a/docs/getting_started/prometheus_example.py +++ b/docs/getting_started/prometheus_example.py @@ -19,7 +19,7 @@ from prometheus_client import start_http_server from opentelemetry import metrics -from opentelemetry.ext.prometheus import PrometheusMetricsExporter +from opentelemetry.exporter.prometheus import PrometheusMetricsExporter from opentelemetry.sdk.metrics import Counter, MeterProvider from opentelemetry.sdk.metrics.export import ConsoleMetricsExporter from opentelemetry.sdk.metrics.export.controller import PushController diff --git a/docs/index.rst b/docs/index.rst index b25efa8acc6..b59af3a003c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -72,8 +72,16 @@ install .. toctree:: :maxdepth: 2 - :caption: OpenTelemetry Integrations - :name: integrations + :caption: OpenTelemetry Exporters + :name: exporters + :glob: + + exporter/** + +.. toctree:: + :maxdepth: 2 + :caption: OpenTelemetry Instrumentations + :name: Instrumentations :glob: ext/** diff --git a/eachdist.ini b/eachdist.ini index 4a197ad2914..82fc0271eda 100644 --- a/eachdist.ini +++ b/eachdist.ini @@ -7,6 +7,7 @@ sortfirst= opentelemetry-instrumentation opentelemetry-proto tests/util + exporter/* ext/opentelemetry-ext-wsgi ext/opentelemetry-ext-dbapi ext/opentelemetry-ext-asgi diff --git a/ext/opentelemetry-ext-datadog/CHANGELOG.md b/exporter/opentelemetry-exporter-datadog/CHANGELOG.md similarity index 55% rename from ext/opentelemetry-ext-datadog/CHANGELOG.md rename to exporter/opentelemetry-exporter-datadog/CHANGELOG.md index 15c6ff4b000..d15d5a4b5d1 100644 --- a/ext/opentelemetry-ext-datadog/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-datadog/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-exporter-datadog + ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953)) + ## 0.8b0 Released 2020-05-27 diff --git a/ext/opentelemetry-ext-datadog/README.rst b/exporter/opentelemetry-exporter-datadog/README.rst similarity index 71% rename from ext/opentelemetry-ext-datadog/README.rst rename to exporter/opentelemetry-exporter-datadog/README.rst index 9f9a2aeb889..cb97e5997fe 100644 --- a/ext/opentelemetry-ext-datadog/README.rst +++ b/exporter/opentelemetry-exporter-datadog/README.rst @@ -3,8 +3,8 @@ OpenTelemetry Datadog Exporter |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-datadog.svg - :target: https://pypi.org/project/opentelemetry-ext-datadog/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-exporter-datadog.svg + :target: https://pypi.org/project/opentelemetry-exporter-datadog/ This library allows to export tracing data to `Datadog `_. OpenTelemetry span event and links are not @@ -15,7 +15,7 @@ Installation :: - pip install opentelemetry-ext-datadog + pip install opentelemetry-exporter-datadog .. _Datadog: https://www.datadoghq.com/ diff --git a/ext/opentelemetry-ext-datadog/setup.cfg b/exporter/opentelemetry-exporter-datadog/setup.cfg similarity index 91% rename from ext/opentelemetry-ext-datadog/setup.cfg rename to exporter/opentelemetry-exporter-datadog/setup.cfg index 95b0bb08571..266abe9e0ba 100644 --- a/ext/opentelemetry-ext-datadog/setup.cfg +++ b/exporter/opentelemetry-exporter-datadog/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-datadog +name = opentelemetry-exporter-datadog description = Datadog Span Exporter 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-datadog +url = https://github.com/open-telemetry/opentelemetry-python/exporter/opentelemetry-exporter-datadog platforms = any license = Apache-2.0 classifiers = diff --git a/ext/opentelemetry-ext-jaeger/setup.py b/exporter/opentelemetry-exporter-datadog/setup.py similarity index 91% rename from ext/opentelemetry-ext-jaeger/setup.py rename to exporter/opentelemetry-exporter-datadog/setup.py index 842a6f6416b..0c3bdf453fd 100644 --- a/ext/opentelemetry-ext-jaeger/setup.py +++ b/exporter/opentelemetry-exporter-datadog/setup.py @@ -11,13 +11,14 @@ # 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", "jaeger", "version.py" + BASE_DIR, "src", "opentelemetry", "exporter", "datadog", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/__init__.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/__init__.py similarity index 93% rename from ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/__init__.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/__init__.py index 85bdaea40aa..7adde5df500 100644 --- a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/__init__.py +++ b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/__init__.py @@ -35,8 +35,8 @@ .. code:: python from opentelemetry import propagators, trace - from opentelemetry.ext.datadog import DatadogExportSpanProcessor, DatadogSpanExporter - from opentelemetry.ext.datadog.propagator import DatadogFormat + from opentelemetry.exporter.datadog import DatadogExportSpanProcessor, DatadogSpanExporter + from opentelemetry.exporter.datadog.propagator import DatadogFormat from opentelemetry.sdk.trace import TracerProvider trace.set_tracer_provider(TracerProvider()) diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/constants.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/constants.py similarity index 100% rename from ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/constants.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/constants.py diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/exporter.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py similarity index 100% rename from ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/exporter.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/propagator.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/propagator.py similarity index 100% rename from ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/propagator.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/propagator.py diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/spanprocessor.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/spanprocessor.py similarity index 100% rename from ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/spanprocessor.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/spanprocessor.py diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/version.py similarity index 100% rename from ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/version.py diff --git a/ext/opentelemetry-ext-datadog/tests/__init__.py b/exporter/opentelemetry-exporter-datadog/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-datadog/tests/__init__.py rename to exporter/opentelemetry-exporter-datadog/tests/__init__.py diff --git a/ext/opentelemetry-ext-datadog/tests/test_datadog_exporter.py b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py similarity index 99% rename from ext/opentelemetry-ext-datadog/tests/test_datadog_exporter.py rename to exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py index 5306d517b76..a3e67790d97 100644 --- a/ext/opentelemetry-ext-datadog/tests/test_datadog_exporter.py +++ b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py @@ -21,7 +21,7 @@ from ddtrace.internal.writer import AgentWriter from opentelemetry import trace as trace_api -from opentelemetry.ext import datadog +from opentelemetry.exporter import datadog from opentelemetry.sdk import trace from opentelemetry.sdk.util.instrumentation import InstrumentationInfo diff --git a/ext/opentelemetry-ext-datadog/tests/test_datadog_format.py b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_format.py similarity index 98% rename from ext/opentelemetry-ext-datadog/tests/test_datadog_format.py rename to exporter/opentelemetry-exporter-datadog/tests/test_datadog_format.py index 31633f83701..1a398745b8d 100644 --- a/ext/opentelemetry-ext-datadog/tests/test_datadog_format.py +++ b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_format.py @@ -15,7 +15,7 @@ import unittest from opentelemetry import trace as trace_api -from opentelemetry.ext.datadog import constants, propagator +from opentelemetry.exporter.datadog import constants, propagator from opentelemetry.sdk import trace from opentelemetry.trace import get_current_span, set_span_in_context diff --git a/ext/opentelemetry-ext-jaeger/CHANGELOG.md b/exporter/opentelemetry-exporter-jaeger/CHANGELOG.md similarity index 87% rename from ext/opentelemetry-ext-jaeger/CHANGELOG.md rename to exporter/opentelemetry-exporter-jaeger/CHANGELOG.md index dada0101e0d..7b9a03d3122 100644 --- a/ext/opentelemetry-ext-jaeger/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-jaeger/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-exporter-jaeger + ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953)) + ## 0.8b0 Released 2020-05-27 diff --git a/ext/opentelemetry-ext-jaeger/LICENSE b/exporter/opentelemetry-exporter-jaeger/LICENSE similarity index 100% rename from ext/opentelemetry-ext-jaeger/LICENSE rename to exporter/opentelemetry-exporter-jaeger/LICENSE diff --git a/ext/opentelemetry-ext-jaeger/MANIFEST.in b/exporter/opentelemetry-exporter-jaeger/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-jaeger/MANIFEST.in rename to exporter/opentelemetry-exporter-jaeger/MANIFEST.in diff --git a/ext/opentelemetry-ext-jaeger/README.rst b/exporter/opentelemetry-exporter-jaeger/README.rst similarity index 66% rename from ext/opentelemetry-ext-jaeger/README.rst rename to exporter/opentelemetry-exporter-jaeger/README.rst index caa3afa9327..0069d130cdf 100644 --- a/ext/opentelemetry-ext-jaeger/README.rst +++ b/exporter/opentelemetry-exporter-jaeger/README.rst @@ -3,8 +3,8 @@ OpenTelemetry Jaeger Exporter |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-jaeger.svg - :target: https://pypi.org/project/opentelemetry-ext-jaeger/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-exporter-jaeger.svg + :target: https://pypi.org/project/opentelemetry-exporter-jaeger/ This library allows to export tracing data to `Jaeger `_. @@ -13,7 +13,7 @@ Installation :: - pip install opentelemetry-ext-jaeger + pip install opentelemetry-exporter-jaeger .. _Jaeger: https://www.jaegertracing.io/ @@ -23,6 +23,6 @@ Installation References ---------- -* `OpenTelemetry Jaeger Exporter `_ +* `OpenTelemetry Jaeger Exporter `_ * `Jaeger `_ * `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-jaeger/examples/jaeger_exporter_example.py b/exporter/opentelemetry-exporter-jaeger/examples/jaeger_exporter_example.py similarity index 97% rename from ext/opentelemetry-ext-jaeger/examples/jaeger_exporter_example.py rename to exporter/opentelemetry-exporter-jaeger/examples/jaeger_exporter_example.py index 1aca62fc23f..68453fd9fac 100644 --- a/ext/opentelemetry-ext-jaeger/examples/jaeger_exporter_example.py +++ b/exporter/opentelemetry-exporter-jaeger/examples/jaeger_exporter_example.py @@ -1,7 +1,7 @@ import time from opentelemetry import trace -from opentelemetry.ext import jaeger +from opentelemetry.exporter import jaeger from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchExportSpanProcessor diff --git a/ext/opentelemetry-ext-jaeger/setup.cfg b/exporter/opentelemetry-exporter-jaeger/setup.cfg similarity index 94% rename from ext/opentelemetry-ext-jaeger/setup.cfg rename to exporter/opentelemetry-exporter-jaeger/setup.cfg index fc581301b6f..b660e8ec1c1 100644 --- a/ext/opentelemetry-ext-jaeger/setup.cfg +++ b/exporter/opentelemetry-exporter-jaeger/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-jaeger +name = opentelemetry-exporter-jaeger description = Jaeger Exporter 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/tree/master/ext/opentelemetry-ext-jaeger +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/exporter/opentelemetry-exporter-jaeger platforms = any license = Apache-2.0 classifiers = diff --git a/ext/opentelemetry-ext-otlp/setup.py b/exporter/opentelemetry-exporter-jaeger/setup.py similarity index 91% rename from ext/opentelemetry-ext-otlp/setup.py rename to exporter/opentelemetry-exporter-jaeger/setup.py index 64c30afbaba..1bd39703297 100644 --- a/ext/opentelemetry-ext-otlp/setup.py +++ b/exporter/opentelemetry-exporter-jaeger/setup.py @@ -17,7 +17,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "otlp", "version.py" + BASE_DIR, "src", "opentelemetry", "exporter", "jaeger", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/__init__.py similarity index 98% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/__init__.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/__init__.py index f12031d510b..993bf4f0872 100644 --- a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/__init__.py +++ b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/__init__.py @@ -25,7 +25,7 @@ .. code:: python from opentelemetry import trace - from opentelemetry.ext import jaeger + from opentelemetry.exporter import jaeger from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchExportSpanProcessor @@ -69,8 +69,8 @@ from thrift.transport import THttpClient, TTransport import opentelemetry.trace as trace_api -from opentelemetry.ext.jaeger.gen.agent import Agent as agent -from opentelemetry.ext.jaeger.gen.jaeger import Collector as jaeger +from opentelemetry.exporter.jaeger.gen.agent import Agent as agent +from opentelemetry.exporter.jaeger.gen.jaeger import Collector as jaeger from opentelemetry.sdk.trace.export import Span, SpanExporter, SpanExportResult from opentelemetry.trace.status import StatusCanonicalCode diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/__init__.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/__init__.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/__init__.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/Agent-remote b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/Agent-remote old mode 100755 new mode 100644 similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/Agent-remote rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/Agent-remote diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/Agent.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/Agent.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/Agent.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/Agent.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/__init__.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/__init__.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/__init__.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/constants.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/constants.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/constants.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/constants.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/ttypes.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/ttypes.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/ttypes.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/ttypes.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/Collector-remote b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/Collector-remote old mode 100755 new mode 100644 similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/Collector-remote rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/Collector-remote diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/Collector.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/Collector.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/Collector.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/Collector.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/__init__.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/__init__.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/__init__.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/constants.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/constants.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/constants.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/constants.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/ttypes.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/ttypes.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/ttypes.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/ttypes.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector-remote b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/ZipkinCollector-remote old mode 100755 new mode 100644 similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector-remote rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/ZipkinCollector-remote diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/ZipkinCollector.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/ZipkinCollector.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/__init__.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/__init__.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/__init__.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/constants.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/constants.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/constants.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/constants.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ttypes.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/ttypes.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ttypes.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/ttypes.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/version.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/version.py diff --git a/ext/opentelemetry-ext-jaeger/tests/__init__.py b/exporter/opentelemetry-exporter-jaeger/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/tests/__init__.py rename to exporter/opentelemetry-exporter-jaeger/tests/__init__.py diff --git a/ext/opentelemetry-ext-jaeger/tests/test_jaeger_exporter.py b/exporter/opentelemetry-exporter-jaeger/tests/test_jaeger_exporter.py similarity index 99% rename from ext/opentelemetry-ext-jaeger/tests/test_jaeger_exporter.py rename to exporter/opentelemetry-exporter-jaeger/tests/test_jaeger_exporter.py index 7bca8e83178..30b7c85826a 100644 --- a/ext/opentelemetry-ext-jaeger/tests/test_jaeger_exporter.py +++ b/exporter/opentelemetry-exporter-jaeger/tests/test_jaeger_exporter.py @@ -18,9 +18,9 @@ # pylint:disable=no-name-in-module # pylint:disable=import-error -import opentelemetry.ext.jaeger as jaeger_exporter +import opentelemetry.exporter.jaeger as jaeger_exporter from opentelemetry import trace as trace_api -from opentelemetry.ext.jaeger.gen.jaeger import ttypes as jaeger +from opentelemetry.exporter.jaeger.gen.jaeger import ttypes as jaeger from opentelemetry.sdk import trace from opentelemetry.sdk.trace import Resource from opentelemetry.trace.status import Status, StatusCanonicalCode diff --git a/ext/opentelemetry-ext-jaeger/thrift/agent.thrift b/exporter/opentelemetry-exporter-jaeger/thrift/agent.thrift similarity index 100% rename from ext/opentelemetry-ext-jaeger/thrift/agent.thrift rename to exporter/opentelemetry-exporter-jaeger/thrift/agent.thrift diff --git a/ext/opentelemetry-ext-jaeger/thrift/jaeger.thrift b/exporter/opentelemetry-exporter-jaeger/thrift/jaeger.thrift similarity index 100% rename from ext/opentelemetry-ext-jaeger/thrift/jaeger.thrift rename to exporter/opentelemetry-exporter-jaeger/thrift/jaeger.thrift diff --git a/ext/opentelemetry-ext-jaeger/thrift/zipkincore.thrift b/exporter/opentelemetry-exporter-jaeger/thrift/zipkincore.thrift similarity index 100% rename from ext/opentelemetry-ext-jaeger/thrift/zipkincore.thrift rename to exporter/opentelemetry-exporter-jaeger/thrift/zipkincore.thrift diff --git a/ext/opentelemetry-ext-opencensusexporter/CHANGELOG.md b/exporter/opentelemetry-exporter-opencensus/CHANGELOG.md similarity index 61% rename from ext/opentelemetry-ext-opencensusexporter/CHANGELOG.md rename to exporter/opentelemetry-exporter-opencensus/CHANGELOG.md index 4d1c9a97b82..c7f0cf69b5c 100644 --- a/ext/opentelemetry-ext-opencensusexporter/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-opencensus/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-exporter-opencensus + ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953)) + ## 0.8b0 Released 2020-05-27 diff --git a/ext/opentelemetry-ext-opencensusexporter/LICENSE b/exporter/opentelemetry-exporter-opencensus/LICENSE similarity index 100% rename from ext/opentelemetry-ext-opencensusexporter/LICENSE rename to exporter/opentelemetry-exporter-opencensus/LICENSE diff --git a/ext/opentelemetry-ext-opencensusexporter/MANIFEST.in b/exporter/opentelemetry-exporter-opencensus/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-opencensusexporter/MANIFEST.in rename to exporter/opentelemetry-exporter-opencensus/MANIFEST.in diff --git a/ext/opentelemetry-ext-opencensusexporter/README.rst b/exporter/opentelemetry-exporter-opencensus/README.rst similarity index 57% rename from ext/opentelemetry-ext-opencensusexporter/README.rst rename to exporter/opentelemetry-exporter-opencensus/README.rst index 75563053d10..7f282d307e1 100644 --- a/ext/opentelemetry-ext-opencensusexporter/README.rst +++ b/exporter/opentelemetry-exporter-opencensus/README.rst @@ -3,8 +3,8 @@ OpenCensus Exporter |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-opencensusexporter.svg - :target: https://pypi.org/project/opentelemetry-ext-opencensusexporter/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-exporter-opencensus.svg + :target: https://pypi.org/project/opentelemetry-exporter-opencensus/ This library allows to export traces and metrics using OpenCensus. @@ -13,12 +13,12 @@ Installation :: - pip install opentelemetry-ext-opencensusexporter + pip install opentelemetry-exporter-opencensus References ---------- -* `OpenCensus Exporter `_ +* `OpenCensus Exporter `_ * `OpenTelemetry Collector `_ * `OpenTelemetry `_ diff --git a/ext/opentelemetry-ext-opencensusexporter/setup.cfg b/exporter/opentelemetry-exporter-opencensus/setup.cfg similarity index 94% rename from ext/opentelemetry-ext-opencensusexporter/setup.cfg rename to exporter/opentelemetry-exporter-opencensus/setup.cfg index 0a3376083a7..64b4b4a2286 100644 --- a/ext/opentelemetry-ext-opencensusexporter/setup.cfg +++ b/exporter/opentelemetry-exporter-opencensus/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-opencensusexporter +name = opentelemetry-exporter-opencensus description = OpenCensus Exporter 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/tree/master/ext/opentelemetry-ext-opencensusexporter +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/exporter/opentelemetry-exporter-opencensus platforms = any license = Apache-2.0 classifiers = diff --git a/exporter/opentelemetry-exporter-opencensus/setup.py b/exporter/opentelemetry-exporter-opencensus/setup.py new file mode 100644 index 00000000000..65c91aba9ff --- /dev/null +++ b/exporter/opentelemetry-exporter-opencensus/setup.py @@ -0,0 +1,26 @@ +# Copyright The 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", "exporter", "opencensus", "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-opencensusexporter/src/opentelemetry/ext/opencensusexporter/__init__.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/__init__.py similarity index 100% rename from ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/__init__.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/__init__.py diff --git a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/metrics_exporter/__init__.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/metrics_exporter/__init__.py similarity index 98% rename from ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/metrics_exporter/__init__.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/metrics_exporter/__init__.py index bb1a1ee888c..e83e779df67 100644 --- a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/metrics_exporter/__init__.py +++ b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/metrics_exporter/__init__.py @@ -24,7 +24,7 @@ ) from opencensus.proto.metrics.v1 import metrics_pb2 -import opentelemetry.ext.opencensusexporter.util as utils +import opentelemetry.exporter.opencensus.util as utils from opentelemetry.sdk.metrics import Counter, Metric from opentelemetry.sdk.metrics.export import ( MetricRecord, diff --git a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/trace_exporter/__init__.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/trace_exporter/__init__.py similarity index 99% rename from ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/trace_exporter/__init__.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/trace_exporter/__init__.py index adadef1666f..e5eb4eaf770 100644 --- a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/trace_exporter/__init__.py +++ b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/trace_exporter/__init__.py @@ -24,7 +24,7 @@ ) from opencensus.proto.trace.v1 import trace_pb2 -import opentelemetry.ext.opencensusexporter.util as utils +import opentelemetry.exporter.opencensus.util as utils from opentelemetry.sdk.trace import Span from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult diff --git a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/util.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/util.py similarity index 98% rename from ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/util.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/util.py index 88ff6258f7d..9b9e7201906 100644 --- a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/util.py +++ b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/util.py @@ -21,7 +21,7 @@ from opencensus.proto.agent.common.v1 import common_pb2 from opencensus.proto.trace.v1 import trace_pb2 -from opentelemetry.ext.opencensusexporter.version import ( +from opentelemetry.exporter.opencensus.version import ( __version__ as opencensusexporter_exporter_version, ) from opentelemetry.trace import SpanKind diff --git a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/version.py similarity index 100% rename from ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/version.py diff --git a/ext/opentelemetry-ext-opencensusexporter/tests/__init__.py b/exporter/opentelemetry-exporter-opencensus/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-opencensusexporter/tests/__init__.py rename to exporter/opentelemetry-exporter-opencensus/tests/__init__.py diff --git a/ext/opentelemetry-ext-opencensusexporter/tests/test_otcollector_metrics_exporter.py b/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_metrics_exporter.py similarity index 98% rename from ext/opentelemetry-ext-opencensusexporter/tests/test_otcollector_metrics_exporter.py rename to exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_metrics_exporter.py index f538e5acecd..eddaf963608 100644 --- a/ext/opentelemetry-ext-opencensusexporter/tests/test_otcollector_metrics_exporter.py +++ b/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_metrics_exporter.py @@ -20,7 +20,7 @@ from opencensus.proto.metrics.v1 import metrics_pb2 from opentelemetry import metrics -from opentelemetry.ext.opencensusexporter import metrics_exporter +from opentelemetry.exporter.opencensus import metrics_exporter from opentelemetry.sdk.metrics import ( Counter, MeterProvider, @@ -47,7 +47,7 @@ def setUpClass(cls): def test_constructor(self): mock_get_node = mock.Mock() patch = mock.patch( - "opentelemetry.ext.opencensusexporter.util.get_node", + "opentelemetry.exporter.opencensus.util.get_node", side_effect=mock_get_node, ) service_name = "testServiceName" diff --git a/ext/opentelemetry-ext-opencensusexporter/tests/test_otcollector_trace_exporter.py b/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_trace_exporter.py similarity index 98% rename from ext/opentelemetry-ext-opencensusexporter/tests/test_otcollector_trace_exporter.py rename to exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_trace_exporter.py index 0801d6d0c1b..d07fd053b45 100644 --- a/ext/opentelemetry-ext-opencensusexporter/tests/test_otcollector_trace_exporter.py +++ b/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_trace_exporter.py @@ -19,9 +19,9 @@ from google.protobuf.timestamp_pb2 import Timestamp from opencensus.proto.trace.v1 import trace_pb2 -import opentelemetry.ext.opencensusexporter.util as utils +import opentelemetry.exporter.opencensus.util as utils from opentelemetry import trace as trace_api -from opentelemetry.ext.opencensusexporter.trace_exporter import ( +from opentelemetry.exporter.opencensus.trace_exporter import ( OpenCensusSpanExporter, translate_to_collector, ) @@ -35,7 +35,7 @@ class TestCollectorSpanExporter(unittest.TestCase): def test_constructor(self): mock_get_node = mock.Mock() patch = mock.patch( - "opentelemetry.ext.opencensusexporter.util.get_node", + "opentelemetry.exporter.opencensus.util.get_node", side_effect=mock_get_node, ) service_name = "testServiceName" diff --git a/ext/opentelemetry-ext-otlp/CHANGELOG.md b/exporter/opentelemetry-exporter-otlp/CHANGELOG.md similarity index 65% rename from ext/opentelemetry-ext-otlp/CHANGELOG.md rename to exporter/opentelemetry-exporter-otlp/CHANGELOG.md index 32e75eda55d..bcaa7d11811 100644 --- a/ext/opentelemetry-ext-otlp/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-otlp/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-exporter-otlp + ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953)) + ## Version 0.11b0 Released 2020-07-28 diff --git a/ext/opentelemetry-ext-otlp/LICENSE b/exporter/opentelemetry-exporter-otlp/LICENSE similarity index 100% rename from ext/opentelemetry-ext-otlp/LICENSE rename to exporter/opentelemetry-exporter-otlp/LICENSE diff --git a/ext/opentelemetry-ext-otlp/MANIFEST.in b/exporter/opentelemetry-exporter-otlp/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-otlp/MANIFEST.in rename to exporter/opentelemetry-exporter-otlp/MANIFEST.in diff --git a/ext/opentelemetry-ext-otlp/README.rst b/exporter/opentelemetry-exporter-otlp/README.rst similarity index 70% rename from ext/opentelemetry-ext-otlp/README.rst rename to exporter/opentelemetry-exporter-otlp/README.rst index ab233cbc62b..8adf6571815 100644 --- a/ext/opentelemetry-ext-otlp/README.rst +++ b/exporter/opentelemetry-exporter-otlp/README.rst @@ -3,8 +3,8 @@ OpenTelemetry Collector Exporter |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-otlp.svg - :target: https://pypi.org/project/opentelemetry-ext-otlp/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-exporter-otlp.svg + :target: https://pypi.org/project/opentelemetry-exporter-otlp/ This library allows to export data to the OpenTelemetry Collector using the OpenTelemetry Protocol. @@ -13,13 +13,13 @@ Installation :: - pip install opentelemetry-ext-otlp + pip install opentelemetry-exporter-otlp References ---------- -* `OpenTelemetry Collector Exporter `_ +* `OpenTelemetry Collector Exporter `_ * `OpenTelemetry Collector `_ * `OpenTelemetry `_ * `OpenTelemetry Protocol Specification `_ diff --git a/ext/opentelemetry-ext-otlp/setup.cfg b/exporter/opentelemetry-exporter-otlp/setup.cfg similarity index 95% rename from ext/opentelemetry-ext-otlp/setup.cfg rename to exporter/opentelemetry-exporter-otlp/setup.cfg index b6bfac669b9..262ac02008b 100644 --- a/ext/opentelemetry-ext-otlp/setup.cfg +++ b/exporter/opentelemetry-exporter-otlp/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-otlp +name = opentelemetry-exporter-otlp description = OpenTelemetry Collector Exporter 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/tree/master/ext/opentelemetry-ext-otlp +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/exporter/opentelemetry-exporter-otlp platforms = any license = Apache-2.0 classifiers = diff --git a/ext/opentelemetry-ext-datadog/setup.py b/exporter/opentelemetry-exporter-otlp/setup.py similarity index 92% rename from ext/opentelemetry-ext-datadog/setup.py rename to exporter/opentelemetry-exporter-otlp/setup.py index f6573911046..c04c30fca48 100644 --- a/ext/opentelemetry-ext-datadog/setup.py +++ b/exporter/opentelemetry-exporter-otlp/setup.py @@ -11,14 +11,13 @@ # 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", "datadog", "version.py" + BASE_DIR, "src", "opentelemetry", "exporter", "otlp", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/__init__.py b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/__init__.py similarity index 95% rename from ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/__init__.py rename to exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/__init__.py index 1b315c5847a..dca0042a68d 100644 --- a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/__init__.py +++ b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/__init__.py @@ -29,7 +29,7 @@ .. code:: python from opentelemetry import trace - from opentelemetry.ext.otlp.trace_exporter import OTLPSpanExporter + from opentelemetry.exporter.otlp.trace_exporter import OTLPSpanExporter from opentelemetry.sdk.resources import Resource from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchExportSpanProcessor diff --git a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/trace_exporter/__init__.py b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/trace_exporter/__init__.py similarity index 100% rename from ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/trace_exporter/__init__.py rename to exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/trace_exporter/__init__.py diff --git a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/version.py similarity index 100% rename from ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py rename to exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/version.py diff --git a/ext/opentelemetry-ext-otlp/tests/__init__.py b/exporter/opentelemetry-exporter-otlp/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-otlp/tests/__init__.py rename to exporter/opentelemetry-exporter-otlp/tests/__init__.py diff --git a/ext/opentelemetry-ext-otlp/tests/test_otlp_trace_exporter.py b/exporter/opentelemetry-exporter-otlp/tests/test_otlp_trace_exporter.py similarity index 97% rename from ext/opentelemetry-ext-otlp/tests/test_otlp_trace_exporter.py rename to exporter/opentelemetry-exporter-otlp/tests/test_otlp_trace_exporter.py index 3e7affb2213..c7e26508b25 100644 --- a/ext/opentelemetry-ext-otlp/tests/test_otlp_trace_exporter.py +++ b/exporter/opentelemetry-exporter-otlp/tests/test_otlp_trace_exporter.py @@ -21,7 +21,7 @@ from google.rpc.error_details_pb2 import RetryInfo from grpc import StatusCode, server -from opentelemetry.ext.otlp.trace_exporter import OTLPSpanExporter +from opentelemetry.exporter.otlp.trace_exporter import OTLPSpanExporter from opentelemetry.proto.collector.trace.v1.trace_service_pb2 import ( ExportTraceServiceRequest, ExportTraceServiceResponse, @@ -142,8 +142,8 @@ def setUp(self): def tearDown(self): self.server.stop(None) - @patch("opentelemetry.ext.otlp.trace_exporter.expo") - @patch("opentelemetry.ext.otlp.trace_exporter.sleep") + @patch("opentelemetry.exporter.otlp.trace_exporter.expo") + @patch("opentelemetry.exporter.otlp.trace_exporter.sleep") def test_unavailable(self, mock_sleep, mock_expo): mock_expo.configure_mock(**{"return_value": [1]}) @@ -156,8 +156,8 @@ def test_unavailable(self, mock_sleep, mock_expo): ) mock_sleep.assert_called_with(1) - @patch("opentelemetry.ext.otlp.trace_exporter.expo") - @patch("opentelemetry.ext.otlp.trace_exporter.sleep") + @patch("opentelemetry.exporter.otlp.trace_exporter.expo") + @patch("opentelemetry.exporter.otlp.trace_exporter.sleep") def test_unavailable_delay(self, mock_sleep, mock_expo): mock_expo.configure_mock(**{"return_value": [1]}) diff --git a/exporter/opentelemetry-exporter-prometheus/CHANGELOG.md b/exporter/opentelemetry-exporter-prometheus/CHANGELOG.md new file mode 100644 index 00000000000..5c978d394d4 --- /dev/null +++ b/exporter/opentelemetry-exporter-prometheus/CHANGELOG.md @@ -0,0 +1,12 @@ +# Changelog + +## Unreleased + +- Change package name to opentelemetry-exporter-prometheus + ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953)) + +## 0.4a0 + +Released 2020-02-21 + +- Initial release diff --git a/ext/opentelemetry-ext-prometheus/LICENSE b/exporter/opentelemetry-exporter-prometheus/LICENSE similarity index 100% rename from ext/opentelemetry-ext-prometheus/LICENSE rename to exporter/opentelemetry-exporter-prometheus/LICENSE diff --git a/ext/opentelemetry-ext-prometheus/MANIFEST.in b/exporter/opentelemetry-exporter-prometheus/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-prometheus/MANIFEST.in rename to exporter/opentelemetry-exporter-prometheus/MANIFEST.in diff --git a/ext/opentelemetry-ext-prometheus/README.rst b/exporter/opentelemetry-exporter-prometheus/README.rst similarity index 58% rename from ext/opentelemetry-ext-prometheus/README.rst rename to exporter/opentelemetry-exporter-prometheus/README.rst index 5a85f03582a..a3eb9200005 100644 --- a/ext/opentelemetry-ext-prometheus/README.rst +++ b/exporter/opentelemetry-exporter-prometheus/README.rst @@ -3,8 +3,8 @@ OpenTelemetry Prometheus Exporter |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-prometheus.svg - :target: https://pypi.org/project/opentelemetry-ext-prometheus/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-exporter-prometheus.svg + :target: https://pypi.org/project/opentelemetry-exporter-prometheus/ This library allows to export metrics data to `Prometheus `_. @@ -13,11 +13,11 @@ Installation :: - pip install opentelemetry-ext-prometheus + pip install opentelemetry-exporter-prometheus References ---------- -* `OpenTelemetry Prometheus Exporter `_ +* `OpenTelemetry Prometheus Exporter `_ * `Prometheus `_ * `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-prometheus/setup.cfg b/exporter/opentelemetry-exporter-prometheus/setup.cfg similarity index 94% rename from ext/opentelemetry-ext-prometheus/setup.cfg rename to exporter/opentelemetry-exporter-prometheus/setup.cfg index 3571f93c540..94359e9641c 100644 --- a/ext/opentelemetry-ext-prometheus/setup.cfg +++ b/exporter/opentelemetry-exporter-prometheus/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-prometheus +name = opentelemetry-exporter-prometheus description = Prometheus Metric Exporter 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/tree/master/ext/opentelemetry-ext-prometheus +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/exporter/opentelemetry-exporter-prometheus platforms = any license = Apache-2.0 classifiers = diff --git a/exporter/opentelemetry-exporter-prometheus/setup.py b/exporter/opentelemetry-exporter-prometheus/setup.py new file mode 100644 index 00000000000..86067a2bd56 --- /dev/null +++ b/exporter/opentelemetry-exporter-prometheus/setup.py @@ -0,0 +1,26 @@ +# Copyright The 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", "exporter", "prometheus", "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-prometheus/src/opentelemetry/ext/prometheus/__init__.py b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py similarity index 98% rename from ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/__init__.py rename to exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py index da22042dcc5..e03c23a99e1 100644 --- a/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/__init__.py +++ b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py @@ -27,7 +27,7 @@ .. code:: python from opentelemetry import metrics - from opentelemetry.ext.prometheus import PrometheusMetricsExporter + from opentelemetry.exporter.prometheus import PrometheusMetricsExporter from opentelemetry.sdk.metrics import Counter, Meter from prometheus_client import start_http_server diff --git a/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/version.py similarity index 100% rename from ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py rename to exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/version.py diff --git a/ext/opentelemetry-ext-prometheus/tests/__init__.py b/exporter/opentelemetry-exporter-prometheus/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-prometheus/tests/__init__.py rename to exporter/opentelemetry-exporter-prometheus/tests/__init__.py diff --git a/ext/opentelemetry-ext-prometheus/tests/test_prometheus_exporter.py b/exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py similarity index 97% rename from ext/opentelemetry-ext-prometheus/tests/test_prometheus_exporter.py rename to exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py index 2ba6b701215..d624086ce3c 100644 --- a/ext/opentelemetry-ext-prometheus/tests/test_prometheus_exporter.py +++ b/exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py @@ -17,7 +17,7 @@ from prometheus_client.core import CounterMetricFamily -from opentelemetry.ext.prometheus import ( +from opentelemetry.exporter.prometheus import ( CustomCollector, PrometheusMetricsExporter, ) @@ -122,7 +122,7 @@ def test_invalid_metric(self): collector = CustomCollector("testprefix") collector.add_metrics_data([record]) collector.collect() - self.assertLogs("opentelemetry.ext.prometheus", level="WARNING") + self.assertLogs("opentelemetry.exporter.prometheus", level="WARNING") def test_sanitize(self): collector = CustomCollector("testprefix") diff --git a/ext/opentelemetry-ext-zipkin/CHANGELOG.md b/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md similarity index 73% rename from ext/opentelemetry-ext-zipkin/CHANGELOG.md rename to exporter/opentelemetry-exporter-zipkin/CHANGELOG.md index efad477d48a..2218d44c20b 100644 --- a/ext/opentelemetry-ext-zipkin/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-exporter-zipkin + ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953)) + ## 0.8b0 Released 2020-05-27 diff --git a/ext/opentelemetry-ext-zipkin/LICENSE b/exporter/opentelemetry-exporter-zipkin/LICENSE similarity index 100% rename from ext/opentelemetry-ext-zipkin/LICENSE rename to exporter/opentelemetry-exporter-zipkin/LICENSE diff --git a/ext/opentelemetry-ext-zipkin/MANIFEST.in b/exporter/opentelemetry-exporter-zipkin/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-zipkin/MANIFEST.in rename to exporter/opentelemetry-exporter-zipkin/MANIFEST.in diff --git a/ext/opentelemetry-ext-zipkin/README.rst b/exporter/opentelemetry-exporter-zipkin/README.rst similarity index 59% rename from ext/opentelemetry-ext-zipkin/README.rst rename to exporter/opentelemetry-exporter-zipkin/README.rst index c746051992e..a23df5eeecc 100644 --- a/ext/opentelemetry-ext-zipkin/README.rst +++ b/exporter/opentelemetry-exporter-zipkin/README.rst @@ -3,8 +3,8 @@ OpenTelemetry Zipkin Exporter |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-zipkin.svg - :target: https://pypi.org/project/opentelemetry-ext-zipkin/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-exporter-zipkin.svg + :target: https://pypi.org/project/opentelemetry-exporter-zipkin/ This library allows to export tracing data to `Zipkin `_. @@ -13,12 +13,12 @@ Installation :: - pip install opentelemetry-ext-zipkin + pip install opentelemetry-exporter-zipkin References ---------- -* `OpenTelemetry Zipkin Exporter `_ +* `OpenTelemetry Zipkin Exporter `_ * `Zipkin `_ * `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-zipkin/setup.cfg b/exporter/opentelemetry-exporter-zipkin/setup.cfg similarity index 95% rename from ext/opentelemetry-ext-zipkin/setup.cfg rename to exporter/opentelemetry-exporter-zipkin/setup.cfg index 7674cab5365..f1246813e38 100644 --- a/ext/opentelemetry-ext-zipkin/setup.cfg +++ b/exporter/opentelemetry-exporter-zipkin/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-zipkin +name = opentelemetry-exporter-zipkin description = Zipkin Span Exporter 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/tree/master/ext/opentelemetry-ext-zipkin +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-exporter-zipkin platforms = any license = Apache-2.0 classifiers = diff --git a/ext/opentelemetry-ext-prometheus/setup.py b/exporter/opentelemetry-exporter-zipkin/setup.py similarity index 91% rename from ext/opentelemetry-ext-prometheus/setup.py rename to exporter/opentelemetry-exporter-zipkin/setup.py index 0276cd66554..9822805d9dc 100644 --- a/ext/opentelemetry-ext-prometheus/setup.py +++ b/exporter/opentelemetry-exporter-zipkin/setup.py @@ -17,7 +17,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "prometheus", "version.py" + BASE_DIR, "src", "opentelemetry", "exporter", "zipkin", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/__init__.py b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py similarity index 99% rename from ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/__init__.py rename to exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py index 8a487290ce1..10bd6e93e97 100644 --- a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/__init__.py +++ b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py @@ -28,7 +28,7 @@ .. code:: python from opentelemetry import trace - from opentelemetry.ext import zipkin + from opentelemetry.exporter import zipkin from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchExportSpanProcessor diff --git a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/version.py similarity index 100% rename from ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py rename to exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/version.py diff --git a/ext/opentelemetry-ext-zipkin/tests/__init__.py b/exporter/opentelemetry-exporter-zipkin/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-zipkin/tests/__init__.py rename to exporter/opentelemetry-exporter-zipkin/tests/__init__.py diff --git a/ext/opentelemetry-ext-zipkin/tests/test_zipkin_exporter.py b/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py similarity index 99% rename from ext/opentelemetry-ext-zipkin/tests/test_zipkin_exporter.py rename to exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py index 1f2d53d3048..9f6da2e240f 100644 --- a/ext/opentelemetry-ext-zipkin/tests/test_zipkin_exporter.py +++ b/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py @@ -17,7 +17,7 @@ from unittest.mock import MagicMock, patch from opentelemetry import trace as trace_api -from opentelemetry.ext.zipkin import ZipkinSpanExporter +from opentelemetry.exporter.zipkin import ZipkinSpanExporter from opentelemetry.sdk import trace from opentelemetry.sdk.trace import Resource from opentelemetry.sdk.trace.export import SpanExportResult diff --git a/ext/opentelemetry-ext-docker-tests/tests/opencensus/test_opencensusexporter_functional.py b/ext/opentelemetry-ext-docker-tests/tests/opencensus/test_opencensusexporter_functional.py index af0f049bb02..c7948917834 100644 --- a/ext/opentelemetry-ext-docker-tests/tests/opencensus/test_opencensusexporter_functional.py +++ b/ext/opentelemetry-ext-docker-tests/tests/opencensus/test_opencensusexporter_functional.py @@ -14,7 +14,7 @@ from opentelemetry import trace from opentelemetry.context import attach, detach, set_value -from opentelemetry.ext.opencensusexporter.trace_exporter import ( +from opentelemetry.exporter.opencensus.trace_exporter import ( OpenCensusSpanExporter, ) from opentelemetry.sdk.trace import TracerProvider diff --git a/ext/opentelemetry-ext-opencensusexporter/setup.py b/ext/opentelemetry-ext-opencensusexporter/setup.py deleted file mode 100644 index dfb8fd82bff..00000000000 --- a/ext/opentelemetry-ext-opencensusexporter/setup.py +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright The 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", "opencensusexporter", "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-prometheus/CHANGELOG.md b/ext/opentelemetry-ext-prometheus/CHANGELOG.md deleted file mode 100644 index d5a548aa13d..00000000000 --- a/ext/opentelemetry-ext-prometheus/CHANGELOG.md +++ /dev/null @@ -1,9 +0,0 @@ -# Changelog - -## Unreleased - -## 0.4a0 - -Released 2020-02-21 - -- Initial release diff --git a/ext/opentelemetry-ext-zipkin/setup.py b/ext/opentelemetry-ext-zipkin/setup.py deleted file mode 100644 index a01df70c9d0..00000000000 --- a/ext/opentelemetry-ext-zipkin/setup.py +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright The 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", "zipkin", "version.py" -) -PACKAGE_INFO = {} -with open(VERSION_FILENAME) as f: - exec(f.read(), PACKAGE_INFO) - -setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/pyproject.toml b/pyproject.toml index 5911dc4e9f5..db4df73b69e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ exclude = ''' ( /( # generated files docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/gen| - ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen| + exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen| opentelemetry-proto/src/opentelemetry/proto/collector| opentelemetry-proto/src/opentelemetry/proto/common| opentelemetry-proto/src/opentelemetry/proto/metrics| diff --git a/scripts/build.sh b/scripts/build.sh index 7a27105d76e..0d481b8165d 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -16,7 +16,7 @@ DISTDIR=dist mkdir -p $DISTDIR rm -rf $DISTDIR/* - for d in opentelemetry-api/ opentelemetry-sdk/ opentelemetry-instrumentation/ opentelemetry-proto/ ext/*/ ; do + for d in opentelemetry-api/ opentelemetry-sdk/ opentelemetry-instrumentation/ opentelemetry-proto/ exporter/*/ ext/*/ ; do ( echo "building $d" cd "$d" diff --git a/scripts/coverage.sh b/scripts/coverage.sh index 0b45fbf643b..5cf393e7e66 100755 --- a/scripts/coverage.sh +++ b/scripts/coverage.sh @@ -31,13 +31,13 @@ coverage erase cov opentelemetry-api cov opentelemetry-sdk -cov ext/opentelemetry-ext-datadog +cov exporter/opentelemetry-exporter-datadog cov ext/opentelemetry-ext-flask cov ext/opentelemetry-ext-requests -cov ext/opentelemetry-ext-jaeger +cov exporter/opentelemetry-exporter-jaeger cov ext/opentelemetry-ext-opentracing-shim cov ext/opentelemetry-ext-wsgi -cov ext/opentelemetry-ext-zipkin +cov exporter/opentelemetry-exporter-zipkin cov docs/examples/opentelemetry-example-app # aiohttp is only supported on Python 3.5+. diff --git a/tox.ini b/tox.ini index 07a0bf42bdf..a018ec7a896 100644 --- a/tox.ini +++ b/tox.ini @@ -78,26 +78,26 @@ envlist = py3{4,5,6,7,8}-test-instrumentation-jinja2 pypy3-test-instrumentation-jinja2 - ; opentelemetry-ext-jaeger + ; opentelemetry-exporter-jaeger py3{4,5,6,7,8}-test-exporter-jaeger pypy3-test-exporter-jaeger - ; opentelemetry-ext-datadog + ; opentelemetry-exporter-datadog py3{5,6,7,8}-test-exporter-datadog ; opentelemetry-ext-mysql py3{4,5,6,7,8}-test-instrumentation-mysql pypy3-test-instrumentation-mysql - ; opentelemetry-ext-opencensusexporter - py3{4,5,6,7,8}-test-exporter-opencensusexporter - ; ext-opencensusexporter intentionally excluded from pypy3 + ; opentelemetry-exporter-opencensus + py3{4,5,6,7,8}-test-exporter-opencensus + ; exporter-opencensus intentionally excluded from pypy3 - ; opentelemetry-ext-otlp + ; opentelemetry-exporter-otlp py3{5,6,7,8}-test-exporter-otlp - ; ext-otlp intentionally excluded from pypy3 + ; exporter-otlp intentionally excluded from pypy3 - ; opentelemetry-ext-prometheus + ; opentelemetry-exporter-prometheus py3{4,5,6,7,8}-test-exporter-prometheus pypy3-test-exporter-prometheus @@ -137,7 +137,7 @@ envlist = py3{4,5,6,7,8}-test-instrumentation-wsgi pypy3-test-instrumentation-wsgi - ; opentelemetry-ext-zipkin + ; opentelemetry-exporter-zipkin py3{4,5,6,7,8}-test-exporter-zipkin pypy3-test-exporter-zipkin @@ -226,12 +226,12 @@ changedir = test-instrumentation-system-metrics: ext/opentelemetry-ext-system-metrics/tests test-instrumentation-wsgi: ext/opentelemetry-ext-wsgi/tests - test-exporter-jaeger: ext/opentelemetry-ext-jaeger/tests - test-exporter-datadog: ext/opentelemetry-ext-datadog/tests - test-exporter-opencensusexporter: ext/opentelemetry-ext-opencensusexporter/tests - test-exporter-otlp: ext/opentelemetry-ext-otlp/tests - test-exporter-prometheus: ext/opentelemetry-ext-prometheus/tests - test-exporter-zipkin: ext/opentelemetry-ext-zipkin/tests + test-exporter-jaeger: exporter/opentelemetry-exporter-jaeger/tests + test-exporter-datadog: exporter/opentelemetry-exporter-datadog/tests + test-exporter-opencensus: exporter/opentelemetry-exporter-opencensus/tests + test-exporter-otlp: exporter/opentelemetry-exporter-otlp/tests + test-exporter-prometheus: exporter/opentelemetry-exporter-prometheus/tests + test-exporter-zipkin: exporter/opentelemetry-exporter-zipkin/tests commands_pre = ; Install without -e to test the actual installation @@ -271,12 +271,12 @@ commands_pre = mysql: pip install {toxinidir}/ext/opentelemetry-ext-dbapi {toxinidir}/ext/opentelemetry-ext-mysql[test] - opencensusexporter: pip install {toxinidir}/ext/opentelemetry-ext-opencensusexporter + opencensus: pip install {toxinidir}/exporter/opentelemetry-exporter-opencensus otlp: pip install {toxinidir}/opentelemetry-proto - otlp: pip install {toxinidir}/ext/opentelemetry-ext-otlp + otlp: pip install {toxinidir}/exporter/opentelemetry-exporter-otlp - prometheus: pip install {toxinidir}/ext/opentelemetry-ext-prometheus + prometheus: pip install {toxinidir}/exporter/opentelemetry-exporter-prometheus pymemcache: pip install {toxinidir}/ext/opentelemetry-ext-pymemcache[test] @@ -302,14 +302,14 @@ commands_pre = aiopg: pip install {toxinidir}/ext/opentelemetry-ext-dbapi pip install {toxinidir}/ext/opentelemetry-instrumentation-aiopg[test] - jaeger: pip install {toxinidir}/ext/opentelemetry-ext-jaeger + jaeger: pip install {toxinidir}/exporter/opentelemetry-exporter-jaeger opentracing-shim: pip install {toxinidir}/opentelemetry-sdk opentracing-shim: pip install {toxinidir}/ext/opentelemetry-ext-opentracing-shim - datadog: pip install {toxinidir}/opentelemetry-sdk {toxinidir}/ext/opentelemetry-ext-datadog + datadog: pip install {toxinidir}/opentelemetry-sdk {toxinidir}/exporter/opentelemetry-exporter-datadog - zipkin: pip install {toxinidir}/ext/opentelemetry-ext-zipkin + zipkin: pip install {toxinidir}/exporter/opentelemetry-exporter-zipkin sqlalchemy: pip install {toxinidir}/ext/opentelemetry-ext-sqlalchemy @@ -423,7 +423,7 @@ commands_pre = -e {toxinidir}/ext/opentelemetry-instrumentation-aiopg \ -e {toxinidir}/ext/opentelemetry-ext-redis \ -e {toxinidir}/ext/opentelemetry-ext-system-metrics \ - -e {toxinidir}/ext/opentelemetry-ext-opencensusexporter + -e {toxinidir}/exporter/opentelemetry-exporter-opencensus docker-compose up -d python check_availability.py commands = From fc58032694fd96b17df18f08532f63e9f60f0e3a Mon Sep 17 00:00:00 2001 From: Connor Adams Date: Wed, 29 Jul 2020 16:58:51 -0400 Subject: [PATCH 13/15] automatic metrics for gRPC client interceptor (#917) --- ext/opentelemetry-ext-grpc/CHANGELOG.md | 2 + ext/opentelemetry-ext-grpc/setup.cfg | 1 + .../src/opentelemetry/ext/grpc/__init__.py | 53 +++-- .../src/opentelemetry/ext/grpc/_client.py | 185 ++++++++++++------ .../src/opentelemetry/ext/grpc/_utilities.py | 79 ++++++++ .../tests/test_client_interceptor.py | 175 +++++++++++++++-- 6 files changed, 415 insertions(+), 80 deletions(-) diff --git a/ext/opentelemetry-ext-grpc/CHANGELOG.md b/ext/opentelemetry-ext-grpc/CHANGELOG.md index fff83ab5a7b..5f272a80f8a 100644 --- a/ext/opentelemetry-ext-grpc/CHANGELOG.md +++ b/ext/opentelemetry-ext-grpc/CHANGELOG.md @@ -11,6 +11,8 @@ Released 2020-07-28 - Add gRPC client and server instrumentors ([788](https://github.com/open-telemetry/opentelemetry-python/pull/788)) +- Add metric recording (bytes in/out, errors, latency) to gRPC client + ## 0.8b0 Released 2020-05-27 diff --git a/ext/opentelemetry-ext-grpc/setup.cfg b/ext/opentelemetry-ext-grpc/setup.cfg index 0a4e4e5b679..c7dac4c3561 100644 --- a/ext/opentelemetry-ext-grpc/setup.cfg +++ b/ext/opentelemetry-ext-grpc/setup.cfg @@ -41,6 +41,7 @@ package_dir= packages=find_namespace: install_requires = opentelemetry-api == 0.12.dev0 + opentelemetry-sdk == 0.12.dev0 grpcio ~= 1.27 [options.extras_require] diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py index 368ae55f2e6..1a665662818 100644 --- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py +++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py @@ -33,6 +33,10 @@ SimpleExportSpanProcessor, ) + from opentelemetry import metrics + from opentelemetry.sdk.metrics import MeterProvider + from opentelemetry.sdk.metrics.export import ConsoleMetricsExporter + try: from .gen import helloworld_pb2, helloworld_pb2_grpc except ImportError: @@ -42,7 +46,12 @@ trace.get_tracer_provider().add_span_processor( SimpleExportSpanProcessor(ConsoleSpanExporter()) ) - instrumentor = GrpcInstrumentorClient() + + # Set meter provider to opentelemetry-sdk's MeterProvider + metrics.set_meter_provider(MeterProvider()) + + # Optional - export GRPC specific metrics (latency, bytes in/out, errors) by passing an exporter + instrumentor = GrpcInstrumentorClient(exporter=ConsoleMetricsExporter(), interval=10) instrumentor.instrument() def run(): @@ -109,6 +118,7 @@ def serve(): serve() """ from contextlib import contextmanager +from functools import partial import grpc from wrapt import wrap_function_wrapper as _wrap @@ -139,11 +149,21 @@ def wrapper_fn(self, original_func, instance, args, kwargs): class GrpcInstrumentorClient(BaseInstrumentor): def _instrument(self, **kwargs): + exporter = kwargs.get("exporter", None) + interval = kwargs.get("interval", 30) if kwargs.get("channel_type") == "secure": - _wrap("grpc", "secure_channel", self.wrapper_fn) + _wrap( + "grpc", + "secure_channel", + partial(self.wrapper_fn, exporter, interval), + ) else: - _wrap("grpc", "insecure_channel", self.wrapper_fn) + _wrap( + "grpc", + "insecure_channel", + partial(self.wrapper_fn, exporter, interval), + ) def _uninstrument(self, **kwargs): if kwargs.get("channel_type") == "secure": @@ -152,17 +172,28 @@ def _uninstrument(self, **kwargs): else: unwrap(grpc, "insecure_channel") - @contextmanager - def wrapper_fn(self, original_func, instance, args, kwargs): - with original_func(*args, **kwargs) as channel: - yield intercept_channel(channel, client_interceptor()) - - -def client_interceptor(tracer_provider=None): + def wrapper_fn( + self, exporter, interval, original_func, instance, args, kwargs + ): + channel = original_func(*args, **kwargs) + tracer_provider = kwargs.get("tracer_provider") + return intercept_channel( + channel, + client_interceptor( + tracer_provider=tracer_provider, + exporter=exporter, + interval=interval, + ), + ) + + +def client_interceptor(tracer_provider=None, exporter=None, interval=30): """Create a gRPC client channel interceptor. Args: tracer: The tracer to use to create client-side spans. + exporter: The exporter that will receive client metrics + interval: Time between every export call Returns: An invocation-side interceptor object. @@ -171,7 +202,7 @@ def client_interceptor(tracer_provider=None): tracer = trace.get_tracer(__name__, __version__, tracer_provider) - return _client.OpenTelemetryClientInterceptor(tracer) + return _client.OpenTelemetryClientInterceptor(tracer, exporter, interval) def server_interceptor(tracer_provider=None): diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py index 373d8f345cf..028804f599c 100644 --- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py +++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py @@ -24,11 +24,12 @@ import grpc -from opentelemetry import propagators, trace +from opentelemetry import metrics, propagators, trace +from opentelemetry.sdk.metrics.export.controller import PushController from opentelemetry.trace.status import Status, StatusCanonicalCode from . import grpcext -from ._utilities import RpcInfo +from ._utilities import RpcInfo, TimedMetricRecorder class _GuardedSpan: @@ -63,7 +64,7 @@ def append_metadata( propagators.inject(append_metadata, metadata) -def _make_future_done_callback(span, rpc_info): +def _make_future_done_callback(span, rpc_info, client_info, metrics_recorder): def callback(response_future): with span: code = response_future.code() @@ -72,6 +73,10 @@ def callback(response_future): return response = response_future.result() rpc_info.response = response + if "ByteSize" in dir(response): + metrics_recorder.record_bytes_in( + response.ByteSize(), client_info.full_method + ) return callback @@ -79,21 +84,34 @@ def callback(response_future): class OpenTelemetryClientInterceptor( grpcext.UnaryClientInterceptor, grpcext.StreamClientInterceptor ): - def __init__(self, tracer): + def __init__(self, tracer, exporter, interval): self._tracer = tracer + self._meter = None + if exporter and interval: + self._meter = metrics.get_meter(__name__) + self.controller = PushController( + meter=self._meter, exporter=exporter, interval=interval + ) + self._metrics_recorder = TimedMetricRecorder(self._meter, "client") + def _start_span(self, method): return self._tracer.start_as_current_span( name=method, kind=trace.SpanKind.CLIENT ) # pylint:disable=no-self-use - def _trace_result(self, guarded_span, rpc_info, result): + def _trace_result(self, guarded_span, rpc_info, result, client_info): # If the RPC is called asynchronously, release the guard and add a # callback so that the span can be finished once the future is done. if isinstance(result, grpc.Future): result.add_done_callback( - _make_future_done_callback(guarded_span.release(), rpc_info) + _make_future_done_callback( + guarded_span.release(), + rpc_info, + client_info, + self._metrics_recorder, + ) ) return result response = result @@ -104,11 +122,24 @@ def _trace_result(self, guarded_span, rpc_info, result): if isinstance(result, tuple): response = result[0] rpc_info.response = response + + if "ByteSize" in dir(response): + self._metrics_recorder.record_bytes_in( + response.ByteSize(), client_info.full_method + ) return result def _start_guarded_span(self, *args, **kwargs): return _GuardedSpan(self._start_span(*args, **kwargs)) + def _bytes_out_iterator_wrapper(self, iterator, client_info): + for request in iterator: + if "ByteSize" in dir(request): + self._metrics_recorder.record_bytes_out( + request.ByteSize(), client_info.full_method + ) + yield request + def intercept_unary(self, request, metadata, client_info, invoker): if not metadata: mutable_metadata = OrderedDict() @@ -116,25 +147,37 @@ def intercept_unary(self, request, metadata, client_info, invoker): mutable_metadata = OrderedDict(metadata) with self._start_guarded_span(client_info.full_method) as guarded_span: - _inject_span_context(mutable_metadata) - metadata = tuple(mutable_metadata.items()) - - rpc_info = RpcInfo( - full_method=client_info.full_method, - metadata=metadata, - timeout=client_info.timeout, - request=request, - ) - - try: - result = invoker(request, metadata) - except grpc.RpcError as exc: - guarded_span.generated_span.set_status( - Status(StatusCanonicalCode(exc.code().value[0])) + with self._metrics_recorder.record_latency( + client_info.full_method + ): + _inject_span_context(mutable_metadata) + metadata = tuple(mutable_metadata.items()) + + # If protobuf is used, we can record the bytes in/out. Otherwise, we have no way + # to get the size of the request/response properly, so don't record anything + if "ByteSize" in dir(request): + self._metrics_recorder.record_bytes_out( + request.ByteSize(), client_info.full_method + ) + + rpc_info = RpcInfo( + full_method=client_info.full_method, + metadata=metadata, + timeout=client_info.timeout, + request=request, ) - raise - return self._trace_result(guarded_span, rpc_info, result) + try: + result = invoker(request, metadata) + except grpc.RpcError as exc: + guarded_span.generated_span.set_status( + Status(StatusCanonicalCode(exc.code().value[0])) + ) + raise + + return self._trace_result( + guarded_span, rpc_info, result, client_info + ) # For RPCs that stream responses, the result can be a generator. To record # the span across the generated responses and detect any errors, we wrap @@ -148,25 +191,44 @@ def _intercept_server_stream( mutable_metadata = OrderedDict(metadata) with self._start_span(client_info.full_method) as span: - _inject_span_context(mutable_metadata) - metadata = tuple(mutable_metadata.items()) - rpc_info = RpcInfo( - full_method=client_info.full_method, - metadata=metadata, - timeout=client_info.timeout, - ) - if client_info.is_client_stream: - rpc_info.request = request_or_iterator - - try: - result = invoker(request_or_iterator, metadata) - for response in result: - yield response - except grpc.RpcError as exc: - span.set_status( - Status(StatusCanonicalCode(exc.code().value[0])) + with self._metrics_recorder.record_latency( + client_info.full_method + ): + _inject_span_context(mutable_metadata) + metadata = tuple(mutable_metadata.items()) + rpc_info = RpcInfo( + full_method=client_info.full_method, + metadata=metadata, + timeout=client_info.timeout, ) - raise + + if client_info.is_client_stream: + rpc_info.request = request_or_iterator + request_or_iterator = self._bytes_out_iterator_wrapper( + request_or_iterator, client_info + ) + else: + if "ByteSize" in dir(request_or_iterator): + self._metrics_recorder.record_bytes_out( + request_or_iterator.ByteSize(), + client_info.full_method, + ) + + try: + result = invoker(request_or_iterator, metadata) + + # Rewrap the result stream into a generator, and record the bytes received + for response in result: + if "ByteSize" in dir(response): + self._metrics_recorder.record_bytes_in( + response.ByteSize(), client_info.full_method + ) + yield response + except grpc.RpcError as exc: + span.set_status( + Status(StatusCanonicalCode(exc.code().value[0])) + ) + raise def intercept_stream( self, request_or_iterator, metadata, client_info, invoker @@ -182,21 +244,32 @@ def intercept_stream( mutable_metadata = OrderedDict(metadata) with self._start_guarded_span(client_info.full_method) as guarded_span: - _inject_span_context(mutable_metadata) - metadata = tuple(mutable_metadata.items()) - rpc_info = RpcInfo( - full_method=client_info.full_method, - metadata=metadata, - timeout=client_info.timeout, - request=request_or_iterator, - ) + with self._metrics_recorder.record_latency( + client_info.full_method + ): + _inject_span_context(mutable_metadata) + metadata = tuple(mutable_metadata.items()) + rpc_info = RpcInfo( + full_method=client_info.full_method, + metadata=metadata, + timeout=client_info.timeout, + request=request_or_iterator, + ) + + rpc_info.request = request_or_iterator - try: - result = invoker(request_or_iterator, metadata) - except grpc.RpcError as exc: - guarded_span.generated_span.set_status( - Status(StatusCanonicalCode(exc.code().value[0])) + request_or_iterator = self._bytes_out_iterator_wrapper( + request_or_iterator, client_info ) - raise - return self._trace_result(guarded_span, rpc_info, result) + try: + result = invoker(request_or_iterator, metadata) + except grpc.RpcError as exc: + guarded_span.generated_span.set_status( + Status(StatusCanonicalCode(exc.code().value[0])) + ) + raise + + return self._trace_result( + guarded_span, rpc_info, result, client_info + ) diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_utilities.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_utilities.py index b6ff7d311a4..1dfe31ec995 100644 --- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_utilities.py +++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_utilities.py @@ -14,6 +14,13 @@ """Internal utilities.""" +from contextlib import contextmanager +from time import time + +import grpc + +from opentelemetry.sdk.metrics import Counter, ValueRecorder + class RpcInfo: def __init__( @@ -31,3 +38,75 @@ def __init__( self.request = request self.response = response self.error = error + + +class TimedMetricRecorder: + def __init__(self, meter, span_kind): + self._meter = meter + service_name = "grpcio" + self._span_kind = span_kind + base_attributes = ["method"] + + if self._meter: + self._duration = self._meter.create_metric( + name="{}/{}/duration".format(service_name, span_kind), + description="Duration of grpc requests to the server", + unit="ms", + value_type=float, + metric_type=ValueRecorder, + label_keys=base_attributes + ["error", "status_code"], + ) + self._error_count = self._meter.create_metric( + name="{}/{}/errors".format(service_name, span_kind), + description="Number of errors that were returned from the server", + unit="1", + value_type=int, + metric_type=Counter, + label_keys=base_attributes + ["status_code"], + ) + self._bytes_in = self._meter.create_metric( + name="{}/{}/bytes_in".format(service_name, span_kind), + description="Number of bytes received from the server", + unit="by", + value_type=int, + metric_type=Counter, + label_keys=base_attributes, + ) + self._bytes_out = self._meter.create_metric( + name="{}/{}/bytes_out".format(service_name, span_kind), + description="Number of bytes sent out through gRPC", + unit="by", + value_type=int, + metric_type=Counter, + label_keys=base_attributes, + ) + + def record_bytes_in(self, bytes_in, method): + if self._meter: + labels = {"method": method} + self._bytes_in.add(bytes_in, labels) + + def record_bytes_out(self, bytes_out, method): + if self._meter: + labels = {"method": method} + self._bytes_out.add(bytes_out, labels) + + @contextmanager + def record_latency(self, method): + start_time = time() + labels = {"method": method, "status_code": grpc.StatusCode.OK} + try: + yield labels + except grpc.RpcError as exc: + if self._meter: + # pylint: disable=no-member + labels["status_code"] = exc.code() + self._error_count.add(1, labels) + labels["error"] = True + raise + finally: + if self._meter: + if "error" not in labels: + labels["error"] = False + elapsed_time = (time() - start_time) * 1000 + self._duration.record(elapsed_time, labels) diff --git a/ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py b/ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py index 47dc9fa0bb6..a668f05ca79 100644 --- a/ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py +++ b/ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py @@ -15,10 +15,12 @@ import grpc import opentelemetry.ext.grpc -from opentelemetry import metrics, trace -from opentelemetry.ext.grpc import client_interceptor -from opentelemetry.ext.grpc.grpcext import intercept_channel -from opentelemetry.sdk.metrics.export.controller import PushController +from opentelemetry import trace +from opentelemetry.ext.grpc import GrpcInstrumentorClient +from opentelemetry.sdk.metrics.export.aggregate import ( + MinMaxSumCountAggregator, + SumAggregator, +) from opentelemetry.test.test_base import TestBase from tests.protobuf import test_server_pb2_grpc @@ -34,24 +36,81 @@ class TestClientProto(TestBase): def setUp(self): super().setUp() + GrpcInstrumentorClient().instrument( + exporter=self.memory_metrics_exporter + ) self.server = create_test_server(25565) self.server.start() - meter = metrics.get_meter(__name__) - interceptor = client_interceptor() - self.channel = intercept_channel( - grpc.insecure_channel("localhost:25565"), interceptor - ) + self.channel = grpc.insecure_channel("localhost:25565") self._stub = test_server_pb2_grpc.GRPCTestServerStub(self.channel) - self._controller = PushController( - meter, self.memory_metrics_exporter, 30 - ) - def tearDown(self): super().tearDown() + GrpcInstrumentorClient().uninstrument() self.memory_metrics_exporter.clear() self.server.stop(None) + def _verify_success_records(self, num_bytes_out, num_bytes_in, method): + # pylint: disable=protected-access,no-member + self.channel._interceptor.controller.tick() + records = self.memory_metrics_exporter.get_exported_metrics() + self.assertEqual(len(records), 3) + + bytes_out = None + bytes_in = None + duration = None + + for record in records: + if record.instrument.name == "grpcio/client/duration": + duration = record + elif record.instrument.name == "grpcio/client/bytes_out": + bytes_out = record + elif record.instrument.name == "grpcio/client/bytes_in": + bytes_in = record + + self.assertIsNotNone(bytes_out) + self.assertEqual(bytes_out.instrument.name, "grpcio/client/bytes_out") + self.assertEqual(bytes_out.labels, (("method", method),)) + + self.assertIsNotNone(bytes_in) + self.assertEqual(bytes_in.instrument.name, "grpcio/client/bytes_in") + self.assertEqual(bytes_in.labels, (("method", method),)) + + self.assertIsNotNone(duration) + self.assertEqual(duration.instrument.name, "grpcio/client/duration") + self.assertEqual( + duration.labels, + ( + ("error", False), + ("method", method), + ("status_code", grpc.StatusCode.OK), + ), + ) + + self.assertEqual(type(bytes_out.aggregator), SumAggregator) + self.assertEqual(type(bytes_in.aggregator), SumAggregator) + self.assertEqual(type(duration.aggregator), MinMaxSumCountAggregator) + + self.assertEqual(bytes_out.aggregator.checkpoint, num_bytes_out) + self.assertEqual(bytes_in.aggregator.checkpoint, num_bytes_in) + + self.assertEqual(duration.aggregator.checkpoint.count, 1) + self.assertGreaterEqual(duration.aggregator.checkpoint.sum, 0) + + def test_unary_unary(self): + simple_method(self._stub) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + + self.assertEqual(span.name, "/GRPCTestServer/SimpleMethod") + self.assertIs(span.kind, trace.SpanKind.CLIENT) + + # Check version and name in span's instrumentation info + self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) + + self._verify_success_records(8, 8, "/GRPCTestServer/SimpleMethod") + def test_unary_stream(self): server_streaming_method(self._stub) spans = self.memory_exporter.get_finished_spans() @@ -64,6 +123,10 @@ def test_unary_stream(self): # Check version and name in span's instrumentation info self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) + self._verify_success_records( + 8, 40, "/GRPCTestServer/ServerStreamingMethod" + ) + def test_stream_unary(self): client_streaming_method(self._stub) spans = self.memory_exporter.get_finished_spans() @@ -76,6 +139,10 @@ def test_stream_unary(self): # Check version and name in span's instrumentation info self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) + self._verify_success_records( + 40, 8, "/GRPCTestServer/ClientStreamingMethod" + ) + def test_stream_stream(self): bidirectional_streaming_method(self._stub) spans = self.memory_exporter.get_finished_spans() @@ -90,10 +157,57 @@ def test_stream_stream(self): # Check version and name in span's instrumentation info self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) + self._verify_success_records( + 40, 40, "/GRPCTestServer/BidirectionalStreamingMethod" + ) + + def _verify_error_records(self, method): + # pylint: disable=protected-access,no-member + self.channel._interceptor.controller.tick() + records = self.memory_metrics_exporter.get_exported_metrics() + self.assertEqual(len(records), 3) + + bytes_out = None + errors = None + duration = None + + for record in records: + if record.instrument.name == "grpcio/client/duration": + duration = record + elif record.instrument.name == "grpcio/client/bytes_out": + bytes_out = record + elif record.instrument.name == "grpcio/client/errors": + errors = record + + self.assertIsNotNone(bytes_out) + self.assertIsNotNone(errors) + self.assertIsNotNone(duration) + + self.assertEqual(errors.instrument.name, "grpcio/client/errors") + self.assertEqual( + errors.labels, + ( + ("method", method), + ("status_code", grpc.StatusCode.INVALID_ARGUMENT), + ), + ) + self.assertEqual(errors.aggregator.checkpoint, 1) + + self.assertEqual( + duration.labels, + ( + ("error", True), + ("method", method), + ("status_code", grpc.StatusCode.INVALID_ARGUMENT), + ), + ) + def test_error_simple(self): with self.assertRaises(grpc.RpcError): simple_method(self._stub, error=True) + self._verify_error_records("/GRPCTestServer/SimpleMethod") + spans = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans), 1) span = spans[0] @@ -106,6 +220,7 @@ def test_error_stream_unary(self): with self.assertRaises(grpc.RpcError): client_streaming_method(self._stub, error=True) + self._verify_error_records("/GRPCTestServer/ClientStreamingMethod") spans = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans), 1) span = spans[0] @@ -118,6 +233,8 @@ def test_error_unary_stream(self): with self.assertRaises(grpc.RpcError): server_streaming_method(self._stub, error=True) + self._verify_error_records("/GRPCTestServer/ServerStreamingMethod") + spans = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans), 1) span = spans[0] @@ -130,6 +247,10 @@ def test_error_stream_stream(self): with self.assertRaises(grpc.RpcError): bidirectional_streaming_method(self._stub, error=True) + self._verify_error_records( + "/GRPCTestServer/BidirectionalStreamingMethod" + ) + spans = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans), 1) span = spans[0] @@ -137,3 +258,31 @@ def test_error_stream_stream(self): span.status.canonical_code.value, grpc.StatusCode.INVALID_ARGUMENT.value[0], ) + + +class TestClientNoMetrics(TestBase): + def setUp(self): + super().setUp() + GrpcInstrumentorClient().instrument() + self.server = create_test_server(25565) + self.server.start() + self.channel = grpc.insecure_channel("localhost:25565") + self._stub = test_server_pb2_grpc.GRPCTestServerStub(self.channel) + + def tearDown(self): + super().tearDown() + GrpcInstrumentorClient().uninstrument() + self.memory_metrics_exporter.clear() + self.server.stop(None) + + def test_unary_unary(self): + simple_method(self._stub) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + + self.assertEqual(span.name, "/GRPCTestServer/SimpleMethod") + self.assertIs(span.kind, trace.SpanKind.CLIENT) + + # Check version and name in span's instrumentation info + self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) From 8c4fca5c754bb98fcb0101e5865e5b7e70ecf659 Mon Sep 17 00:00:00 2001 From: Diego Hurtado Date: Thu, 30 Jul 2020 08:56:11 -0600 Subject: [PATCH 14/15] Update environment variable names (#904) --- docs/examples/django/README.rst | 2 +- ext/opentelemetry-ext-django/CHANGELOG.md | 2 + ext/opentelemetry-ext-django/README.rst | 4 +- .../tests/conftest.py | 2 +- .../CHANGELOG.md | 4 +- .../ext/elasticsearch/__init__.py | 5 +-- .../tests/test_elasticsearch.py | 2 +- ext/opentelemetry-ext-flask/CHANGELOG.md | 4 +- ext/opentelemetry-ext-flask/README.rst | 4 +- ext/opentelemetry-ext-pyramid/CHANGELOG.md | 6 +-- ext/opentelemetry-ext-pyramid/README.rst | 4 +- opentelemetry-api/CHANGELOG.md | 5 ++- .../opentelemetry/configuration/__init__.py | 37 ++++++++++--------- .../src/opentelemetry/context/__init__.py | 2 +- .../tests/configuration/test_configuration.py | 30 +++++++-------- opentelemetry-sdk/CHANGELOG.md | 5 ++- opentelemetry-sdk/tests/conftest.py | 6 +-- 17 files changed, 63 insertions(+), 61 deletions(-) diff --git a/docs/examples/django/README.rst b/docs/examples/django/README.rst index e8a043684f6..6f441dd333d 100644 --- a/docs/examples/django/README.rst +++ b/docs/examples/django/README.rst @@ -36,7 +36,7 @@ Execution of the Django app Set these environment variables first: -#. ``export OPENTELEMETRY_PYTHON_DJANGO_INSTRUMENT=True`` +#. ``export OTEL_PYTHON_DJANGO_INSTRUMENT=True`` #. ``export DJANGO_SETTINGS_MODULE=instrumentation_example.settings`` The way to achieve OpenTelemetry instrumentation for your Django app is to use diff --git a/ext/opentelemetry-ext-django/CHANGELOG.md b/ext/opentelemetry-ext-django/CHANGELOG.md index 6e3cc9c9827..0328ccaa20a 100644 --- a/ext/opentelemetry-ext-django/CHANGELOG.md +++ b/ext/opentelemetry-ext-django/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL` ([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904)) + ## Version 0.11b0 Released 2020-07-28 diff --git a/ext/opentelemetry-ext-django/README.rst b/ext/opentelemetry-ext-django/README.rst index 1759cb6602a..b7a822f1979 100644 --- a/ext/opentelemetry-ext-django/README.rst +++ b/ext/opentelemetry-ext-django/README.rst @@ -20,13 +20,13 @@ Configuration Exclude lists ************* -To exclude certain URLs from being tracked, set the environment variable ``OPENTELEMETRY_PYTHON_DJANGO_EXCLUDED_URLS`` with comma delimited regexes representing which URLs to exclude. +To exclude certain URLs from being tracked, set the environment variable ``OTEL_PYTHON_DJANGO_EXCLUDED_URLS`` with comma delimited regexes representing which URLs to exclude. For example, :: - export OPENTELEMETRY_PYTHON_DJANGO_EXCLUDED_URLS="client/.*/info,healthcheck" + export OTEL_PYTHON_DJANGO_EXCLUDED_URLS="client/.*/info,healthcheck" will exclude requests such as ``https://site/client/123/info`` and ``https://site/xyz/healthcheck``. diff --git a/ext/opentelemetry-ext-django/tests/conftest.py b/ext/opentelemetry-ext-django/tests/conftest.py index b2b39bc049a..8797bfc3060 100644 --- a/ext/opentelemetry-ext-django/tests/conftest.py +++ b/ext/opentelemetry-ext-django/tests/conftest.py @@ -16,4 +16,4 @@ def pytest_sessionstart(session): # pylint: disable=unused-argument - environ.setdefault("OPENTELEMETRY_PYTHON_DJANGO_INSTRUMENT", "True") + environ.setdefault("OTEL_PYTHON_DJANGO_INSTRUMENT", "True") diff --git a/ext/opentelemetry-ext-elasticsearch/CHANGELOG.md b/ext/opentelemetry-ext-elasticsearch/CHANGELOG.md index 7425aa5e1ec..ede33c6646e 100644 --- a/ext/opentelemetry-ext-elasticsearch/CHANGELOG.md +++ b/ext/opentelemetry-ext-elasticsearch/CHANGELOG.md @@ -2,8 +2,10 @@ ## Unreleased +- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL` ([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904)) + ## Version 0.10b0 Released 2020-06-23 -- Initial release \ No newline at end of file +- Initial release diff --git a/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/__init__.py b/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/__init__.py index 7c41ba3f0da..6746d1ac70a 100644 --- a/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/__init__.py +++ b/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/__init__.py @@ -40,7 +40,7 @@ --- Elasticsearch instrumentation prefixes operation names with the string "Elasticsearch". This -can be changed to a different string by either setting the `OPENTELEMETRY_PYTHON_ELASTICSEARCH_NAME_PREFIX` +can be changed to a different string by either setting the `OTEL_PYTHON_ELASTICSEARCH_NAME_PREFIX` environment variable or by passing the prefix as an argument to the instrumentor. For example, @@ -88,8 +88,7 @@ class ElasticsearchInstrumentor(BaseInstrumentor): def __init__(self, span_name_prefix=None): if not span_name_prefix: span_name_prefix = environ.get( - "OPENTELEMETRY_PYTHON_ELASTICSEARCH_NAME_PREFIX", - "Elasticsearch", + "OTEL_PYTHON_ELASTICSEARCH_NAME_PREFIX", "Elasticsearch", ) self._span_name_prefix = span_name_prefix.strip() super().__init__() diff --git a/ext/opentelemetry-ext-elasticsearch/tests/test_elasticsearch.py b/ext/opentelemetry-ext-elasticsearch/tests/test_elasticsearch.py index f6ca6bdae1f..3c4fe7f70f0 100644 --- a/ext/opentelemetry-ext-elasticsearch/tests/test_elasticsearch.py +++ b/ext/opentelemetry-ext-elasticsearch/tests/test_elasticsearch.py @@ -95,7 +95,7 @@ def test_prefix_arg(self, request_mock): def test_prefix_env(self, request_mock): prefix = "prefix-from-args" - env_var = "OPENTELEMETRY_PYTHON_ELASTICSEARCH_NAME_PREFIX" + env_var = "OTEL_PYTHON_ELASTICSEARCH_NAME_PREFIX" os.environ[env_var] = prefix ElasticsearchInstrumentor().uninstrument() ElasticsearchInstrumentor().instrument() diff --git a/ext/opentelemetry-ext-flask/CHANGELOG.md b/ext/opentelemetry-ext-flask/CHANGELOG.md index 3109c159023..334084c1494 100644 --- a/ext/opentelemetry-ext-flask/CHANGELOG.md +++ b/ext/opentelemetry-ext-flask/CHANGELOG.md @@ -2,9 +2,9 @@ ## Unreleased -## Version 0.11b0 +- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL` ([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904)) -Released 2020-07-28 +## Version 0.11b0 - Use one general exclude list instead of two ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/872)) diff --git a/ext/opentelemetry-ext-flask/README.rst b/ext/opentelemetry-ext-flask/README.rst index 395053972ef..a75a0cfbaad 100644 --- a/ext/opentelemetry-ext-flask/README.rst +++ b/ext/opentelemetry-ext-flask/README.rst @@ -21,13 +21,13 @@ Configuration Exclude lists ************* -To exclude certain URLs from being tracked, set the environment variable ``OPENTELEMETRY_PYTHON_FLASK_EXCLUDED_URLS`` with comma delimited regexes representing which URLs to exclude. +To exclude certain URLs from being tracked, set the environment variable ``OTEL_PYTHON_FLASK_EXCLUDED_URLS`` with comma delimited regexes representing which URLs to exclude. For example, :: - export OPENTELEMETRY_PYTHON_FLASK_EXCLUDED_URLS="client/.*/info,healthcheck" + export OTEL_PYTHON_FLASK_EXCLUDED_URLS="client/.*/info,healthcheck" will exclude requests such as ``https://site/client/123/info`` and ``https://site/xyz/healthcheck``. diff --git a/ext/opentelemetry-ext-pyramid/CHANGELOG.md b/ext/opentelemetry-ext-pyramid/CHANGELOG.md index f871a0aa5f8..2e20d5a0bdf 100644 --- a/ext/opentelemetry-ext-pyramid/CHANGELOG.md +++ b/ext/opentelemetry-ext-pyramid/CHANGELOG.md @@ -2,9 +2,9 @@ ## Unreleased -## Version 0.11b0 +- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL` ([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904)) -Released 2020-07-28 +## Version 0.11b0 - Use one general exclude list instead of two ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/872)) @@ -12,4 +12,4 @@ Released 2020-07-28 Released 2020-06-10 -- Initial release \ No newline at end of file +- Initial release diff --git a/ext/opentelemetry-ext-pyramid/README.rst b/ext/opentelemetry-ext-pyramid/README.rst index 319d6bff4ce..6ec38b83c90 100644 --- a/ext/opentelemetry-ext-pyramid/README.rst +++ b/ext/opentelemetry-ext-pyramid/README.rst @@ -15,13 +15,13 @@ Installation Exclude lists ************* -To exclude certain URLs from being tracked, set the environment variable ``OPENTELEMETRY_PYTHON_PYRAMID_EXCLUDED_URLS`` with comma delimited regexes representing which URLs to exclude. +To exclude certain URLs from being tracked, set the environment variable ``OTEL_PYTHON_PYRAMID_EXCLUDED_URLS`` with comma delimited regexes representing which URLs to exclude. For example, :: - export OPENTELEMETRY_PYTHON_PYRAMID_EXCLUDED_URLS="client/.*/info,healthcheck" + export OTEL_PYTHON_PYRAMID_EXCLUDED_URLS="client/.*/info,healthcheck" will exclude requests such as ``https://site/client/123/info`` and ``https://site/xyz/healthcheck``. diff --git a/opentelemetry-api/CHANGELOG.md b/opentelemetry-api/CHANGELOG.md index da976ed37e4..2226b5d0273 100644 --- a/opentelemetry-api/CHANGELOG.md +++ b/opentelemetry-api/CHANGELOG.md @@ -2,9 +2,10 @@ ## Unreleased -## Version 0.11b0 +- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL` + ([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904)) -Released 2020-07-28 +## Version 0.11b0 - Return INVALID_SPAN if no TracerProvider set for get_current_span ([#751](https://github.com/open-telemetry/opentelemetry-python/pull/751)) diff --git a/opentelemetry-api/src/opentelemetry/configuration/__init__.py b/opentelemetry-api/src/opentelemetry/configuration/__init__.py index 36c0950c0b0..0c606b5af4d 100644 --- a/opentelemetry-api/src/opentelemetry/configuration/__init__.py +++ b/opentelemetry-api/src/opentelemetry/configuration/__init__.py @@ -16,30 +16,33 @@ Simple configuration manager This is a configuration manager for OpenTelemetry. It reads configuration -values from environment variables prefixed with ``OPENTELEMETRY_PYTHON_`` whose -characters are only alphanumeric characters and unserscores, except for the -first character after ``OPENTELEMETRY_PYTHON_`` which must not be a number. +values from environment variables prefixed with ``OTEL_`` (for environment +variables that apply to any OpenTelemetry implementation) or with +``OTEL_PYTHON_`` (for environment variables that are specific to the Python +implementation of OpenTelemetry) whose characters are only alphanumeric +characters and unserscores, except for the first character after ``OTEL_`` or +``OTEL_PYTHON_`` which must not be a number. For example, these environment variables will be read: -1. ``OPENTELEMETRY_PYTHON_SOMETHING`` -2. ``OPENTELEMETRY_PYTHON_SOMETHING_ELSE_`` -3. ``OPENTELEMETRY_PYTHON_SOMETHING_ELSE_AND__ELSE`` -4. ``OPENTELEMETRY_PYTHON_SOMETHING_ELSE_AND_else`` -5. ``OPENTELEMETRY_PYTHON_SOMETHING_ELSE_AND_else2`` +1. ``OTEL_SOMETHING`` +2. ``OTEL_SOMETHING_ELSE_`` +3. ``OTEL_SOMETHING_ELSE_AND__ELSE`` +4. ``OTEL_SOMETHING_ELSE_AND_else`` +5. ``OTEL_SOMETHING_ELSE_AND_else2`` These won't: 1. ``OPENTELEMETRY_PYTH_SOMETHING`` -2. ``OPENTELEMETRY_PYTHON_2_SOMETHING_AND__ELSE`` -3. ``OPENTELEMETRY_PYTHON_SOMETHING_%_ELSE`` +2. ``OTEL_2_SOMETHING_AND__ELSE`` +3. ``OTEL_SOMETHING_%_ELSE`` The values stored in the environment variables can be found in an instance of ``opentelemetry.configuration.Configuration``. This class can be instantiated freely because instantiating it returns always the same object. For example, if the environment variable -``OPENTELEMETRY_PYTHON_METER_PROVIDER`` value is ``my_meter_provider``, then +``OTEL_PYTHON_METER_PROVIDER`` value is ``my_meter_provider``, then ``Configuration().meter_provider == "my_meter_provider"`` would be ``True``. Non defined attributes will always return ``None``. This is intended to make it @@ -49,8 +52,8 @@ Environment variables used by OpenTelemetry ------------------------------------------- -1. OPENTELEMETRY_PYTHON_METER_PROVIDER -2. OPENTELEMETRY_PYTHON_TRACER_PROVIDER +1. OTEL_PYTHON_METER_PROVIDER +2. OTEL_PYTHON_TRACER_PROVIDER The value of these environment variables should be the name of the entry point that points to the class that implements either provider. This OpenTelemetry @@ -70,7 +73,7 @@ } To use the meter provider above, then the -``OPENTELEMETRY_PYTHON_METER_PROVIDER`` should be set to +``OTEL_PYTHON_METER_PROVIDER`` should be set to ``"default_meter_provider"`` (this is not actually necessary since the OpenTelemetry API provided providers are the default ones used if no configuration is found in the environment variables). @@ -110,13 +113,11 @@ def __new__(cls) -> "Configuration": instance = super().__new__(cls) for key, value_str in environ.items(): - match = fullmatch( - r"OPENTELEMETRY_PYTHON_([A-Za-z_][\w_]*)", key - ) + match = fullmatch(r"OTEL_(PYTHON_)?([A-Za-z_][\w_]*)", key) if match is not None: - key = match.group(1) + key = match.group(2) value = value_str # type: ConfigValue if value_str == "True": diff --git a/opentelemetry-api/src/opentelemetry/context/__init__.py b/opentelemetry-api/src/opentelemetry/context/__init__.py index adf1bc0869f..a5f24118d34 100644 --- a/opentelemetry-api/src/opentelemetry/context/__init__.py +++ b/opentelemetry-api/src/opentelemetry/context/__init__.py @@ -55,7 +55,7 @@ def wrapper( default_context = "contextvars_context" configured_context = environ.get( - "OPENTELEMETRY_CONTEXT", default_context + "OTEL_CONTEXT", default_context ) # type: str try: _RUNTIME_CONTEXT = next( diff --git a/opentelemetry-api/tests/configuration/test_configuration.py b/opentelemetry-api/tests/configuration/test_configuration.py index 316847a0044..557591513b8 100644 --- a/opentelemetry-api/tests/configuration/test_configuration.py +++ b/opentelemetry-api/tests/configuration/test_configuration.py @@ -32,10 +32,10 @@ def test_singleton(self) -> None: @patch.dict( "os.environ", # type: ignore { - "OPENTELEMETRY_PYTHON_METER_PROVIDER": "meter_provider", - "OPENTELEMETRY_PYTHON_TRACER_PROVIDER": "tracer_provider", - "OPENTELEMETRY_PYTHON_OThER": "other", - "OPENTELEMETRY_PYTHON_OTHER_7": "other_7", + "OTEL_PYTHON_METER_PROVIDER": "meter_provider", + "OTEL_PYTHON_TRACER_PROVIDER": "tracer_provider", + "OTEL_OThER": "other", + "OTEL_OTHER_7": "other_7", "OPENTELEMETRY_PTHON_TRACEX_PROVIDER": "tracex_provider", }, ) @@ -56,7 +56,7 @@ def test_environment_variables(self) -> None: @patch.dict( "os.environ", # type: ignore - {"OPENTELEMETRY_PYTHON_TRACER_PROVIDER": "tracer_provider"}, + {"OTEL_PYTHON_TRACER_PROVIDER": "tracer_provider"}, ) def test_property(self) -> None: with self.assertRaises(AttributeError): @@ -79,8 +79,7 @@ def test_getattr(self) -> None: def test_reset(self) -> None: environ_patcher = patch.dict( - "os.environ", - {"OPENTELEMETRY_PYTHON_TRACER_PROVIDER": "tracer_provider"}, + "os.environ", {"OTEL_PYTHON_TRACER_PROVIDER": "tracer_provider"}, ) environ_patcher.start() @@ -99,10 +98,7 @@ def test_reset(self) -> None: @patch.dict( "os.environ", # type: ignore - { - "OPENTELEMETRY_PYTHON_TRUE": "True", - "OPENTELEMETRY_PYTHON_FALSE": "False", - }, + {"OTEL_TRUE": "True", "OTEL_FALSE": "False"}, ) def test_boolean(self) -> None: self.assertIsInstance( @@ -117,9 +113,9 @@ def test_boolean(self) -> None: @patch.dict( "os.environ", # type: ignore { - "OPENTELEMETRY_PYTHON_POSITIVE_INTEGER": "123", - "OPENTELEMETRY_PYTHON_NEGATIVE_INTEGER": "-123", - "OPENTELEMETRY_PYTHON_NON_INTEGER": "-12z3", + "OTEL_POSITIVE_INTEGER": "123", + "OTEL_NEGATIVE_INTEGER": "-123", + "OTEL_NON_INTEGER": "-12z3", }, ) def test_integer(self) -> None: @@ -136,9 +132,9 @@ def test_integer(self) -> None: @patch.dict( "os.environ", # type: ignore { - "OPENTELEMETRY_PYTHON_POSITIVE_FLOAT": "123.123", - "OPENTELEMETRY_PYTHON_NEGATIVE_FLOAT": "-123.123", - "OPENTELEMETRY_PYTHON_NON_FLOAT": "-12z3.123", + "OTEL_POSITIVE_FLOAT": "123.123", + "OTEL_NEGATIVE_FLOAT": "-123.123", + "OTEL_NON_FLOAT": "-12z3.123", }, ) def test_float(self) -> None: diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md index cbb96eabcd5..bf7618e77fc 100644 --- a/opentelemetry-sdk/CHANGELOG.md +++ b/opentelemetry-sdk/CHANGELOG.md @@ -2,9 +2,10 @@ ## Unreleased -## Version 0.11b0 +- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL` + ([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904)) -Released 2020-07-28 +## Version 0.11b0 - Add support for resources and resource detector ([#853](https://github.com/open-telemetry/opentelemetry-python/pull/853)) diff --git a/opentelemetry-sdk/tests/conftest.py b/opentelemetry-sdk/tests/conftest.py index 80a79222a1f..ed5853b43d3 100644 --- a/opentelemetry-sdk/tests/conftest.py +++ b/opentelemetry-sdk/tests/conftest.py @@ -20,11 +20,11 @@ def pytest_sessionstart(session): # pylint: disable=unused-argument if version_info < (3, 5): # contextvars are not supported in 3.4, use thread-local storage - environ["OPENTELEMETRY_CONTEXT"] = "threadlocal_context" + environ["OTEL_CONTEXT"] = "threadlocal_context" else: - environ["OPENTELEMETRY_CONTEXT"] = "contextvars_context" + environ["OTEL_CONTEXT"] = "contextvars_context" def pytest_sessionfinish(session): # pylint: disable=unused-argument - environ.pop("OPENTELEMETRY_CONTEXT") + environ.pop("OTEL_CONTEXT") From 1112792b18bb177ba58fa11ebaecc9597041a73c Mon Sep 17 00:00:00 2001 From: Emmanuel Courreges Date: Thu, 30 Jul 2020 17:18:38 +0200 Subject: [PATCH 15/15] Add proper length zero padding to hex strings of traceId, spanId, parentId sent on the wire (#908) --- .../CHANGELOG.md | 4 +- .../opentelemetry/exporter/zipkin/__init__.py | 9 +-- .../tests/test_zipkin_exporter.py | 66 +++++++++++++++++++ 3 files changed, 74 insertions(+), 5 deletions(-) diff --git a/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md b/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md index 2218d44c20b..1063d35cf53 100644 --- a/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md @@ -4,6 +4,8 @@ - Change package name to opentelemetry-exporter-zipkin ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953)) +- Add proper length zero padding to hex strings of traceId, spanId, parentId sent on the wire, for compatibility with jaeger-collector + ([#908](https://github.com/open-telemetry/opentelemetry-python/pull/908)) ## 0.8b0 @@ -23,4 +25,4 @@ Released 2020-05-12 Released 2020-02-21 -- Initial release \ No newline at end of file +- Initial release diff --git a/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py index 10bd6e93e97..b0eb1bce0f1 100644 --- a/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py +++ b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py @@ -168,8 +168,9 @@ def _translate_to_zipkin(self, spans: Sequence[Span]): duration_mus = _nsec_to_usec_round(span.end_time - span.start_time) zipkin_span = { - "traceId": format(trace_id, "x"), - "id": format(span_id, "x"), + # Ensure left-zero-padding of traceId, spanId, parentId + "traceId": format(trace_id, "032x"), + "id": format(span_id, "016x"), "name": span.name, "timestamp": start_timestamp_mus, "duration": duration_mus, @@ -184,10 +185,10 @@ def _translate_to_zipkin(self, spans: Sequence[Span]): if isinstance(span.parent, Span): zipkin_span["parentId"] = format( - span.parent.get_context().span_id, "x" + span.parent.get_context().span_id, "016x" ) elif isinstance(span.parent, SpanContext): - zipkin_span["parentId"] = format(span.parent.span_id, "x") + zipkin_span["parentId"] = format(span.parent.span_id, "016x") zipkin_spans.append(zipkin_span) return zipkin_spans diff --git a/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py b/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py index 9f6da2e240f..f6e24a1495a 100644 --- a/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py +++ b/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py @@ -264,6 +264,72 @@ def test_export(self): headers={"Content-Type": "application/json"}, ) + # pylint: disable=too-many-locals + def test_zero_padding(self): + """test that hex ids starting with 0 + are properly padded to 16 or 32 hex chars + when exported + """ + + span_names = "testZeroes" + trace_id = 0x0E0C63257DE34C926F9EFCD03927272E + span_id = 0x04BF92DEEFC58C92 + parent_id = 0x0AAAAAAAAAAAAAAA + + start_time = 683647322 * 10 ** 9 # in ns + duration = 50 * 10 ** 6 + end_time = start_time + duration + + span_context = trace_api.SpanContext( + trace_id, + span_id, + is_remote=False, + trace_flags=TraceFlags(TraceFlags.SAMPLED), + ) + parent_context = trace_api.SpanContext( + trace_id, parent_id, is_remote=False + ) + + otel_span = trace.Span( + name=span_names[0], context=span_context, parent=parent_context, + ) + + otel_span.start(start_time=start_time) + otel_span.end(end_time=end_time) + + service_name = "test-service" + local_endpoint = {"serviceName": service_name, "port": 9411} + + exporter = ZipkinSpanExporter(service_name) + # Check traceId are properly lowercase 16 or 32 hex + expected = [ + { + "traceId": "0e0c63257de34c926f9efcd03927272e", + "id": "04bf92deefc58c92", + "name": span_names[0], + "timestamp": start_time // 10 ** 3, + "duration": duration // 10 ** 3, + "localEndpoint": local_endpoint, + "kind": None, + "tags": {}, + "annotations": None, + "debug": True, + "parentId": "0aaaaaaaaaaaaaaa", + } + ] + + mock_post = MagicMock() + with patch("requests.post", mock_post): + mock_post.return_value = MockResponse(200) + status = exporter.export([otel_span]) + self.assertEqual(SpanExportResult.SUCCESS, status) + + mock_post.assert_called_with( + url="http://localhost:9411/api/v2/spans", + data=json.dumps(expected), + headers={"Content-Type": "application/json"}, + ) + @patch("requests.post") def test_invalid_response(self, mock_post): mock_post.return_value = MockResponse(404)