diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 48d109f5ef6..d564f69c672 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -23,7 +23,6 @@ Please describe the tests that you ran to verify your changes. Provide instructi
Answer the following question based on these examples of changes that would require a Contrib Repo Change:
- [The OTel specification](https://github.com/open-telemetry/opentelemetry-specification) has changed which prompted this PR to update the method interfaces of `opentelemetry-api/` or `opentelemetry-sdk/`
-- The method interfaces of `opentelemetry-instrumentation/` have changed
- The method interfaces of `test/util` have changed
- Scripts in `scripts/` that were copied over to the Contrib repo have changed
- Configuration files that were copied over to the Contrib repo have changed (when consistency between repositories is applicable) such as in
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 404b1cb4853..192a11d9ca2 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -10,7 +10,7 @@ env:
# Otherwise, set variable to the commit of your branch on
# opentelemetry-python-contrib which is compatible with these Core repo
# changes.
- CONTRIB_REPO_SHA: 4a4d889b1876323d7f70507b5e4d079f454fe0d6
+ CONTRIB_REPO_SHA: c2e674983a265e54c5eb14e376459a992498aae6
# This is needed because we do not clone the core repo in contrib builds anymore.
# When running contrib builds as part of core builds, we use actions/checkout@v2 which
# does not set an environment variable (simply just runs tox), which is different when
@@ -34,7 +34,7 @@ jobs:
fail-fast: false # ensures the entire test matrix is run, even if one permutation fails
matrix:
python-version: [ py36, py37, py38, py39, pypy3 ]
- package: ["api", "sdk", "instrumentation", "semantic", "getting", "distro" , "shim", "exporter", "protobuf", "propagator"]
+ package: ["api", "sdk", "semantic", "getting", "shim", "exporter", "protobuf", "propagator"]
os: [ ubuntu-20.04, windows-2019 ]
steps:
- name: Checkout Core Repo @ SHA - ${{ github.sha }}
diff --git a/docs-requirements.txt b/docs-requirements.txt
index b670676fbb6..a93eb8aa705 100644
--- a/docs-requirements.txt
+++ b/docs-requirements.txt
@@ -8,9 +8,7 @@ sphinx-jekyll-builder
# doesn't work for pkg_resources.
./opentelemetry-api
./opentelemetry-semantic-conventions
-./opentelemetry-instrumentation
./opentelemetry-sdk
-./opentelemetry-instrumentation
# Required by instrumentation and exporter packages
ddtrace>=0.34.0
diff --git a/eachdist.ini b/eachdist.ini
index 548d6d36e0a..52d5be769fa 100644
--- a/eachdist.ini
+++ b/eachdist.ini
@@ -5,7 +5,6 @@
sortfirst=
opentelemetry-api
opentelemetry-sdk
- opentelemetry-instrumentation
opentelemetry-proto
opentelemetry-distro
tests/util
@@ -39,7 +38,6 @@ packages=
opentelemetry-distro
opentelemetry-semantic-conventions
opentelemetry-test
- opentelemetry-instrumentation
tests
[experimental]
diff --git a/opentelemetry-distro/MANIFEST.in b/opentelemetry-distro/MANIFEST.in
deleted file mode 100644
index 191b7d19592..00000000000
--- a/opentelemetry-distro/MANIFEST.in
+++ /dev/null
@@ -1,7 +0,0 @@
-prune tests
-graft src
-global-exclude *.pyc
-global-exclude *.pyo
-global-exclude __pycache__/*
-include MANIFEST.in
-include README.rst
diff --git a/opentelemetry-distro/README.rst b/opentelemetry-distro/README.rst
deleted file mode 100644
index 80952839104..00000000000
--- a/opentelemetry-distro/README.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-OpenTelemetry Distro
-====================
-
-|pypi|
-
-.. |pypi| image:: https://badge.fury.io/py/opentelemetry-distro.svg
- :target: https://pypi.org/project/opentelemetry-distro/
-
-Installation
-------------
-
-::
-
- pip install opentelemetry-distro
-
-
-This package provides entrypoints to configure OpenTelemetry.
-
-References
-----------
-
-* `OpenTelemetry Project `_
-* `Example using opentelemetry-distro `_
diff --git a/opentelemetry-distro/setup.cfg b/opentelemetry-distro/setup.cfg
deleted file mode 100644
index bf41c9010a6..00000000000
--- a/opentelemetry-distro/setup.cfg
+++ /dev/null
@@ -1,60 +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.
-#
-[metadata]
-name = opentelemetry-distro
-description = OpenTelemetry Python Distro
-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/main/opentelemetry-distro
-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.6
- Programming Language :: Python :: 3.7
- Programming Language :: Python :: 3.8
- Typing :: Typed
-
-[options]
-python_requires = >=3.6
-package_dir=
- =src
-packages=find_namespace:
-zip_safe = False
-include_package_data = True
-install_requires =
- opentelemetry-api ~= 1.3
- opentelemetry-instrumentation == 0.25b0
- opentelemetry-sdk == 1.6.0
-
-[options.packages.find]
-where = src
-
-[options.entry_points]
-opentelemetry_distro =
- distro = opentelemetry.distro:OpenTelemetryDistro
-opentelemetry_configurator =
- configurator = opentelemetry.distro:OpenTelemetryConfigurator
-
-[options.extras_require]
-test =
-otlp =
- opentelemetry-exporter-otlp == 1.6.0
diff --git a/opentelemetry-distro/setup.py b/opentelemetry-distro/setup.py
deleted file mode 100644
index 4783772d060..00000000000
--- a/opentelemetry-distro/setup.py
+++ /dev/null
@@ -1,29 +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", "distro", "version.py"
-)
-PACKAGE_INFO = {}
-with open(VERSION_FILENAME, encoding="utf-8") as f:
- exec(f.read(), PACKAGE_INFO)
-
-setuptools.setup(
- version=PACKAGE_INFO["__version__"],
-)
diff --git a/opentelemetry-distro/src/opentelemetry/distro/__init__.py b/opentelemetry-distro/src/opentelemetry/distro/__init__.py
deleted file mode 100644
index 97e3e2fcc94..00000000000
--- a/opentelemetry-distro/src/opentelemetry/distro/__init__.py
+++ /dev/null
@@ -1,34 +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
-
-from opentelemetry.environment_variables import OTEL_TRACES_EXPORTER
-from opentelemetry.instrumentation.distro import BaseDistro
-from opentelemetry.sdk._configuration import _OTelSDKConfigurator
-
-
-class OpenTelemetryConfigurator(_OTelSDKConfigurator):
- pass
-
-
-class OpenTelemetryDistro(BaseDistro):
- """
- The OpenTelemetry provided Distro configures a default set of
- configuration out of the box.
- """
-
- # pylint: disable=no-self-use
- def _configure(self, **kwargs):
- os.environ.setdefault(OTEL_TRACES_EXPORTER, "otlp_proto_grpc_span")
diff --git a/opentelemetry-distro/src/opentelemetry/distro/py.typed b/opentelemetry-distro/src/opentelemetry/distro/py.typed
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/opentelemetry-distro/src/opentelemetry/distro/version.py b/opentelemetry-distro/src/opentelemetry/distro/version.py
deleted file mode 100644
index 2a05c9b3611..00000000000
--- a/opentelemetry-distro/src/opentelemetry/distro/version.py
+++ /dev/null
@@ -1,15 +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.
-
-__version__ = "0.25b0"
diff --git a/opentelemetry-distro/tests/__init__.py b/opentelemetry-distro/tests/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/opentelemetry-distro/tests/test_distro.py b/opentelemetry-distro/tests/test_distro.py
deleted file mode 100644
index 2e42ed904a9..00000000000
--- a/opentelemetry-distro/tests/test_distro.py
+++ /dev/null
@@ -1,38 +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.
-# type: ignore
-
-import os
-from unittest import TestCase
-
-from pkg_resources import DistributionNotFound, require
-
-from opentelemetry.distro import OpenTelemetryDistro
-from opentelemetry.environment_variables import OTEL_TRACES_EXPORTER
-
-
-class TestDistribution(TestCase):
- def test_package_available(self):
- try:
- require(["opentelemetry-distro"])
- except DistributionNotFound:
- self.fail("opentelemetry-distro not installed")
-
- def test_default_configuration(self):
- distro = OpenTelemetryDistro()
- self.assertIsNone(os.environ.get(OTEL_TRACES_EXPORTER))
- distro.configure()
- self.assertEqual(
- "otlp_proto_grpc_span", os.environ.get(OTEL_TRACES_EXPORTER)
- )
diff --git a/opentelemetry-instrumentation/LICENSE b/opentelemetry-instrumentation/LICENSE
deleted file mode 100644
index 1ef7dad2c5c..00000000000
--- a/opentelemetry-instrumentation/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
- 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 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.
diff --git a/opentelemetry-instrumentation/MANIFEST.in b/opentelemetry-instrumentation/MANIFEST.in
deleted file mode 100644
index faee277146a..00000000000
--- a/opentelemetry-instrumentation/MANIFEST.in
+++ /dev/null
@@ -1,8 +0,0 @@
-graft src
-graft tests
-global-exclude *.pyc
-global-exclude *.pyo
-global-exclude __pycache__/*
-include MANIFEST.in
-include README.rst
-include LICENSE
diff --git a/opentelemetry-instrumentation/README.rst b/opentelemetry-instrumentation/README.rst
deleted file mode 100644
index cae4e3ab5f4..00000000000
--- a/opentelemetry-instrumentation/README.rst
+++ /dev/null
@@ -1,123 +0,0 @@
-OpenTelemetry Instrumentation
-=============================
-
-|pypi|
-
-.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation.svg
- :target: https://pypi.org/project/opentelemetry-instrumentation/
-
-Installation
-------------
-
-::
-
- pip install opentelemetry-instrumentation
-
-
-This package provides a couple of commands that help automatically instruments a program:
-
-.. note::
- You need to install a distro package to get auto instrumentation working. The ``opentelemetry-distro``
- package contains the default distro and automatically configures some of the common options for users.
- For more info about ``opentelemetry-distro`` check `here `__
- ::
-
- pip install opentelemetry-distro[otlp]
-
-
-opentelemetry-bootstrap
------------------------
-
-::
-
- opentelemetry-bootstrap --action=install|requirements
-
-This commands inspects the active Python site-packages and figures out which
-instrumentation packages the user might want to install. By default it prints out
-a list of the suggested instrumentation packages which can be added to a requirements.txt
-file. It also supports installing the suggested packages when run with :code:`--action=install`
-flag.
-
-
-opentelemetry-instrument
-------------------------
-
-::
-
- opentelemetry-instrument python program.py
-
-The instrument command will try to automatically detect packages used by your python program
-and when possible, apply automatic tracing instrumentation on them. This means your program
-will get automatic distributed tracing for free without having to make any code changes
-at all. This will also configure a global tracer and tracing exporter without you having to
-make any code changes. By default, the instrument command will use the OTLP exporter but
-this can be overriden when needed.
-
-The command supports the following configuration options as CLI arguments and environment vars:
-
-
-* ``--trace-exporter`` or ``OTEL_TRACES_EXPORTER``
-
-Used to specify which trace exporter to use. Can be set to one or more of the well-known exporter
-names (see below).
-
- - Defaults to `otlp`.
- - Can be set to `none` to disable automatic tracer initialization.
-
-You can pass multiple values to configure multiple exporters e.g, ``zipkin,prometheus``
-
-Well known trace exporter names:
-
- - jaeger_proto
- - jaeger_thrift
- - opencensus
- - otlp
- - otlp_proto_grpc_span
- - otlp_proto_http_span
- - zipkin_json
- - zipkin_proto
-
-``otlp`` is an alias for ``otlp_proto_grpc_span``.
-
-* ``--id-generator`` or ``OTEL_PYTHON_ID_GENERATOR``
-
-Used to specify which IDs Generator to use for the global Tracer Provider. By default, it
-will use the random IDs generator.
-
-The code in ``program.py`` needs to use one of the packages for which there is
-an OpenTelemetry integration. For a list of the available integrations please
-check `here `_
-
-* ``OTEL_PYTHON_DISABLED_INSTRUMENTATIONS``
-
-If set by the user, opentelemetry-instrument will read this environment variable to disable specific instrumentations.
-e.g OTEL_PYTHON_DISABLED_INSTRUMENTATIONS = "requests,django"
-
-
-Examples
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-::
-
- opentelemetry-instrument --trace-exporter otlp flask run --port=3000
-
-The above command will pass ``--trace-exporter otlp`` to the instrument command and ``--port=3000`` to ``flask run``.
-
-::
-
- opentelemetry-instrument --trace-exporter zipkin_json,otlp celery -A tasks worker --loglevel=info
-
-The above command will configure global trace provider, attach zipkin and otlp exporters to it and then
-start celery with the rest of the arguments.
-
-::
-
- opentelemetry-instrument --ids-generator random flask run --port=3000
-
-The above command will configure the global trace provider to use the Random IDs Generator, and then
-pass ``--port=3000`` to ``flask run``.
-
-References
-----------
-
-* `OpenTelemetry Project `_
diff --git a/opentelemetry-instrumentation/setup.cfg b/opentelemetry-instrumentation/setup.cfg
deleted file mode 100644
index 042f0edb198..00000000000
--- a/opentelemetry-instrumentation/setup.cfg
+++ /dev/null
@@ -1,58 +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.
-#
-[metadata]
-name = opentelemetry-instrumentation
-description = Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python
-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/main/opentelemetry-instrumentation
-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.6
- Programming Language :: Python :: 3.7
- Programming Language :: Python :: 3.8
- Programming Language :: Python :: 3.9
-
-[options]
-python_requires = >=3.6
-package_dir=
- =src
-packages=find_namespace:
-zip_safe = False
-include_package_data = True
-install_requires =
- opentelemetry-api ~= 1.4
- wrapt >= 1.0.0, < 2.0.0
-
-[options.packages.find]
-where = src
-
-[options.entry_points]
-console_scripts =
- opentelemetry-instrument = opentelemetry.instrumentation.auto_instrumentation:run
- opentelemetry-bootstrap = opentelemetry.instrumentation.bootstrap:run
-opentelemetry_environment_variables =
- instrumentation = opentelemetry.instrumentation.environment_variables
-
-[options.extras_require]
-test =
diff --git a/opentelemetry-instrumentation/setup.py b/opentelemetry-instrumentation/setup.py
deleted file mode 100644
index 9d1d5b7b065..00000000000
--- a/opentelemetry-instrumentation/setup.py
+++ /dev/null
@@ -1,29 +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", "instrumentation", "version.py"
-)
-PACKAGE_INFO = {}
-with open(VERSION_FILENAME, encoding="utf-8") as f:
- exec(f.read(), PACKAGE_INFO)
-
-setuptools.setup(
- version=PACKAGE_INFO["__version__"],
-)
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/auto_instrumentation/__init__.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/auto_instrumentation/__init__.py
deleted file mode 100644
index 29b09a0c347..00000000000
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/auto_instrumentation/__init__.py
+++ /dev/null
@@ -1,111 +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.
-
-from argparse import REMAINDER, ArgumentParser
-from logging import getLogger
-from os import environ, execl, getcwd
-from os.path import abspath, dirname, pathsep
-from re import sub
-from shutil import which
-
-from pkg_resources import iter_entry_points
-
-_logger = getLogger(__file__)
-
-
-def run() -> None:
-
- parser = ArgumentParser(
- description="""
- opentelemetry-instrument automatically instruments a Python
- program and its dependencies and then runs the program.
- """,
- epilog="""
- Optional arguments (except for --help) for opentelemetry-instrument
- directly correspond with OpenTelemetry environment variables. The
- corresponding optional argument is formed by removing the OTEL_ or
- OTEL_PYTHON_ prefix from the environment variable and lower casing the
- rest. For example, the optional argument --attribute_value_length_limit
- corresponds with the environment variable
- OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT.
-
- These optional arguments will override the current value of the
- corresponding environment variable during the execution of the command.
- """,
- )
-
- argument_otel_environment_variable = {}
-
- for entry_point in iter_entry_points(
- "opentelemetry_environment_variables"
- ):
- environment_variable_module = entry_point.load()
-
- for attribute in dir(environment_variable_module):
-
- if attribute.startswith("OTEL_"):
-
- argument = sub(r"OTEL_(PYTHON_)?", "", attribute).lower()
-
- parser.add_argument(
- f"--{argument}",
- required=False,
- )
- argument_otel_environment_variable[argument] = attribute
-
- parser.add_argument("command", help="Your Python application.")
- parser.add_argument(
- "command_args",
- help="Arguments for your application.",
- nargs=REMAINDER,
- )
-
- args = parser.parse_args()
-
- for argument, otel_environment_variable in (
- argument_otel_environment_variable
- ).items():
- value = getattr(args, argument)
- if value is not None:
-
- environ[otel_environment_variable] = value
-
- python_path = environ.get("PYTHONPATH")
-
- if not python_path:
- python_path = []
-
- else:
- python_path = python_path.split(pathsep)
-
- cwd_path = getcwd()
-
- # This is being added to support applications that are being run from their
- # own executable, like Django.
- # FIXME investigate if there is another way to achieve this
- if cwd_path not in python_path:
- python_path.insert(0, cwd_path)
-
- filedir_path = dirname(abspath(__file__))
-
- python_path = [path for path in python_path if path != filedir_path]
-
- python_path.insert(0, filedir_path)
-
- environ["PYTHONPATH"] = pathsep.join(python_path)
-
- executable = which(args.command)
- execl(executable, executable, *args.command_args)
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/auto_instrumentation/sitecustomize.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/auto_instrumentation/sitecustomize.py
deleted file mode 100644
index f7a6412ff6e..00000000000
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/auto_instrumentation/sitecustomize.py
+++ /dev/null
@@ -1,141 +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 sys
-from logging import getLogger
-from os import environ, path
-from os.path import abspath, dirname, pathsep
-from re import sub
-
-from pkg_resources import iter_entry_points
-
-from opentelemetry.instrumentation.dependencies import (
- get_dist_dependency_conflicts,
-)
-from opentelemetry.instrumentation.distro import BaseDistro, DefaultDistro
-from opentelemetry.instrumentation.environment_variables import (
- OTEL_PYTHON_DISABLED_INSTRUMENTATIONS,
-)
-
-logger = getLogger(__file__)
-
-
-def _load_distros() -> BaseDistro:
- for entry_point in iter_entry_points("opentelemetry_distro"):
- try:
- distro = entry_point.load()()
- if not isinstance(distro, BaseDistro):
- logger.debug(
- "%s is not an OpenTelemetry Distro. Skipping",
- entry_point.name,
- )
- continue
- logger.debug(
- "Distribution %s will be configured", entry_point.name
- )
- return distro
- except Exception as exc: # pylint: disable=broad-except
- logger.exception(
- "Distribution %s configuration failed", entry_point.name
- )
- raise exc
- return DefaultDistro()
-
-
-def _load_instrumentors(distro):
- package_to_exclude = environ.get(OTEL_PYTHON_DISABLED_INSTRUMENTATIONS, [])
- if isinstance(package_to_exclude, str):
- package_to_exclude = package_to_exclude.split(",")
- # to handle users entering "requests , flask" or "requests, flask" with spaces
- package_to_exclude = [x.strip() for x in package_to_exclude]
-
- for entry_point in iter_entry_points("opentelemetry_pre_instrument"):
- entry_point.load()()
-
- for entry_point in iter_entry_points("opentelemetry_instrumentor"):
- if entry_point.name in package_to_exclude:
- logger.debug(
- "Instrumentation skipped for library %s", entry_point.name
- )
- continue
-
- try:
- conflict = get_dist_dependency_conflicts(entry_point.dist)
- if conflict:
- logger.debug(
- "Skipping instrumentation %s: %s",
- entry_point.name,
- conflict,
- )
- continue
-
- # tell instrumentation to not run dep checks again as we already did it above
- distro.load_instrumentor(entry_point, skip_dep_check=True)
- logger.debug("Instrumented %s", entry_point.name)
- except Exception as exc: # pylint: disable=broad-except
- logger.exception("Instrumenting of %s failed", entry_point.name)
- raise exc
-
- for entry_point in iter_entry_points("opentelemetry_post_instrument"):
- entry_point.load()()
-
-
-def _load_configurators():
- configured = None
- for entry_point in iter_entry_points("opentelemetry_configurator"):
- if configured is not None:
- logger.warning(
- "Configuration of %s not loaded, %s already loaded",
- entry_point.name,
- configured,
- )
- continue
- try:
- entry_point.load()().configure() # type: ignore
- configured = entry_point.name
- except Exception as exc: # pylint: disable=broad-except
- logger.exception("Configuration of %s failed", entry_point.name)
- raise exc
-
-
-def initialize():
- try:
- distro = _load_distros()
- distro.configure()
- _load_configurators()
- _load_instrumentors(distro)
- except Exception: # pylint: disable=broad-except
- logger.exception("Failed to auto initialize opentelemetry")
- finally:
- environ["PYTHONPATH"] = sub(
- fr"{dirname(abspath(__file__))}{pathsep}?",
- "",
- environ["PYTHONPATH"],
- )
-
-
-if (
- hasattr(sys, "argv")
- and sys.argv[0].split(path.sep)[-1] == "celery"
- and "worker" in sys.argv[1:]
-):
- from celery.signals import worker_process_init # pylint:disable=E0401
-
- @worker_process_init.connect(weak=False)
- def init_celery(*args, **kwargs):
- initialize()
-
-
-else:
- initialize()
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py
deleted file mode 100644
index f1c8181bae4..00000000000
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py
+++ /dev/null
@@ -1,154 +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 argparse
-import logging
-import subprocess
-import sys
-
-import pkg_resources
-
-from opentelemetry.instrumentation.bootstrap_gen import (
- default_instrumentations,
- libraries,
-)
-
-logger = logging.getLogger(__file__)
-
-
-def _syscall(func):
- def wrapper(package=None):
- try:
- if package:
- return func(package)
- return func()
- except subprocess.SubprocessError as exp:
- cmd = getattr(exp, "cmd", None)
- if cmd:
- msg = f'Error calling system command "{" ".join(cmd)}"'
- if package:
- msg = f'{msg} for package "{package}"'
- raise RuntimeError(msg)
-
- return wrapper
-
-
-@_syscall
-def _sys_pip_install(package):
- # explicit upgrade strategy to override potential pip config
- subprocess.check_call(
- [
- sys.executable,
- "-m",
- "pip",
- "install",
- "-U",
- "--upgrade-strategy",
- "only-if-needed",
- package,
- ]
- )
-
-
-def _pip_check():
- """Ensures none of the instrumentations have dependency conflicts.
- Clean check reported as:
- 'No broken requirements found.'
- Dependency conflicts are reported as:
- 'opentelemetry-instrumentation-flask 1.0.1 has requirement opentelemetry-sdk<2.0,>=1.0, but you have opentelemetry-sdk 0.5.'
- To not be too restrictive, we'll only check for relevant packages.
- """
- with subprocess.Popen(
- [sys.executable, "-m", "pip", "check"], stdout=subprocess.PIPE
- ) as check_pipe:
- pip_check = check_pipe.communicate()[0].decode()
- pip_check_lower = pip_check.lower()
- for package_tup in libraries.values():
- for package in package_tup:
- if package.lower() in pip_check_lower:
- raise RuntimeError(f"Dependency conflict found: {pip_check}")
-
-
-def _is_installed(req):
- if req in sys.modules:
- return True
-
- try:
- pkg_resources.get_distribution(req)
- except pkg_resources.DistributionNotFound:
- return False
- except pkg_resources.VersionConflict as exc:
- logger.warning(
- "instrumentation for package %s is available but version %s is installed. Skipping.",
- exc.req,
- exc.dist.as_requirement(), # pylint: disable=no-member
- )
- return False
- return True
-
-
-def _find_installed_libraries():
- libs = default_instrumentations[:]
- libs.extend(
- [
- v["instrumentation"]
- for _, v in libraries.items()
- if _is_installed(v["library"])
- ]
- )
- return libs
-
-
-def _run_requirements():
- logger.setLevel(logging.ERROR)
- print("\n".join(_find_installed_libraries()), end="")
-
-
-def _run_install():
- for lib in _find_installed_libraries():
- _sys_pip_install(lib)
- _pip_check()
-
-
-def run() -> None:
- action_install = "install"
- action_requirements = "requirements"
-
- parser = argparse.ArgumentParser(
- description="""
- opentelemetry-bootstrap detects installed libraries and automatically
- installs the relevant instrumentation packages for them.
- """
- )
- parser.add_argument(
- "-a",
- "--action",
- choices=[action_install, action_requirements],
- default=action_requirements,
- help="""
- install - uses pip to install the new requirements using to the
- currently active site-package.
- requirements - prints out the new requirements to stdout. Action can
- be piped and appended to a requirements.txt file.
- """,
- )
- args = parser.parse_args()
-
- cmd = {
- action_install: _run_install,
- action_requirements: _run_requirements,
- }[args.action]
- cmd()
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/dependencies.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/dependencies.py
deleted file mode 100644
index 6c65d6677e1..00000000000
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/dependencies.py
+++ /dev/null
@@ -1,62 +0,0 @@
-from logging import getLogger
-from typing import Collection, Optional
-
-from pkg_resources import (
- Distribution,
- DistributionNotFound,
- RequirementParseError,
- VersionConflict,
- get_distribution,
-)
-
-logger = getLogger(__file__)
-
-
-class DependencyConflict:
- required: str = None
- found: Optional[str] = None
-
- def __init__(self, required, found=None):
- self.required = required
- self.found = found
-
- def __str__(self):
- return f'DependencyConflict: requested: "{self.required}" but found: "{self.found}"'
-
-
-def get_dist_dependency_conflicts(
- dist: Distribution,
-) -> Optional[DependencyConflict]:
- main_deps = dist.requires()
- instrumentation_deps = []
- for dep in dist.requires(("instruments",)):
- if dep not in main_deps:
- # we set marker to none so string representation of the dependency looks like
- # requests ~= 1.0
- # instead of
- # requests ~= 1.0; extra = "instruments"
- # which does not work with `get_distribution()`
- dep.marker = None
- instrumentation_deps.append(str(dep))
-
- return get_dependency_conflicts(instrumentation_deps)
-
-
-def get_dependency_conflicts(
- deps: Collection[str],
-) -> Optional[DependencyConflict]:
- for dep in deps:
- try:
- get_distribution(dep)
- except VersionConflict as exc:
- return DependencyConflict(dep, exc.dist)
- except DistributionNotFound:
- return DependencyConflict(dep)
- except RequirementParseError as exc:
- logger.warning(
- 'error parsing dependency, reporting as a conflict: "%s" - %s',
- dep,
- exc,
- )
- return DependencyConflict(dep)
- return None
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/distro.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/distro.py
deleted file mode 100644
index cc1c99c1e03..00000000000
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/distro.py
+++ /dev/null
@@ -1,71 +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.
-# type: ignore
-
-"""
-OpenTelemetry Base Distribution (Distro)
-"""
-
-from abc import ABC, abstractmethod
-from logging import getLogger
-
-from pkg_resources import EntryPoint
-
-from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
-
-_LOG = getLogger(__name__)
-
-
-class BaseDistro(ABC):
- """An ABC for distro"""
-
- _instance = None
-
- def __new__(cls, *args, **kwargs):
-
- if cls._instance is None:
- cls._instance = object.__new__(cls, *args, **kwargs)
-
- return cls._instance
-
- @abstractmethod
- def _configure(self, **kwargs):
- """Configure the distribution"""
-
- def configure(self, **kwargs):
- """Configure the distribution"""
- self._configure(**kwargs)
-
- def load_instrumentor( # pylint: disable=no-self-use
- self, entry_point: EntryPoint, **kwargs
- ):
- """Takes a collection of instrumentation entry points
- and activates them by instantiating and calling instrument()
- on each one.
-
- Distros can override this method to customize the behavior by
- inspecting each entry point and configuring them in special ways,
- passing additional arguments, load a replacement/fork instead,
- skip loading entirely, etc.
- """
- instrumentor: BaseInstrumentor = entry_point.load()
- instrumentor().instrument(**kwargs)
-
-
-class DefaultDistro(BaseDistro):
- def _configure(self, **kwargs):
- pass
-
-
-__all__ = ["BaseDistro", "DefaultDistro"]
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/environment_variables.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/environment_variables.py
deleted file mode 100644
index ad28f068590..00000000000
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/environment_variables.py
+++ /dev/null
@@ -1,18 +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.
-
-OTEL_PYTHON_DISABLED_INSTRUMENTATIONS = "OTEL_PYTHON_DISABLED_INSTRUMENTATIONS"
-"""
-.. envvar:: OTEL_PYTHON_DISABLED_INSTRUMENTATIONS
-"""
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/instrumentor.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/instrumentor.py
deleted file mode 100644
index 74ebe867461..00000000000
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/instrumentor.py
+++ /dev/null
@@ -1,132 +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.
-# type: ignore
-
-"""
-OpenTelemetry Base Instrumentor
-"""
-
-from abc import ABC, abstractmethod
-from logging import getLogger
-from typing import Collection, Optional
-
-from opentelemetry.instrumentation.dependencies import (
- DependencyConflict,
- get_dependency_conflicts,
-)
-
-_LOG = getLogger(__name__)
-
-
-class BaseInstrumentor(ABC):
- """An ABC for instrumentors
-
- Child classes of this ABC should instrument specific third
- party libraries or frameworks either by using the
- ``opentelemetry-instrument`` command or by calling their methods
- directly.
-
- Since every third party library or framework is different and has different
- instrumentation needs, more methods can be added to the child classes as
- needed to provide practical instrumentation to the end user.
- """
-
- _instance = None
- _is_instrumented_by_opentelemetry = False
-
- def __new__(cls, *args, **kwargs):
-
- if cls._instance is None:
- cls._instance = object.__new__(cls, *args, **kwargs)
-
- return cls._instance
-
- @property
- def is_instrumented_by_opentelemetry(self):
- return self._is_instrumented_by_opentelemetry
-
- @abstractmethod
- def instrumentation_dependencies(self) -> Collection[str]:
- """Return a list of python packages with versions that the will be instrumented.
-
- The format should be the same as used in requirements.txt or setup.py.
-
- For example, if an instrumentation instruments requests 1.x, this method should look
- like:
-
- def instrumentation_dependencies(self) -> Collection[str]:
- return ['requests ~= 1.0']
-
- This will ensure that the instrumentation will only be used when the specified library
- is present in the environment.
- """
-
- def _instrument(self, **kwargs):
- """Instrument the library"""
-
- @abstractmethod
- def _uninstrument(self, **kwargs):
- """Uninstrument the library"""
-
- def _check_dependency_conflicts(self) -> Optional[DependencyConflict]:
- dependencies = self.instrumentation_dependencies()
- return get_dependency_conflicts(dependencies)
-
- def instrument(self, **kwargs):
- """Instrument the library
-
- This method will be called without any optional arguments by the
- ``opentelemetry-instrument`` command.
-
- This means that calling this method directly without passing any
- optional values should do the very same thing that the
- ``opentelemetry-instrument`` command does.
- """
-
- if self._is_instrumented_by_opentelemetry:
- _LOG.warning("Attempting to instrument while already instrumented")
- return None
-
- # check if instrumentor has any missing or conflicting dependencies
- skip_dep_check = kwargs.pop("skip_dep_check", False)
- if not skip_dep_check:
- conflict = self._check_dependency_conflicts()
- if conflict:
- _LOG.error(conflict)
- return None
-
- result = self._instrument( # pylint: disable=assignment-from-no-return
- **kwargs
- )
- self._is_instrumented_by_opentelemetry = True
- return result
-
- def uninstrument(self, **kwargs):
- """Uninstrument the library
-
- See ``BaseInstrumentor.instrument`` for more information regarding the
- usage of ``kwargs``.
- """
-
- if self._is_instrumented_by_opentelemetry:
- result = self._uninstrument(**kwargs)
- self._is_instrumented_by_opentelemetry = False
- return result
-
- _LOG.warning("Attempting to uninstrument while already uninstrumented")
-
- return None
-
-
-__all__ = ["BaseInstrumentor"]
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/propagators.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/propagators.py
deleted file mode 100644
index bc40f7742c7..00000000000
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/propagators.py
+++ /dev/null
@@ -1,124 +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.
-
-"""
-This module implements experimental propagators to inject trace context
-into response carriers. This is useful for server side frameworks that start traces
-when server requests and want to share the trace context with the client so the
-client can add its spans to the same trace.
-
-This is part of an upcoming W3C spec and will eventually make it to the Otel spec.
-
-https://w3c.github.io/trace-context/#trace-context-http-response-headers-format
-"""
-
-import typing
-from abc import ABC, abstractmethod
-
-from opentelemetry import trace
-from opentelemetry.context.context import Context
-from opentelemetry.propagators import textmap
-from opentelemetry.trace import format_span_id, format_trace_id
-
-_HTTP_HEADER_ACCESS_CONTROL_EXPOSE_HEADERS = "Access-Control-Expose-Headers"
-_RESPONSE_PROPAGATOR = None
-
-
-def get_global_response_propagator():
- return _RESPONSE_PROPAGATOR
-
-
-def set_global_response_propagator(propagator):
- global _RESPONSE_PROPAGATOR # pylint:disable=global-statement
- _RESPONSE_PROPAGATOR = propagator
-
-
-class Setter(ABC):
- @abstractmethod
- def set(self, carrier, key, value):
- """Inject the provided key value pair in carrier."""
-
-
-class DictHeaderSetter(Setter):
- def set(self, carrier, key, value): # pylint: disable=no-self-use
- old_value = carrier.get(key, "")
- if old_value:
- value = f"{old_value}, {value}"
- carrier[key] = value
-
-
-class FuncSetter(Setter):
- """FuncSetter coverts a function into a valid Setter. Any function that can
- set values in a carrier can be converted into a Setter by using FuncSetter.
- This is useful when injecting trace context into non-dict objects such
- HTTP Response objects for different framework.
-
- For example, it can be used to create a setter for Falcon response object as:
-
- setter = FuncSetter(falcon.api.Response.append_header)
-
- and then used with the propagator as:
-
- propagator.inject(falcon_response, setter=setter)
-
- This would essentially make the propagator call `falcon_response.append_header(key, value)`
- """
-
- def __init__(self, func):
- self._func = func
-
- def set(self, carrier, key, value):
- self._func(carrier, key, value)
-
-
-default_setter = DictHeaderSetter()
-
-
-class ResponsePropagator(ABC):
- @abstractmethod
- def inject(
- self,
- carrier: textmap.CarrierT,
- context: typing.Optional[Context] = None,
- setter: textmap.Setter = default_setter,
- ) -> None:
- """Injects SpanContext into the HTTP response carrier."""
-
-
-class TraceResponsePropagator(ResponsePropagator):
- """Experimental propagator that injects tracecontext into HTTP responses."""
-
- def inject(
- self,
- carrier: textmap.CarrierT,
- context: typing.Optional[Context] = None,
- setter: textmap.Setter = default_setter,
- ) -> None:
- """Injects SpanContext into the HTTP response carrier."""
- span = trace.get_current_span(context)
- span_context = span.get_span_context()
- if span_context == trace.INVALID_SPAN_CONTEXT:
- return
-
- header_name = "traceresponse"
- setter.set(
- carrier,
- header_name,
- f"00-{format_trace_id(span_context.trace_id)}-{format_span_id(span_context.span_id)}-{span_context.trace_flags:02x}",
- )
- setter.set(
- carrier,
- _HTTP_HEADER_ACCESS_CONTROL_EXPOSE_HEADERS,
- header_name,
- )
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/py.typed b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/py.typed
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py
deleted file mode 100644
index 5f63b4af5e3..00000000000
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py
+++ /dev/null
@@ -1,64 +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.
-
-from typing import Dict, Sequence
-
-from wrapt import ObjectProxy
-
-# pylint: disable=unused-import
-from opentelemetry.context import _SUPPRESS_INSTRUMENTATION_KEY # noqa: F401
-from opentelemetry.trace import StatusCode
-
-
-def extract_attributes_from_object(
- obj: any, attributes: Sequence[str], existing: Dict[str, str] = None
-) -> Dict[str, str]:
- extracted = {}
- if existing:
- extracted.update(existing)
- for attr in attributes:
- value = getattr(obj, attr, None)
- if value is not None:
- extracted[attr] = str(value)
- return extracted
-
-
-def http_status_to_status_code(
- status: int, allow_redirect: bool = True
-) -> StatusCode:
- """Converts an HTTP status code to an OpenTelemetry canonical status code
-
- Args:
- status (int): HTTP status code
- """
- # See: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/http.md#status
- if status < 100:
- return StatusCode.ERROR
- if status <= 299:
- return StatusCode.UNSET
- if status <= 399 and allow_redirect:
- return StatusCode.UNSET
- return StatusCode.ERROR
-
-
-def unwrap(obj, attr: str):
- """Given a function that was wrapped by wrapt.wrap_function_wrapper, unwrap it
-
- Args:
- obj: Object that holds a reference to the wrapped function
- attr (str): Name of the wrapped function
- """
- func = getattr(obj, attr, None)
- if func and isinstance(func, ObjectProxy) and hasattr(func, "__wrapped__"):
- setattr(obj, attr, func.__wrapped__)
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py
deleted file mode 100644
index 2a05c9b3611..00000000000
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py
+++ /dev/null
@@ -1,15 +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.
-
-__version__ = "0.25b0"
diff --git a/opentelemetry-instrumentation/tests/__init__.py b/opentelemetry-instrumentation/tests/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/opentelemetry-instrumentation/tests/test_bootstrap.py b/opentelemetry-instrumentation/tests/test_bootstrap.py
deleted file mode 100644
index a266bf8a43e..00000000000
--- a/opentelemetry-instrumentation/tests/test_bootstrap.py
+++ /dev/null
@@ -1,91 +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.
-# type: ignore
-
-from io import StringIO
-from random import sample
-from unittest import TestCase
-from unittest.mock import call, patch
-
-from opentelemetry.instrumentation import bootstrap
-from opentelemetry.instrumentation.bootstrap_gen import libraries
-
-
-def sample_packages(packages, rate):
- return sample(
- list(packages),
- int(len(packages) * rate),
- )
-
-
-class TestBootstrap(TestCase):
-
- installed_libraries = {}
- installed_instrumentations = {}
-
- @classmethod
- def setUpClass(cls):
- cls.installed_libraries = sample_packages(
- [lib["instrumentation"] for lib in libraries.values()], 0.6
- )
-
- # treat 50% of sampled packages as pre-installed
- cls.installed_instrumentations = sample_packages(
- cls.installed_libraries, 0.5
- )
-
- cls.pkg_patcher = patch(
- "opentelemetry.instrumentation.bootstrap._find_installed_libraries",
- return_value=cls.installed_libraries,
- )
-
- cls.pip_install_patcher = patch(
- "opentelemetry.instrumentation.bootstrap._sys_pip_install",
- )
- cls.pip_check_patcher = patch(
- "opentelemetry.instrumentation.bootstrap._pip_check",
- )
-
- cls.pkg_patcher.start()
- cls.mock_pip_install = cls.pip_install_patcher.start()
- cls.mock_pip_check = cls.pip_check_patcher.start()
-
- @classmethod
- def tearDownClass(cls):
- cls.pip_check_patcher.start()
- cls.pip_install_patcher.start()
- cls.pkg_patcher.stop()
-
- @patch("sys.argv", ["bootstrap", "-a", "pipenv"])
- def test_run_unknown_cmd(self):
- with self.assertRaises(SystemExit):
- bootstrap.run()
-
- @patch("sys.argv", ["bootstrap", "-a", "requirements"])
- def test_run_cmd_print(self):
- with patch("sys.stdout", new=StringIO()) as fake_out:
- bootstrap.run()
- self.assertEqual(
- fake_out.getvalue(),
- "\n".join(self.installed_libraries),
- )
-
- @patch("sys.argv", ["bootstrap", "-a", "install"])
- def test_run_cmd_install(self):
- bootstrap.run()
- self.mock_pip_install.assert_has_calls(
- [call(i) for i in self.installed_libraries],
- any_order=True,
- )
- self.assertEqual(self.mock_pip_check.call_count, 1)
diff --git a/opentelemetry-instrumentation/tests/test_dependencies.py b/opentelemetry-instrumentation/tests/test_dependencies.py
deleted file mode 100644
index a8acac62f45..00000000000
--- a/opentelemetry-instrumentation/tests/test_dependencies.py
+++ /dev/null
@@ -1,77 +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.
-
-# pylint: disable=protected-access
-
-import pkg_resources
-import pytest
-
-from opentelemetry.instrumentation.dependencies import (
- DependencyConflict,
- get_dependency_conflicts,
- get_dist_dependency_conflicts,
-)
-from opentelemetry.test.test_base import TestBase
-
-
-class TestDependencyConflicts(TestBase):
- def setUp(self):
- pass
-
- def test_get_dependency_conflicts_empty(self):
- self.assertIsNone(get_dependency_conflicts([]))
-
- def test_get_dependency_conflicts_no_conflict(self):
- self.assertIsNone(get_dependency_conflicts(["pytest"]))
-
- def test_get_dependency_conflicts_not_installed(self):
- conflict = get_dependency_conflicts(["this-package-does-not-exist"])
- self.assertTrue(conflict is not None)
- self.assertTrue(isinstance(conflict, DependencyConflict))
- self.assertEqual(
- str(conflict),
- 'DependencyConflict: requested: "this-package-does-not-exist" but found: "None"',
- )
-
- def test_get_dependency_conflicts_mismatched_version(self):
- conflict = get_dependency_conflicts(["pytest == 5000"])
- self.assertTrue(conflict is not None)
- self.assertTrue(isinstance(conflict, DependencyConflict))
- self.assertEqual(
- str(conflict),
- f'DependencyConflict: requested: "pytest == 5000" but found: "pytest {pytest.__version__}"',
- )
-
- def test_get_dist_dependency_conflicts(self):
- def mock_requires(extras=()):
- if "instruments" in extras:
- return [
- pkg_resources.Requirement(
- 'test-pkg ~= 1.0; extra == "instruments"'
- )
- ]
- return []
-
- dist = pkg_resources.Distribution(
- project_name="test-instrumentation", version="1.0"
- )
- dist.requires = mock_requires
-
- conflict = get_dist_dependency_conflicts(dist)
- self.assertTrue(conflict is not None)
- self.assertTrue(isinstance(conflict, DependencyConflict))
- self.assertEqual(
- str(conflict),
- 'DependencyConflict: requested: "test-pkg~=1.0" but found: "None"',
- )
diff --git a/opentelemetry-instrumentation/tests/test_distro.py b/opentelemetry-instrumentation/tests/test_distro.py
deleted file mode 100644
index 399b3f8a654..00000000000
--- a/opentelemetry-instrumentation/tests/test_distro.py
+++ /dev/null
@@ -1,58 +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.
-# type: ignore
-
-from unittest import TestCase
-
-from pkg_resources import EntryPoint
-
-from opentelemetry.instrumentation.distro import BaseDistro
-from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
-
-
-class MockInstrumetor(BaseInstrumentor):
- def instrumentation_dependencies(self):
- return []
-
- def _instrument(self, **kwargs):
- pass
-
- def _uninstrument(self, **kwargs):
- pass
-
-
-class MockEntryPoint(EntryPoint):
- def __init__(self, obj): # pylint: disable=super-init-not-called
- self._obj = obj
-
- def load(self, *args, **kwargs): # pylint: disable=signature-differs
- return self._obj
-
-
-class MockDistro(BaseDistro):
- def _configure(self, **kwargs):
- pass
-
-
-class TestDistro(TestCase):
- def test_load_instrumentor(self):
- # pylint: disable=protected-access
- distro = MockDistro()
-
- instrumentor = MockInstrumetor()
- entry_point = MockEntryPoint(MockInstrumetor)
-
- self.assertFalse(instrumentor._is_instrumented_by_opentelemetry)
- distro.load_instrumentor(entry_point)
- self.assertTrue(instrumentor._is_instrumented_by_opentelemetry)
diff --git a/opentelemetry-instrumentation/tests/test_instrumentor.py b/opentelemetry-instrumentation/tests/test_instrumentor.py
deleted file mode 100644
index dee32c34e45..00000000000
--- a/opentelemetry-instrumentation/tests/test_instrumentor.py
+++ /dev/null
@@ -1,50 +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.
-# type: ignore
-
-from logging import WARNING
-from unittest import TestCase
-
-from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
-
-
-class TestInstrumentor(TestCase):
- class Instrumentor(BaseInstrumentor):
- def _instrument(self, **kwargs):
- return "instrumented"
-
- def _uninstrument(self, **kwargs):
- return "uninstrumented"
-
- def instrumentation_dependencies(self):
- return []
-
- def test_protect(self):
- instrumentor = self.Instrumentor()
-
- with self.assertLogs(level=WARNING):
- self.assertIs(instrumentor.uninstrument(), None)
-
- self.assertEqual(instrumentor.instrument(), "instrumented")
-
- with self.assertLogs(level=WARNING):
- self.assertIs(instrumentor.instrument(), None)
-
- self.assertEqual(instrumentor.uninstrument(), "uninstrumented")
-
- with self.assertLogs(level=WARNING):
- self.assertIs(instrumentor.uninstrument(), None)
-
- def test_singleton(self):
- self.assertIs(self.Instrumentor(), self.Instrumentor())
diff --git a/opentelemetry-instrumentation/tests/test_propagators.py b/opentelemetry-instrumentation/tests/test_propagators.py
deleted file mode 100644
index 62461aafa97..00000000000
--- a/opentelemetry-instrumentation/tests/test_propagators.py
+++ /dev/null
@@ -1,80 +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.
-
-# pylint: disable=protected-access
-
-from opentelemetry import trace
-from opentelemetry.instrumentation import propagators
-from opentelemetry.instrumentation.propagators import (
- DictHeaderSetter,
- TraceResponsePropagator,
- get_global_response_propagator,
- set_global_response_propagator,
-)
-from opentelemetry.test.test_base import TestBase
-
-
-class TestGlobals(TestBase):
- def test_get_set(self):
- original = propagators._RESPONSE_PROPAGATOR
-
- propagators._RESPONSE_PROPAGATOR = None
- self.assertIsNone(get_global_response_propagator())
-
- prop = TraceResponsePropagator()
- set_global_response_propagator(prop)
- self.assertIs(prop, get_global_response_propagator())
-
- propagators._RESPONSE_PROPAGATOR = original
-
-
-class TestDictHeaderSetter(TestBase):
- def test_simple(self):
- setter = DictHeaderSetter()
- carrier = {}
- setter.set(carrier, "kk", "vv")
- self.assertIn("kk", carrier)
- self.assertEqual(carrier["kk"], "vv")
-
- def test_append(self):
- setter = DictHeaderSetter()
- carrier = {"kk": "old"}
- setter.set(carrier, "kk", "vv")
- self.assertIn("kk", carrier)
- self.assertEqual(carrier["kk"], "old, vv")
-
-
-class TestTraceResponsePropagator(TestBase):
- def test_inject(self):
- span = trace.NonRecordingSpan(
- trace.SpanContext(
- trace_id=1,
- span_id=2,
- is_remote=False,
- trace_flags=trace.DEFAULT_TRACE_OPTIONS,
- trace_state=trace.DEFAULT_TRACE_STATE,
- ),
- )
-
- ctx = trace.set_span_in_context(span)
- prop = TraceResponsePropagator()
- carrier = {}
- prop.inject(carrier, ctx)
- self.assertEqual(
- carrier["Access-Control-Expose-Headers"], "traceresponse"
- )
- self.assertEqual(
- carrier["traceresponse"],
- "00-00000000000000000000000000000001-0000000000000002-00",
- )
diff --git a/opentelemetry-instrumentation/tests/test_run.py b/opentelemetry-instrumentation/tests/test_run.py
deleted file mode 100644
index 9fd3a21711e..00000000000
--- a/opentelemetry-instrumentation/tests/test_run.py
+++ /dev/null
@@ -1,118 +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.
-# type: ignore
-
-from os import environ, getcwd
-from os.path import abspath, dirname, pathsep
-from unittest import TestCase
-from unittest.mock import patch
-
-from opentelemetry.environment_variables import OTEL_TRACES_EXPORTER
-from opentelemetry.instrumentation import auto_instrumentation
-
-
-class TestRun(TestCase):
- auto_instrumentation_path = dirname(abspath(auto_instrumentation.__file__))
-
- @classmethod
- def setUpClass(cls):
- cls.execl_patcher = patch(
- "opentelemetry.instrumentation.auto_instrumentation.execl"
- )
- cls.which_patcher = patch(
- "opentelemetry.instrumentation.auto_instrumentation.which"
- )
-
- cls.execl_patcher.start()
- cls.which_patcher.start()
-
- @classmethod
- def tearDownClass(cls):
- cls.execl_patcher.stop()
- cls.which_patcher.stop()
-
- @patch("sys.argv", ["instrument", ""])
- @patch.dict("os.environ", {"PYTHONPATH": ""})
- def test_empty(self):
- auto_instrumentation.run()
- self.assertEqual(
- environ["PYTHONPATH"],
- pathsep.join([self.auto_instrumentation_path, getcwd()]),
- )
-
- @patch("sys.argv", ["instrument", ""])
- @patch.dict("os.environ", {"PYTHONPATH": "abc"})
- def test_non_empty(self):
- auto_instrumentation.run()
- self.assertEqual(
- environ["PYTHONPATH"],
- pathsep.join([self.auto_instrumentation_path, getcwd(), "abc"]),
- )
-
- @patch("sys.argv", ["instrument", ""])
- @patch.dict(
- "os.environ",
- {"PYTHONPATH": pathsep.join(["abc", auto_instrumentation_path])},
- )
- def test_after_path(self):
- auto_instrumentation.run()
- self.assertEqual(
- environ["PYTHONPATH"],
- pathsep.join([self.auto_instrumentation_path, getcwd(), "abc"]),
- )
-
- @patch("sys.argv", ["instrument", ""])
- @patch.dict(
- "os.environ",
- {
- "PYTHONPATH": pathsep.join(
- [auto_instrumentation_path, "abc", auto_instrumentation_path]
- )
- },
- )
- def test_single_path(self):
- auto_instrumentation.run()
- self.assertEqual(
- environ["PYTHONPATH"],
- pathsep.join([self.auto_instrumentation_path, getcwd(), "abc"]),
- )
-
-
-class TestExecl(TestCase):
- @patch("sys.argv", ["1", "2", "3"])
- @patch("opentelemetry.instrumentation.auto_instrumentation.which")
- @patch("opentelemetry.instrumentation.auto_instrumentation.execl")
- def test_execl(
- self, mock_execl, mock_which
- ): # pylint: disable=no-self-use
- mock_which.configure_mock(**{"return_value": "python"})
-
- auto_instrumentation.run()
-
- mock_execl.assert_called_with("python", "python", "3")
-
-
-class TestArgs(TestCase):
- @patch("opentelemetry.instrumentation.auto_instrumentation.execl")
- def test_exporter(self, _): # pylint: disable=no-self-use
- with patch("sys.argv", ["instrument", "2"]):
- auto_instrumentation.run()
- self.assertIsNone(environ.get(OTEL_TRACES_EXPORTER))
-
- with patch(
- "sys.argv",
- ["instrument", "--traces_exporter", "jaeger", "1", "2"],
- ):
- auto_instrumentation.run()
- self.assertEqual(environ.get(OTEL_TRACES_EXPORTER), "jaeger")
diff --git a/opentelemetry-instrumentation/tests/test_utils.py b/opentelemetry-instrumentation/tests/test_utils.py
deleted file mode 100644
index e5246335c9f..00000000000
--- a/opentelemetry-instrumentation/tests/test_utils.py
+++ /dev/null
@@ -1,57 +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.
-
-from http import HTTPStatus
-
-from opentelemetry.instrumentation.utils import http_status_to_status_code
-from opentelemetry.test.test_base import TestBase
-from opentelemetry.trace import StatusCode
-
-
-class TestUtils(TestBase):
- # See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/http.md#status
- def test_http_status_to_status_code(self):
- for status_code, expected in (
- (HTTPStatus.OK, StatusCode.UNSET),
- (HTTPStatus.ACCEPTED, StatusCode.UNSET),
- (HTTPStatus.IM_USED, StatusCode.UNSET),
- (HTTPStatus.MULTIPLE_CHOICES, StatusCode.UNSET),
- (HTTPStatus.BAD_REQUEST, StatusCode.ERROR),
- (HTTPStatus.UNAUTHORIZED, StatusCode.ERROR),
- (HTTPStatus.FORBIDDEN, StatusCode.ERROR),
- (HTTPStatus.NOT_FOUND, StatusCode.ERROR),
- (
- HTTPStatus.UNPROCESSABLE_ENTITY,
- StatusCode.ERROR,
- ),
- (
- HTTPStatus.TOO_MANY_REQUESTS,
- StatusCode.ERROR,
- ),
- (HTTPStatus.NOT_IMPLEMENTED, StatusCode.ERROR),
- (HTTPStatus.SERVICE_UNAVAILABLE, StatusCode.ERROR),
- (
- HTTPStatus.GATEWAY_TIMEOUT,
- StatusCode.ERROR,
- ),
- (
- HTTPStatus.HTTP_VERSION_NOT_SUPPORTED,
- StatusCode.ERROR,
- ),
- (600, StatusCode.ERROR),
- (99, StatusCode.ERROR),
- ):
- with self.subTest(status_code=status_code):
- actual = http_status_to_status_code(int(status_code))
- self.assertEqual(actual, expected, status_code)
diff --git a/scripts/build.sh b/scripts/build.sh
index 2f40f1a0034..63faa001bc3 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/ opentelemetry-distro/ opentelemetry-semantic-conventions/ exporter/*/ shim/*/ propagator/*/; do
+ for d in opentelemetry-api/ opentelemetry-sdk/ opentelemetry-proto/ opentelemetry-semantic-conventions/ exporter/*/ shim/*/ propagator/*/; do
(
echo "building $d"
cd "$d"
diff --git a/tox.ini b/tox.ini
index 0259cc9bf81..5398bdd80e0 100644
--- a/tox.ini
+++ b/tox.ini
@@ -13,9 +13,6 @@ envlist =
py3{6,7,8,9}-opentelemetry-sdk
pypy3-opentelemetry-sdk
- py3{6,7,8,9}-opentelemetry-instrumentation
- pypy3-opentelemetry-instrumentation
-
py3{6,7,8,9}-opentelemetry-semantic-conventions
pypy3-opentelemetry-semantic-conventions
@@ -23,9 +20,6 @@ envlist =
py3{6,7,8,9}-opentelemetry-getting-started
pypy3-opentelemetry-getting-started
- py3{6,7,8,9}-opentelemetry-distro
- pypy3-opentelemetry-distro
-
py3{6,7,8,9}-opentelemetry-opentracing-shim
pypy3-opentelemetry-opentracing-shim
@@ -92,10 +86,8 @@ changedir =
sdk: opentelemetry-sdk/tests
protobuf: opentelemetry-proto/tests
semantic-conventions: opentelemetry-semantic-conventions/tests
- instrumentation: opentelemetry-instrumentation/tests
getting-started: docs/getting_started/tests
opentracing-shim: shim/opentelemetry-opentracing-shim/tests
- distro: opentelemetry-distro/tests
exporter-jaeger-combined: exporter/opentelemetry-exporter-jaeger/tests
exporter-jaeger-proto-grpc: exporter/opentelemetry-exporter-jaeger-proto-grpc/tests
@@ -116,17 +108,13 @@ commands_pre =
py3{6,7,8,9}: python -m pip install -U pip setuptools wheel
; Install common packages for all the tests. These are not needed in all the
; cases but it saves a lot of boilerplate in this file.
- opentelemetry: pip install {toxinidir}/opentelemetry-api {toxinidir}/opentelemetry-semantic-conventions {toxinidir}/opentelemetry-instrumentation {toxinidir}/opentelemetry-sdk {toxinidir}/tests/util
-
- sdk: pip install {toxinidir}/opentelemetry-instrumentation
- opentracing-shim: pip install {toxinidir}/opentelemetry-instrumentation
+ opentelemetry: pip install {toxinidir}/opentelemetry-api {toxinidir}/opentelemetry-semantic-conventions {toxinidir}/opentelemetry-sdk {toxinidir}/tests/util
protobuf: pip install {toxinidir}/opentelemetry-proto
- distro: pip install {toxinidir}/opentelemetry-distro
- instrumentation: pip install {toxinidir}/opentelemetry-instrumentation
- getting-started: pip install requests==2.26.0 flask==2.0.1 -e {toxinidir}/opentelemetry-instrumentation
+ getting-started: pip install requests==2.26.0 flask==2.0.1
getting-started: pip install -e "{env:CONTRIB_REPO}#egg=opentelemetry-util-http&subdirectory=util/opentelemetry-util-http"
+ getting-started: pip install -e "{env:CONTRIB_REPO}#egg=opentelemetry-instrumentation&subdirectory=opentelemetry-instrumentation"
getting-started: pip install -e "{env:CONTRIB_REPO}#egg=opentelemetry-instrumentation-requests&subdirectory=instrumentation/opentelemetry-instrumentation-requests"
getting-started: pip install -e "{env:CONTRIB_REPO}#egg=opentelemetry-instrumentation-wsgi&subdirectory=instrumentation/opentelemetry-instrumentation-wsgi"
getting-started: pip install -e "{env:CONTRIB_REPO}#egg=opentelemetry-instrumentation-flask&subdirectory=instrumentation/opentelemetry-instrumentation-flask"
@@ -145,9 +133,7 @@ commands_pre =
exporter-otlp-proto-http: pip install {toxinidir}/exporter/opentelemetry-exporter-otlp-proto-http
exporter-jaeger-combined: pip install {toxinidir}/exporter/opentelemetry-exporter-jaeger-proto-grpc {toxinidir}/exporter/opentelemetry-exporter-jaeger-thrift {toxinidir}/exporter/opentelemetry-exporter-jaeger
- exporter-jaeger-combined: pip install {toxinidir}/opentelemetry-instrumentation
exporter-jaeger-proto-grpc: pip install {toxinidir}/exporter/opentelemetry-exporter-jaeger-proto-grpc
- exporter-jaeger-proto-grpc: pip install {toxinidir}/opentelemetry-instrumentation
exporter-jaeger-thrift: pip install {toxinidir}/exporter/opentelemetry-exporter-jaeger-thrift
opentracing-shim: pip install {toxinidir}/opentelemetry-sdk
@@ -204,7 +190,6 @@ deps =
commands_pre =
python -m pip install -e {toxinidir}/opentelemetry-api[test]
python -m pip install -e {toxinidir}/opentelemetry-semantic-conventions[test]
- python -m pip install -e {toxinidir}/opentelemetry-instrumentation[test]
python -m pip install -e {toxinidir}/opentelemetry-sdk[test]
python -m pip install -e {toxinidir}/opentelemetry-proto[test]
python -m pip install -e {toxinidir}/tests/util[test]
@@ -221,7 +206,6 @@ commands_pre =
python -m pip install -e {toxinidir}/exporter/opentelemetry-exporter-zipkin[test]
python -m pip install -e {toxinidir}/propagator/opentelemetry-propagator-b3[test]
python -m pip install -e {toxinidir}/propagator/opentelemetry-propagator-jaeger[test]
- python -m pip install -e {toxinidir}/opentelemetry-distro[test]
commands =
python scripts/eachdist.py lint --check-only
@@ -234,9 +218,6 @@ deps =
changedir = docs
-commands-pre =
- python -m pip install {toxinidir}/opentelemetry-instrumentation
-
commands =
sphinx-build -E -a -W -b html -T . _build/html
@@ -252,9 +233,9 @@ deps =
commands_pre =
pip install -e {toxinidir}/opentelemetry-api \
-e {toxinidir}/opentelemetry-semantic-conventions \
- -e {toxinidir}/opentelemetry-instrumentation \
-e {toxinidir}/opentelemetry-sdk \
-e "{env:CONTRIB_REPO}#egg=opentelemetry-util-http&subdirectory=util/opentelemetry-util-http" \
+ -e "{env:CONTRIB_REPO}#egg=opentelemetry-instrumentation&subdirectory=opentelemetry-instrumentation" \
-e "{env:CONTRIB_REPO}#egg=opentelemetry-instrumentation-requests&subdirectory=instrumentation/opentelemetry-instrumentation-requests" \
-e "{env:CONTRIB_REPO}#egg=opentelemetry-instrumentation-wsgi&subdirectory=instrumentation/opentelemetry-instrumentation-wsgi"
@@ -272,7 +253,6 @@ changedir =
commands_pre =
pip install -e {toxinidir}/opentelemetry-api \
-e {toxinidir}/opentelemetry-semantic-conventions \
- -e {toxinidir}/opentelemetry-instrumentation \
-e {toxinidir}/opentelemetry-sdk \
-e {toxinidir}/tests/util \
-e {toxinidir}/exporter/opentelemetry-exporter-opencensus \