From af972a07a9518a94e9cecd2b7c0429ff71884a59 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 3 Nov 2022 13:26:58 -0700 Subject: [PATCH 01/28] Create RELEASING.md, Update version to 1.15.0.dev/0.36b0.dev (#1429) --- .github/workflows/test.yml | 2 +- CHANGELOG.md | 2 + RELEASING.md | 102 ++++++++++++++++++ _template/version.py | 2 +- eachdist.ini | 4 +- .../prometheus_remote_write/version.py | 2 +- .../pyproject.toml | 2 +- .../exporter/richconsole/version.py | 2 +- .../pyproject.toml | 2 +- .../instrumentation/aio_pika/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/aiohttp_client/version.py | 2 +- .../pyproject.toml | 8 +- .../instrumentation/aiopg/version.py | 2 +- .../pyproject.toml | 8 +- .../instrumentation/asgi/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/asyncpg/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/aws_lambda/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/boto/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/boto3sqs/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/botocore/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/celery/version.py | 2 +- .../confluent_kafka/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/dbapi/version.py | 2 +- .../pyproject.toml | 12 +-- .../instrumentation/django/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/elasticsearch/version.py | 2 +- .../pyproject.toml | 10 +- .../instrumentation/falcon/version.py | 2 +- .../pyproject.toml | 10 +- .../instrumentation/fastapi/version.py | 2 +- .../pyproject.toml | 10 +- .../instrumentation/flask/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/grpc/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/httpx/version.py | 2 +- .../pyproject.toml | 4 +- .../instrumentation/jinja2/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/kafka/version.py | 2 +- .../pyproject.toml | 4 +- .../instrumentation/logging/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/mysql/version.py | 2 +- .../pyproject.toml | 2 +- .../instrumentation/pika/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/psycopg2/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/pymemcache/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/pymongo/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/pymysql/version.py | 2 +- .../pyproject.toml | 10 +- .../instrumentation/pyramid/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/redis/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/remoulade/version.py | 2 +- .../pyproject.toml | 8 +- .../instrumentation/requests/version.py | 2 +- .../pyproject.toml | 4 +- .../instrumentation/sklearn/version.py | 2 +- .../pyproject.toml | 4 +- .../instrumentation/sqlalchemy/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/sqlite3/version.py | 2 +- .../pyproject.toml | 10 +- .../instrumentation/starlette/version.py | 2 +- .../pyproject.toml | 2 +- .../instrumentation/system_metrics/version.py | 2 +- .../pyproject.toml | 8 +- .../instrumentation/tornado/version.py | 2 +- .../pyproject.toml | 8 +- .../instrumentation/urllib/version.py | 2 +- .../pyproject.toml | 8 +- .../instrumentation/urllib3/version.py | 2 +- .../pyproject.toml | 8 +- .../instrumentation/wsgi/version.py | 2 +- .../pyproject.toml | 82 +++++++------- .../contrib-instrumentations/version.py | 2 +- opentelemetry-distro/pyproject.toml | 4 +- .../src/opentelemetry/distro/version.py | 2 +- .../instrumentation/bootstrap_gen.py | 82 +++++++------- .../opentelemetry/instrumentation/version.py | 2 +- .../propagators/ot_trace/version.py | 2 +- .../src/opentelemetry/util/http/version.py | 2 +- 97 files changed, 371 insertions(+), 267 deletions(-) create mode 100644 RELEASING.md diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 617d13ff8b..fa4244bc66 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,7 +6,7 @@ on: - 'release/*' pull_request: env: - CORE_REPO_SHA: 2ac9e646af8d6420f13e7e3b2508586f3efb435a + CORE_REPO_SHA: a97b3a70e852f77c6a25c69192fc506c127cdaaa jobs: build: diff --git a/CHANGELOG.md b/CHANGELOG.md index 896497a21c..f9dd4c9b99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +## Version 1.14.0/0.35b0 (2022-11-03) + ### Deprecated - `opentelemetry-distro` Deprecate `otlp_proto_grpc` and `otlp_proto_http` in favor of using diff --git a/RELEASING.md b/RELEASING.md new file mode 100644 index 0000000000..bf7692229c --- /dev/null +++ b/RELEASING.md @@ -0,0 +1,102 @@ +# Releasing OpenTelemetry Packages (for maintainers only) +This document explains how to publish all OT modules at version x.y.z. Ensure that you’re following semver when choosing a version number. + +Release Process: +* [Checkout a clean repo](#checkout-a-clean-repo) +* [Update versions](#update-versions) +* [Create a new branch](#create-a-new-branch) +* [Open a Pull Request](#open-a-pull-request) +* [Create a Release](#Create-a-Release) +* [Move stable tag](#Move-stable-tag) +* [Update main](#Update-main) +* [Check PyPI](#Check-PyPI) +* [Troubleshooting](#troubleshooting) + +## Checkout a clean repo +To avoid pushing untracked changes, check out the repo in a new dir + +## Update versions +The update of the version information relies on the information in eachdist.ini to identify which packages are stable, prerelease or +experimental. Update the desired version there to begin the release process. + +## Create a new branch +The following script does the following: +- update main locally +- creates a new release branch `release/` +- updates version and changelog files +- commits the change + +*NOTE: This script was run by a GitHub Action but required the Action bot to be excluded from the CLA check, which it currently is not.* + +```bash +./scripts/prepare_release.sh +``` + +## Open a Pull Request + +The PR should be opened from the `release/` branch created as part of running `prepare_release.sh` in the steps above. + +## Create a Release + +- Create the GH release from the main branch, using a new tag for this micro version, e.g. `v0.7.0` +- Copy the changelogs from all packages that changed into the release notes (and reformat to remove hard line wraps) + + +## Check PyPI + +This should be handled automatically on release by the [publish action](https://github.com/open-telemetry/opentelemetry-python/blob/main/.github/workflows/publish.yml). + +- Check the [action logs](https://github.com/open-telemetry/opentelemetry-python/actions?query=workflow%3APublish) to make sure packages have been uploaded to PyPI +- Check the release history (e.g. https://pypi.org/project/opentelemetry-api/#history) on PyPI + +If for some reason the action failed, see [Publish failed](#publish-failed) below + +## Move stable tag + +This will ensure the docs are pointing at the stable release. + +```bash +git tag -d stable +git tag stable +git push --delete origin tagname +git push origin stable +``` + +To validate this worked, ensure the stable build has run successfully: https://readthedocs.org/projects/opentelemetry-python/builds/. If the build has not run automatically, it can be manually trigger via the readthedocs interface. + +## Update main + +Ensure the version and changelog updates have been applied to main. Update the versions in eachdist.ini once again this time to include the `.dev0` tag and +run eachdist once again: +```bash +./scripts/eachdist.py update_versions --versions stable,prerelease +``` + +If the diff includes significant changes, create a pull request to commit the changes and once the changes are merged, click the "Run workflow" button for the Update [OpenTelemetry Website Docs](https://github.com/open-telemetry/opentelemetry-python/actions/workflows/docs-update.yml) GitHub Action. + +## Hotfix procedure + +A `hotfix` is defined as a small change developed to correct a bug that should be released as quickly as possible. Due to the nature of hotfixes, they usually will only affect one or a few packages. Therefore, it usually is not necessary to go through the entire release process outlined above for hotfixes. Follow the below steps how to release a hotfix: + +1. Identify the packages that are affected by the bug. Make the changes to those packages, merging to `main`, as quickly as possible. +2. On your local machine, remove the `dev0` tags from the version number and increment the patch version number. +3. On your local machine, update `CHANGELOG.md` with the date of the hotfix change. +4. With administrator privileges for PyPi, manually publish the affected packages. + a. Install [twine](https://pypi.org/project/twine/) + b. Navigate to where the `setup.py` file exists for the package you want to publish. + c. Run `python setup.py sdist bdist_wheel`. You may have to install [wheel](https://pypi.org/project/wheel/) as well. + d. Validate your built distributions by running `twine check dist/*`. + e. Upload distributions to PyPi by running `twine upload dist/*`. +5. Note that since hotfixes are manually published, the build scripts for publish after creating a release are not run. + +## Troubleshooting + +### Publish failed + +If for some reason the action failed, do it manually: + +- Switch to the release branch (important so we don't publish packages with "dev" versions) +- Build distributions with `./scripts/build.sh` +- Delete distributions we don't want to push (e.g. `testutil`) +- Push to PyPI as `twine upload --skip-existing --verbose dist/*` +- Double check PyPI! \ No newline at end of file diff --git a/_template/version.py b/_template/version.py index af2984661c..fa69afa640 100644 --- a/_template/version.py +++ b/_template/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/eachdist.ini b/eachdist.ini index 80ce05dc11..aae88dc118 100644 --- a/eachdist.ini +++ b/eachdist.ini @@ -16,7 +16,7 @@ sortfirst= ext/* [stable] -version=1.14.0 +version=1.15.0.dev packages= opentelemetry-sdk @@ -34,7 +34,7 @@ packages= opentelemetry-api [prerelease] -version=0.35b0 +version=0.36b0.dev packages= all diff --git a/exporter/opentelemetry-exporter-prometheus-remote-write/src/opentelemetry/exporter/prometheus_remote_write/version.py b/exporter/opentelemetry-exporter-prometheus-remote-write/src/opentelemetry/exporter/prometheus_remote_write/version.py index af2984661c..fa69afa640 100644 --- a/exporter/opentelemetry-exporter-prometheus-remote-write/src/opentelemetry/exporter/prometheus_remote_write/version.py +++ b/exporter/opentelemetry-exporter-prometheus-remote-write/src/opentelemetry/exporter/prometheus_remote_write/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/exporter/opentelemetry-exporter-richconsole/pyproject.toml b/exporter/opentelemetry-exporter-richconsole/pyproject.toml index 685d160fce..a30810af42 100644 --- a/exporter/opentelemetry-exporter-richconsole/pyproject.toml +++ b/exporter/opentelemetry-exporter-richconsole/pyproject.toml @@ -27,7 +27,7 @@ classifiers = [ dependencies = [ "opentelemetry-api ~= 1.12", "opentelemetry-sdk ~= 1.12", - "opentelemetry-semantic-conventions == 0.35b0", + "opentelemetry-semantic-conventions == 0.36b0.dev", "rich>=10.0.0", ] diff --git a/exporter/opentelemetry-exporter-richconsole/src/opentelemetry/exporter/richconsole/version.py b/exporter/opentelemetry-exporter-richconsole/src/opentelemetry/exporter/richconsole/version.py index af2984661c..fa69afa640 100644 --- a/exporter/opentelemetry-exporter-richconsole/src/opentelemetry/exporter/richconsole/version.py +++ b/exporter/opentelemetry-exporter-richconsole/src/opentelemetry/exporter/richconsole/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-aio-pika/pyproject.toml b/instrumentation/opentelemetry-instrumentation-aio-pika/pyproject.toml index dec12152ff..b9c7c872fb 100644 --- a/instrumentation/opentelemetry-instrumentation-aio-pika/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-aio-pika/pyproject.toml @@ -35,7 +35,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-aio-pika[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", "pytest", "wrapt >= 1.0.0, < 2.0.0", ] diff --git a/instrumentation/opentelemetry-instrumentation-aio-pika/src/opentelemetry/instrumentation/aio_pika/version.py b/instrumentation/opentelemetry-instrumentation-aio-pika/src/opentelemetry/instrumentation/aio_pika/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-aio-pika/src/opentelemetry/instrumentation/aio_pika/version.py +++ b/instrumentation/opentelemetry-instrumentation-aio-pika/src/opentelemetry/instrumentation/aio_pika/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-aiohttp-client/pyproject.toml b/instrumentation/opentelemetry-instrumentation-aiohttp-client/pyproject.toml index f9ae879bb2..1f57d376fe 100644 --- a/instrumentation/opentelemetry-instrumentation-aiohttp-client/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-aiohttp-client/pyproject.toml @@ -26,9 +26,9 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", - "opentelemetry-util-http == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-util-http == 0.36b0.dev", "wrapt >= 1.0.0, < 2.0.0", ] diff --git a/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/version.py b/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/version.py index 071c0794c8..6021444b6c 100644 --- a/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/version.py +++ b/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-aiopg/pyproject.toml b/instrumentation/opentelemetry-instrumentation-aiopg/pyproject.toml index de2aeb9bc6..8fb7d27cfd 100644 --- a/instrumentation/opentelemetry-instrumentation-aiopg/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-aiopg/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-instrumentation-dbapi == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-instrumentation-dbapi == 0.36b0.dev", "wrapt >= 1.0.0, < 2.0.0", ] @@ -37,8 +37,8 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-aiopg[instruments]", - "opentelemetry-semantic-conventions == 0.35b0", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py b/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py +++ b/instrumentation/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.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-asgi/pyproject.toml b/instrumentation/opentelemetry-instrumentation-asgi/pyproject.toml index 73a3405e27..5e4f280ecf 100644 --- a/instrumentation/opentelemetry-instrumentation-asgi/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-asgi/pyproject.toml @@ -27,9 +27,9 @@ classifiers = [ dependencies = [ "asgiref ~= 3.0", "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", - "opentelemetry-util-http == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-util-http == 0.36b0.dev", ] [project.optional-dependencies] @@ -38,7 +38,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-asgi[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.urls] diff --git a/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/version.py b/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/version.py +++ b/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-asyncpg/pyproject.toml b/instrumentation/opentelemetry-instrumentation-asyncpg/pyproject.toml index 53632fe086..5452a77535 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncpg/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-asyncpg/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-asyncpg[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/version.py b/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/version.py +++ b/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-aws-lambda/pyproject.toml b/instrumentation/opentelemetry-instrumentation-aws-lambda/pyproject.toml index 73015d3d3b..538b6d7fee 100644 --- a/instrumentation/opentelemetry-instrumentation-aws-lambda/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-aws-lambda/pyproject.toml @@ -22,15 +22,15 @@ classifiers = [ "Programming Language :: Python :: 3.8", ] dependencies = [ - "opentelemetry-instrumentation == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", "opentelemetry-propagator-aws-xray == 1.0.1", - "opentelemetry-semantic-conventions == 0.35b0", + "opentelemetry-semantic-conventions == 0.36b0.dev", ] [project.optional-dependencies] instruments = [] test = [ - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.urls] diff --git a/instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/version.py b/instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/version.py +++ b/instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-boto/pyproject.toml b/instrumentation/opentelemetry-instrumentation-boto/pyproject.toml index d97d82fce4..0f1126b511 100644 --- a/instrumentation/opentelemetry-instrumentation-boto/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-boto/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", ] [project.optional-dependencies] @@ -38,7 +38,7 @@ test = [ "opentelemetry-instrumentation-boto[instruments]", "markupsafe==2.0.1", "moto~=2.0", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/version.py b/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/version.py +++ b/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-boto3sqs/pyproject.toml b/instrumentation/opentelemetry-instrumentation-boto3sqs/pyproject.toml index da8e652321..220cc1572d 100644 --- a/instrumentation/opentelemetry-instrumentation-boto3sqs/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-boto3sqs/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", "wrapt >= 1.0.0, < 2.0.0", ] @@ -37,7 +37,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-boto3sqs[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-boto3sqs/src/opentelemetry/instrumentation/boto3sqs/version.py b/instrumentation/opentelemetry-instrumentation-boto3sqs/src/opentelemetry/instrumentation/boto3sqs/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-boto3sqs/src/opentelemetry/instrumentation/boto3sqs/version.py +++ b/instrumentation/opentelemetry-instrumentation-boto3sqs/src/opentelemetry/instrumentation/boto3sqs/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-botocore/pyproject.toml b/instrumentation/opentelemetry-instrumentation-botocore/pyproject.toml index 4edf320bd7..a27328300d 100644 --- a/instrumentation/opentelemetry-instrumentation-botocore/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-botocore/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", ] [project.optional-dependencies] @@ -38,7 +38,7 @@ test = [ "opentelemetry-instrumentation-botocore[instruments]", "markupsafe==2.0.1", "moto[all] ~= 2.2.6", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/version.py b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/version.py +++ b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-celery/pyproject.toml b/instrumentation/opentelemetry-instrumentation-celery/pyproject.toml index ded5ae0640..0c2e9207e4 100644 --- a/instrumentation/opentelemetry-instrumentation-celery/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-celery/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-celery[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", "importlib-metadata==4.13.0", "pytest", ] diff --git a/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/version.py b/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/version.py +++ b/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka/version.py b/instrumentation/opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka/version.py +++ b/instrumentation/opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-dbapi/pyproject.toml b/instrumentation/opentelemetry-instrumentation-dbapi/pyproject.toml index 5224b44cf6..91e9ced419 100644 --- a/instrumentation/opentelemetry-instrumentation-dbapi/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-dbapi/pyproject.toml @@ -26,15 +26,15 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", "wrapt >= 1.0.0, < 2.0.0", ] [project.optional-dependencies] instruments = [] test = [ - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.urls] diff --git a/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/version.py b/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/version.py index b49604efc6..ab0deff1e3 100644 --- a/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/version.py +++ b/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/version.py @@ -12,6 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" _instruments = tuple() diff --git a/instrumentation/opentelemetry-instrumentation-django/pyproject.toml b/instrumentation/opentelemetry-instrumentation-django/pyproject.toml index 918fd22f86..6777362c1a 100644 --- a/instrumentation/opentelemetry-instrumentation-django/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-django/pyproject.toml @@ -26,22 +26,22 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-instrumentation-wsgi == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", - "opentelemetry-util-http == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-instrumentation-wsgi == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-util-http == 0.36b0.dev", ] [project.optional-dependencies] asgi = [ - "opentelemetry-instrumentation-asgi == 0.35b0", + "opentelemetry-instrumentation-asgi == 0.36b0.dev", ] instruments = [ "django >= 1.10", ] test = [ "opentelemetry-instrumentation-django[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/version.py b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/version.py +++ b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-elasticsearch/pyproject.toml b/instrumentation/opentelemetry-instrumentation-elasticsearch/pyproject.toml index 96984a00eb..b98333d886 100644 --- a/instrumentation/opentelemetry-instrumentation-elasticsearch/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-elasticsearch/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", "wrapt >= 1.0.0, < 2.0.0", ] @@ -38,7 +38,7 @@ instruments = [ test = [ "opentelemetry-instrumentation-elasticsearch[instruments]", "elasticsearch-dsl >= 2.0", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/version.py b/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/version.py +++ b/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-falcon/pyproject.toml b/instrumentation/opentelemetry-instrumentation-falcon/pyproject.toml index 583f0e7895..56cdbaae5c 100644 --- a/instrumentation/opentelemetry-instrumentation-falcon/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-falcon/pyproject.toml @@ -26,10 +26,10 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-instrumentation-wsgi == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", - "opentelemetry-util-http == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-instrumentation-wsgi == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-util-http == 0.36b0.dev", "packaging >= 20.0", ] @@ -39,7 +39,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-falcon[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", "parameterized == 0.7.4", ] diff --git a/instrumentation/opentelemetry-instrumentation-falcon/src/opentelemetry/instrumentation/falcon/version.py b/instrumentation/opentelemetry-instrumentation-falcon/src/opentelemetry/instrumentation/falcon/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-falcon/src/opentelemetry/instrumentation/falcon/version.py +++ b/instrumentation/opentelemetry-instrumentation-falcon/src/opentelemetry/instrumentation/falcon/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-fastapi/pyproject.toml b/instrumentation/opentelemetry-instrumentation-fastapi/pyproject.toml index a58126a112..aedda18cb9 100644 --- a/instrumentation/opentelemetry-instrumentation-fastapi/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-fastapi/pyproject.toml @@ -26,10 +26,10 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-instrumentation-asgi == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", - "opentelemetry-util-http == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-instrumentation-asgi == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-util-http == 0.36b0.dev", ] [project.optional-dependencies] @@ -38,7 +38,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-fastapi[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", "requests ~= 2.23.0", # needed for testclient ] diff --git a/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py b/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py +++ b/instrumentation/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.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-flask/pyproject.toml b/instrumentation/opentelemetry-instrumentation-flask/pyproject.toml index a16da93ad6..f0b846e241 100644 --- a/instrumentation/opentelemetry-instrumentation-flask/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-flask/pyproject.toml @@ -26,10 +26,10 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-instrumentation-wsgi == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", - "opentelemetry-util-http == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-instrumentation-wsgi == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-util-http == 0.36b0.dev", ] [project.optional-dependencies] @@ -39,7 +39,7 @@ instruments = [ test = [ "opentelemetry-instrumentation-flask[instruments]", "markupsafe==2.0.1", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/version.py b/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/version.py +++ b/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-grpc/pyproject.toml b/instrumentation/opentelemetry-instrumentation-grpc/pyproject.toml index 88a8d7718d..28ea26bbef 100644 --- a/instrumentation/opentelemetry-instrumentation-grpc/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-grpc/pyproject.toml @@ -26,9 +26,9 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", "opentelemetry-sdk ~= 1.12", - "opentelemetry-semantic-conventions == 0.35b0", + "opentelemetry-semantic-conventions == 0.36b0.dev", "wrapt >= 1.0.0, < 2.0.0", ] @@ -39,7 +39,7 @@ instruments = [ test = [ "opentelemetry-instrumentation-grpc[instruments]", "opentelemetry-sdk ~= 1.12", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", "protobuf ~= 3.13", ] diff --git a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py +++ b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-httpx/pyproject.toml b/instrumentation/opentelemetry-instrumentation-httpx/pyproject.toml index 9369ca648e..873b40e3a8 100644 --- a/instrumentation/opentelemetry-instrumentation-httpx/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-httpx/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", ] [project.optional-dependencies] @@ -37,7 +37,7 @@ instruments = [ test = [ "opentelemetry-instrumentation-httpx[instruments]", "opentelemetry-sdk ~= 1.12", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-httpx/src/opentelemetry/instrumentation/httpx/version.py b/instrumentation/opentelemetry-instrumentation-httpx/src/opentelemetry/instrumentation/httpx/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-httpx/src/opentelemetry/instrumentation/httpx/version.py +++ b/instrumentation/opentelemetry-instrumentation-httpx/src/opentelemetry/instrumentation/httpx/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-jinja2/pyproject.toml b/instrumentation/opentelemetry-instrumentation-jinja2/pyproject.toml index cd54e8d5e4..1de00f3dca 100644 --- a/instrumentation/opentelemetry-instrumentation-jinja2/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-jinja2/pyproject.toml @@ -25,7 +25,7 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", "wrapt >= 1.0.0, < 2.0.0", ] @@ -36,7 +36,7 @@ instruments = [ test = [ "opentelemetry-instrumentation-jinja2[instruments]", "markupsafe==2.0.1", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/version.py b/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/version.py +++ b/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-kafka-python/pyproject.toml b/instrumentation/opentelemetry-instrumentation-kafka-python/pyproject.toml index da311be47d..dc158ffd76 100644 --- a/instrumentation/opentelemetry-instrumentation-kafka-python/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-kafka-python/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.5", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-kafka-python[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", "wrapt >= 1.0.0, < 2.0.0", ] diff --git a/instrumentation/opentelemetry-instrumentation-kafka-python/src/opentelemetry/instrumentation/kafka/version.py b/instrumentation/opentelemetry-instrumentation-kafka-python/src/opentelemetry/instrumentation/kafka/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-kafka-python/src/opentelemetry/instrumentation/kafka/version.py +++ b/instrumentation/opentelemetry-instrumentation-kafka-python/src/opentelemetry/instrumentation/kafka/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-logging/pyproject.toml b/instrumentation/opentelemetry-instrumentation-logging/pyproject.toml index 67504f03a7..a6f3c377c0 100644 --- a/instrumentation/opentelemetry-instrumentation-logging/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-logging/pyproject.toml @@ -25,13 +25,13 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", ] [project.optional-dependencies] instruments = [] test = [ - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-logging/src/opentelemetry/instrumentation/logging/version.py b/instrumentation/opentelemetry-instrumentation-logging/src/opentelemetry/instrumentation/logging/version.py index b49604efc6..ab0deff1e3 100644 --- a/instrumentation/opentelemetry-instrumentation-logging/src/opentelemetry/instrumentation/logging/version.py +++ b/instrumentation/opentelemetry-instrumentation-logging/src/opentelemetry/instrumentation/logging/version.py @@ -12,6 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" _instruments = tuple() diff --git a/instrumentation/opentelemetry-instrumentation-mysql/pyproject.toml b/instrumentation/opentelemetry-instrumentation-mysql/pyproject.toml index e6f8f32ed2..b9a49200e9 100644 --- a/instrumentation/opentelemetry-instrumentation-mysql/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-mysql/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-instrumentation-dbapi == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-instrumentation-dbapi == 0.36b0.dev", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-mysql[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/version.py b/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/version.py +++ b/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-pika/pyproject.toml b/instrumentation/opentelemetry-instrumentation-pika/pyproject.toml index c467f92572..9489c2e22c 100644 --- a/instrumentation/opentelemetry-instrumentation-pika/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-pika/pyproject.toml @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-pika[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", "pytest", "wrapt >= 1.0.0, < 2.0.0", ] diff --git a/instrumentation/opentelemetry-instrumentation-pika/src/opentelemetry/instrumentation/pika/version.py b/instrumentation/opentelemetry-instrumentation-pika/src/opentelemetry/instrumentation/pika/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-pika/src/opentelemetry/instrumentation/pika/version.py +++ b/instrumentation/opentelemetry-instrumentation-pika/src/opentelemetry/instrumentation/pika/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-psycopg2/pyproject.toml b/instrumentation/opentelemetry-instrumentation-psycopg2/pyproject.toml index 439fabaa90..e6367a494d 100644 --- a/instrumentation/opentelemetry-instrumentation-psycopg2/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-psycopg2/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-instrumentation-dbapi == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-instrumentation-dbapi == 0.36b0.dev", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-psycopg2[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/version.py b/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/version.py +++ b/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-pymemcache/pyproject.toml b/instrumentation/opentelemetry-instrumentation-pymemcache/pyproject.toml index f2c960d5c0..1e26a7d39d 100644 --- a/instrumentation/opentelemetry-instrumentation-pymemcache/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-pymemcache/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", "wrapt >= 1.0.0, < 2.0.0", ] @@ -37,7 +37,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-pymemcache[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/version.py b/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/version.py +++ b/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-pymongo/pyproject.toml b/instrumentation/opentelemetry-instrumentation-pymongo/pyproject.toml index 6792afe49b..8b7532ccaa 100644 --- a/instrumentation/opentelemetry-instrumentation-pymongo/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-pymongo/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-pymongo[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/version.py b/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/version.py +++ b/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-pymysql/pyproject.toml b/instrumentation/opentelemetry-instrumentation-pymysql/pyproject.toml index 729941369f..370bde8ecf 100644 --- a/instrumentation/opentelemetry-instrumentation-pymysql/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-pymysql/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-instrumentation-dbapi == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-instrumentation-dbapi == 0.36b0.dev", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-pymysql[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/version.py b/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/version.py +++ b/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-pyramid/pyproject.toml b/instrumentation/opentelemetry-instrumentation-pyramid/pyproject.toml index a6196df108..d9cc964cea 100644 --- a/instrumentation/opentelemetry-instrumentation-pyramid/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-pyramid/pyproject.toml @@ -26,10 +26,10 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-instrumentation-wsgi == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", - "opentelemetry-util-http == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-instrumentation-wsgi == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-util-http == 0.36b0.dev", "wrapt >= 1.0.0, < 2.0.0", ] @@ -39,7 +39,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-pyramid[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", "werkzeug == 0.16.1", ] diff --git a/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/version.py b/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/version.py +++ b/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-redis/pyproject.toml b/instrumentation/opentelemetry-instrumentation-redis/pyproject.toml index 99406f9ed5..0f43a18a75 100644 --- a/instrumentation/opentelemetry-instrumentation-redis/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-redis/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", "wrapt >= 1.12.1", ] @@ -38,7 +38,7 @@ instruments = [ test = [ "opentelemetry-instrumentation-redis[instruments]", "opentelemetry-sdk ~= 1.3", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/version.py b/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/version.py +++ b/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-remoulade/pyproject.toml b/instrumentation/opentelemetry-instrumentation-remoulade/pyproject.toml index adc0847072..7dacd47688 100644 --- a/instrumentation/opentelemetry-instrumentation-remoulade/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-remoulade/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-remoulade[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", "opentelemetry-sdk ~= 1.10" ] diff --git a/instrumentation/opentelemetry-instrumentation-remoulade/src/opentelemetry/instrumentation/remoulade/version.py b/instrumentation/opentelemetry-instrumentation-remoulade/src/opentelemetry/instrumentation/remoulade/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-remoulade/src/opentelemetry/instrumentation/remoulade/version.py +++ b/instrumentation/opentelemetry-instrumentation-remoulade/src/opentelemetry/instrumentation/remoulade/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-requests/pyproject.toml b/instrumentation/opentelemetry-instrumentation-requests/pyproject.toml index e1aefec4f7..106ef8e55b 100644 --- a/instrumentation/opentelemetry-instrumentation-requests/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-requests/pyproject.toml @@ -26,9 +26,9 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", - "opentelemetry-util-http == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-util-http == 0.36b0.dev", ] [project.optional-dependencies] @@ -38,7 +38,7 @@ instruments = [ test = [ "opentelemetry-instrumentation-requests[instruments]", "httpretty ~= 1.0", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py b/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py +++ b/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-sklearn/pyproject.toml b/instrumentation/opentelemetry-instrumentation-sklearn/pyproject.toml index ef15b96dc2..6101b05fab 100644 --- a/instrumentation/opentelemetry-instrumentation-sklearn/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-sklearn/pyproject.toml @@ -26,7 +26,7 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", ] [project.optional-dependencies] @@ -35,7 +35,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-sklearn[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-sklearn/src/opentelemetry/instrumentation/sklearn/version.py b/instrumentation/opentelemetry-instrumentation-sklearn/src/opentelemetry/instrumentation/sklearn/version.py index 071c0794c8..6021444b6c 100644 --- a/instrumentation/opentelemetry-instrumentation-sklearn/src/opentelemetry/instrumentation/sklearn/version.py +++ b/instrumentation/opentelemetry-instrumentation-sklearn/src/opentelemetry/instrumentation/sklearn/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/pyproject.toml b/instrumentation/opentelemetry-instrumentation-sqlalchemy/pyproject.toml index 6b2bc30ec2..9e70890f78 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", "packaging >= 21.0", "wrapt >= 1.11.2", ] diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/version.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/version.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-sqlite3/pyproject.toml b/instrumentation/opentelemetry-instrumentation-sqlite3/pyproject.toml index 9ea64fb2d7..5cfba4ac6c 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlite3/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-sqlite3/pyproject.toml @@ -26,14 +26,14 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-instrumentation-dbapi == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-instrumentation-dbapi == 0.36b0.dev", ] [project.optional-dependencies] instruments = [] test = [ - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/version.py b/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/version.py index b49604efc6..ab0deff1e3 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/version.py +++ b/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/version.py @@ -12,6 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" _instruments = tuple() diff --git a/instrumentation/opentelemetry-instrumentation-starlette/pyproject.toml b/instrumentation/opentelemetry-instrumentation-starlette/pyproject.toml index 7613843fbe..dfe0bbfcb8 100644 --- a/instrumentation/opentelemetry-instrumentation-starlette/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-starlette/pyproject.toml @@ -26,10 +26,10 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-instrumentation-asgi == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", - "opentelemetry-util-http == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-instrumentation-asgi == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-util-http == 0.36b0.dev", ] [project.optional-dependencies] @@ -38,7 +38,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-starlette[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", "requests ~= 2.23.0", # needed for testclient ] diff --git a/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py b/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py +++ b/instrumentation/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.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-system-metrics/pyproject.toml b/instrumentation/opentelemetry-instrumentation-system-metrics/pyproject.toml index e437dd3a2b..b40c0f54fa 100644 --- a/instrumentation/opentelemetry-instrumentation-system-metrics/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-system-metrics/pyproject.toml @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-system-metrics[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/version.py b/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/version.py +++ b/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-tornado/pyproject.toml b/instrumentation/opentelemetry-instrumentation-tornado/pyproject.toml index 6a892d3584..ef83ed5e40 100644 --- a/instrumentation/opentelemetry-instrumentation-tornado/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-tornado/pyproject.toml @@ -25,9 +25,9 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", - "opentelemetry-util-http == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-util-http == 0.36b0.dev", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-tornado[instruments]", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-tornado/src/opentelemetry/instrumentation/tornado/version.py b/instrumentation/opentelemetry-instrumentation-tornado/src/opentelemetry/instrumentation/tornado/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-tornado/src/opentelemetry/instrumentation/tornado/version.py +++ b/instrumentation/opentelemetry-instrumentation-tornado/src/opentelemetry/instrumentation/tornado/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-urllib/pyproject.toml b/instrumentation/opentelemetry-instrumentation-urllib/pyproject.toml index 08bf69de20..3182406055 100644 --- a/instrumentation/opentelemetry-instrumentation-urllib/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-urllib/pyproject.toml @@ -26,16 +26,16 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", - "opentelemetry-util-http == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-util-http == 0.36b0.dev", ] [project.optional-dependencies] instruments = [] test = [ "httpretty ~= 1.0", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-urllib/src/opentelemetry/instrumentation/urllib/version.py b/instrumentation/opentelemetry-instrumentation-urllib/src/opentelemetry/instrumentation/urllib/version.py index b49604efc6..ab0deff1e3 100644 --- a/instrumentation/opentelemetry-instrumentation-urllib/src/opentelemetry/instrumentation/urllib/version.py +++ b/instrumentation/opentelemetry-instrumentation-urllib/src/opentelemetry/instrumentation/urllib/version.py @@ -12,6 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" _instruments = tuple() diff --git a/instrumentation/opentelemetry-instrumentation-urllib3/pyproject.toml b/instrumentation/opentelemetry-instrumentation-urllib3/pyproject.toml index 6fb40ad3f5..e9eeda157b 100644 --- a/instrumentation/opentelemetry-instrumentation-urllib3/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-urllib3/pyproject.toml @@ -26,9 +26,9 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", - "opentelemetry-util-http == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-util-http == 0.36b0.dev", "wrapt >= 1.0.0, < 2.0.0", ] @@ -39,7 +39,7 @@ instruments = [ test = [ "opentelemetry-instrumentation-urllib3[instruments]", "httpretty ~= 1.0", - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-urllib3/src/opentelemetry/instrumentation/urllib3/version.py b/instrumentation/opentelemetry-instrumentation-urllib3/src/opentelemetry/instrumentation/urllib3/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-urllib3/src/opentelemetry/instrumentation/urllib3/version.py +++ b/instrumentation/opentelemetry-instrumentation-urllib3/src/opentelemetry/instrumentation/urllib3/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-wsgi/pyproject.toml b/instrumentation/opentelemetry-instrumentation-wsgi/pyproject.toml index eca16c33e9..8791435d13 100644 --- a/instrumentation/opentelemetry-instrumentation-wsgi/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-wsgi/pyproject.toml @@ -26,15 +26,15 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", - "opentelemetry-semantic-conventions == 0.35b0", - "opentelemetry-util-http == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-util-http == 0.36b0.dev", ] [project.optional-dependencies] instruments = [] test = [ - "opentelemetry-test-utils == 0.35b0", + "opentelemetry-test-utils == 0.36b0.dev", ] [project.urls] diff --git a/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/version.py b/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/version.py index af2984661c..fa69afa640 100644 --- a/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/version.py +++ b/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/opentelemetry-contrib-instrumentations/pyproject.toml b/opentelemetry-contrib-instrumentations/pyproject.toml index fc25e2c931..45d29aff7d 100644 --- a/opentelemetry-contrib-instrumentations/pyproject.toml +++ b/opentelemetry-contrib-instrumentations/pyproject.toml @@ -29,47 +29,47 @@ classifiers = [ "Programming Language :: Python :: 3.11", ] dependencies = [ - "opentelemetry-instrumentation-aio-pika==0.35b0", - "opentelemetry-instrumentation-aiohttp-client==0.35b0", - "opentelemetry-instrumentation-aiopg==0.35b0", - "opentelemetry-instrumentation-asgi==0.35b0", - "opentelemetry-instrumentation-asyncpg==0.35b0", - "opentelemetry-instrumentation-aws-lambda==0.35b0", - "opentelemetry-instrumentation-boto==0.35b0", - "opentelemetry-instrumentation-boto3sqs==0.35b0", - "opentelemetry-instrumentation-botocore==0.35b0", - "opentelemetry-instrumentation-celery==0.35b0", - "opentelemetry-instrumentation-confluent-kafka==0.35b0", - "opentelemetry-instrumentation-dbapi==0.35b0", - "opentelemetry-instrumentation-django==0.35b0", - "opentelemetry-instrumentation-elasticsearch==0.35b0", - "opentelemetry-instrumentation-falcon==0.35b0", - "opentelemetry-instrumentation-fastapi==0.35b0", - "opentelemetry-instrumentation-flask==0.35b0", - "opentelemetry-instrumentation-grpc==0.35b0", - "opentelemetry-instrumentation-httpx==0.35b0", - "opentelemetry-instrumentation-jinja2==0.35b0", - "opentelemetry-instrumentation-kafka-python==0.35b0", - "opentelemetry-instrumentation-logging==0.35b0", - "opentelemetry-instrumentation-mysql==0.35b0", - "opentelemetry-instrumentation-pika==0.35b0", - "opentelemetry-instrumentation-psycopg2==0.35b0", - "opentelemetry-instrumentation-pymemcache==0.35b0", - "opentelemetry-instrumentation-pymongo==0.35b0", - "opentelemetry-instrumentation-pymysql==0.35b0", - "opentelemetry-instrumentation-pyramid==0.35b0", - "opentelemetry-instrumentation-redis==0.35b0", - "opentelemetry-instrumentation-remoulade==0.35b0", - "opentelemetry-instrumentation-requests==0.35b0", - "opentelemetry-instrumentation-sklearn==0.35b0", - "opentelemetry-instrumentation-sqlalchemy==0.35b0", - "opentelemetry-instrumentation-sqlite3==0.35b0", - "opentelemetry-instrumentation-starlette==0.35b0", - "opentelemetry-instrumentation-system-metrics==0.35b0", - "opentelemetry-instrumentation-tornado==0.35b0", - "opentelemetry-instrumentation-urllib==0.35b0", - "opentelemetry-instrumentation-urllib3==0.35b0", - "opentelemetry-instrumentation-wsgi==0.35b0", + "opentelemetry-instrumentation-aio-pika==0.36b0.dev", + "opentelemetry-instrumentation-aiohttp-client==0.36b0.dev", + "opentelemetry-instrumentation-aiopg==0.36b0.dev", + "opentelemetry-instrumentation-asgi==0.36b0.dev", + "opentelemetry-instrumentation-asyncpg==0.36b0.dev", + "opentelemetry-instrumentation-aws-lambda==0.36b0.dev", + "opentelemetry-instrumentation-boto==0.36b0.dev", + "opentelemetry-instrumentation-boto3sqs==0.36b0.dev", + "opentelemetry-instrumentation-botocore==0.36b0.dev", + "opentelemetry-instrumentation-celery==0.36b0.dev", + "opentelemetry-instrumentation-confluent-kafka==0.36b0.dev", + "opentelemetry-instrumentation-dbapi==0.36b0.dev", + "opentelemetry-instrumentation-django==0.36b0.dev", + "opentelemetry-instrumentation-elasticsearch==0.36b0.dev", + "opentelemetry-instrumentation-falcon==0.36b0.dev", + "opentelemetry-instrumentation-fastapi==0.36b0.dev", + "opentelemetry-instrumentation-flask==0.36b0.dev", + "opentelemetry-instrumentation-grpc==0.36b0.dev", + "opentelemetry-instrumentation-httpx==0.36b0.dev", + "opentelemetry-instrumentation-jinja2==0.36b0.dev", + "opentelemetry-instrumentation-kafka-python==0.36b0.dev", + "opentelemetry-instrumentation-logging==0.36b0.dev", + "opentelemetry-instrumentation-mysql==0.36b0.dev", + "opentelemetry-instrumentation-pika==0.36b0.dev", + "opentelemetry-instrumentation-psycopg2==0.36b0.dev", + "opentelemetry-instrumentation-pymemcache==0.36b0.dev", + "opentelemetry-instrumentation-pymongo==0.36b0.dev", + "opentelemetry-instrumentation-pymysql==0.36b0.dev", + "opentelemetry-instrumentation-pyramid==0.36b0.dev", + "opentelemetry-instrumentation-redis==0.36b0.dev", + "opentelemetry-instrumentation-remoulade==0.36b0.dev", + "opentelemetry-instrumentation-requests==0.36b0.dev", + "opentelemetry-instrumentation-sklearn==0.36b0.dev", + "opentelemetry-instrumentation-sqlalchemy==0.36b0.dev", + "opentelemetry-instrumentation-sqlite3==0.36b0.dev", + "opentelemetry-instrumentation-starlette==0.36b0.dev", + "opentelemetry-instrumentation-system-metrics==0.36b0.dev", + "opentelemetry-instrumentation-tornado==0.36b0.dev", + "opentelemetry-instrumentation-urllib==0.36b0.dev", + "opentelemetry-instrumentation-urllib3==0.36b0.dev", + "opentelemetry-instrumentation-wsgi==0.36b0.dev", ] [project.optional-dependencies] diff --git a/opentelemetry-contrib-instrumentations/src/opentelemetry/contrib-instrumentations/version.py b/opentelemetry-contrib-instrumentations/src/opentelemetry/contrib-instrumentations/version.py index af2984661c..fa69afa640 100644 --- a/opentelemetry-contrib-instrumentations/src/opentelemetry/contrib-instrumentations/version.py +++ b/opentelemetry-contrib-instrumentations/src/opentelemetry/contrib-instrumentations/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/opentelemetry-distro/pyproject.toml b/opentelemetry-distro/pyproject.toml index 5604c23f80..2a7b4f42c2 100644 --- a/opentelemetry-distro/pyproject.toml +++ b/opentelemetry-distro/pyproject.toml @@ -24,13 +24,13 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.35b0", + "opentelemetry-instrumentation == 0.36b0.dev", "opentelemetry-sdk ~= 1.13", ] [project.optional-dependencies] otlp = [ - "opentelemetry-exporter-otlp == 1.14.0", + "opentelemetry-exporter-otlp == 1.15.0.dev", ] test = [] diff --git a/opentelemetry-distro/src/opentelemetry/distro/version.py b/opentelemetry-distro/src/opentelemetry/distro/version.py index af2984661c..fa69afa640 100644 --- a/opentelemetry-distro/src/opentelemetry/distro/version.py +++ b/opentelemetry-distro/src/opentelemetry/distro/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py index b554db5db7..aabbd0a6d0 100644 --- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py +++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py @@ -18,150 +18,150 @@ libraries = { "aio_pika": { "library": "aio_pika ~= 7.2.0", - "instrumentation": "opentelemetry-instrumentation-aio-pika==0.35b0", + "instrumentation": "opentelemetry-instrumentation-aio-pika==0.36b0.dev", }, "aiohttp": { "library": "aiohttp ~= 3.0", - "instrumentation": "opentelemetry-instrumentation-aiohttp-client==0.35b0", + "instrumentation": "opentelemetry-instrumentation-aiohttp-client==0.36b0.dev", }, "aiopg": { "library": "aiopg >= 0.13.0, < 1.3.0", - "instrumentation": "opentelemetry-instrumentation-aiopg==0.35b0", + "instrumentation": "opentelemetry-instrumentation-aiopg==0.36b0.dev", }, "asgiref": { "library": "asgiref ~= 3.0", - "instrumentation": "opentelemetry-instrumentation-asgi==0.35b0", + "instrumentation": "opentelemetry-instrumentation-asgi==0.36b0.dev", }, "asyncpg": { "library": "asyncpg >= 0.12.0", - "instrumentation": "opentelemetry-instrumentation-asyncpg==0.35b0", + "instrumentation": "opentelemetry-instrumentation-asyncpg==0.36b0.dev", }, "boto": { "library": "boto~=2.0", - "instrumentation": "opentelemetry-instrumentation-boto==0.35b0", + "instrumentation": "opentelemetry-instrumentation-boto==0.36b0.dev", }, "boto3": { "library": "boto3 ~= 1.0", - "instrumentation": "opentelemetry-instrumentation-boto3sqs==0.35b0", + "instrumentation": "opentelemetry-instrumentation-boto3sqs==0.36b0.dev", }, "botocore": { "library": "botocore ~= 1.0", - "instrumentation": "opentelemetry-instrumentation-botocore==0.35b0", + "instrumentation": "opentelemetry-instrumentation-botocore==0.36b0.dev", }, "celery": { "library": "celery >= 4.0, < 6.0", - "instrumentation": "opentelemetry-instrumentation-celery==0.35b0", + "instrumentation": "opentelemetry-instrumentation-celery==0.36b0.dev", }, "confluent-kafka": { "library": "confluent-kafka ~= 1.8.2", - "instrumentation": "opentelemetry-instrumentation-confluent-kafka==0.35b0", + "instrumentation": "opentelemetry-instrumentation-confluent-kafka==0.36b0.dev", }, "django": { "library": "django >= 1.10", - "instrumentation": "opentelemetry-instrumentation-django==0.35b0", + "instrumentation": "opentelemetry-instrumentation-django==0.36b0.dev", }, "elasticsearch": { "library": "elasticsearch >= 2.0", - "instrumentation": "opentelemetry-instrumentation-elasticsearch==0.35b0", + "instrumentation": "opentelemetry-instrumentation-elasticsearch==0.36b0.dev", }, "falcon": { "library": "falcon >= 1.4.1, < 4.0.0", - "instrumentation": "opentelemetry-instrumentation-falcon==0.35b0", + "instrumentation": "opentelemetry-instrumentation-falcon==0.36b0.dev", }, "fastapi": { "library": "fastapi ~= 0.58", - "instrumentation": "opentelemetry-instrumentation-fastapi==0.35b0", + "instrumentation": "opentelemetry-instrumentation-fastapi==0.36b0.dev", }, "flask": { "library": "flask >= 1.0, < 3.0", - "instrumentation": "opentelemetry-instrumentation-flask==0.35b0", + "instrumentation": "opentelemetry-instrumentation-flask==0.36b0.dev", }, "grpcio": { "library": "grpcio ~= 1.27", - "instrumentation": "opentelemetry-instrumentation-grpc==0.35b0", + "instrumentation": "opentelemetry-instrumentation-grpc==0.36b0.dev", }, "httpx": { "library": "httpx >= 0.18.0", - "instrumentation": "opentelemetry-instrumentation-httpx==0.35b0", + "instrumentation": "opentelemetry-instrumentation-httpx==0.36b0.dev", }, "jinja2": { "library": "jinja2 >= 2.7, < 4.0", - "instrumentation": "opentelemetry-instrumentation-jinja2==0.35b0", + "instrumentation": "opentelemetry-instrumentation-jinja2==0.36b0.dev", }, "kafka-python": { "library": "kafka-python >= 2.0", - "instrumentation": "opentelemetry-instrumentation-kafka-python==0.35b0", + "instrumentation": "opentelemetry-instrumentation-kafka-python==0.36b0.dev", }, "mysql-connector-python": { "library": "mysql-connector-python ~= 8.0", - "instrumentation": "opentelemetry-instrumentation-mysql==0.35b0", + "instrumentation": "opentelemetry-instrumentation-mysql==0.36b0.dev", }, "pika": { "library": "pika >= 0.12.0", - "instrumentation": "opentelemetry-instrumentation-pika==0.35b0", + "instrumentation": "opentelemetry-instrumentation-pika==0.36b0.dev", }, "psycopg2": { "library": "psycopg2 >= 2.7.3.1", - "instrumentation": "opentelemetry-instrumentation-psycopg2==0.35b0", + "instrumentation": "opentelemetry-instrumentation-psycopg2==0.36b0.dev", }, "pymemcache": { "library": "pymemcache >= 1.3.5, < 4", - "instrumentation": "opentelemetry-instrumentation-pymemcache==0.35b0", + "instrumentation": "opentelemetry-instrumentation-pymemcache==0.36b0.dev", }, "pymongo": { "library": "pymongo >= 3.1, < 5.0", - "instrumentation": "opentelemetry-instrumentation-pymongo==0.35b0", + "instrumentation": "opentelemetry-instrumentation-pymongo==0.36b0.dev", }, "PyMySQL": { "library": "PyMySQL < 2", - "instrumentation": "opentelemetry-instrumentation-pymysql==0.35b0", + "instrumentation": "opentelemetry-instrumentation-pymysql==0.36b0.dev", }, "pyramid": { "library": "pyramid >= 1.7", - "instrumentation": "opentelemetry-instrumentation-pyramid==0.35b0", + "instrumentation": "opentelemetry-instrumentation-pyramid==0.36b0.dev", }, "redis": { "library": "redis >= 2.6", - "instrumentation": "opentelemetry-instrumentation-redis==0.35b0", + "instrumentation": "opentelemetry-instrumentation-redis==0.36b0.dev", }, "remoulade": { "library": "remoulade >= 0.50", - "instrumentation": "opentelemetry-instrumentation-remoulade==0.35b0", + "instrumentation": "opentelemetry-instrumentation-remoulade==0.36b0.dev", }, "requests": { "library": "requests ~= 2.0", - "instrumentation": "opentelemetry-instrumentation-requests==0.35b0", + "instrumentation": "opentelemetry-instrumentation-requests==0.36b0.dev", }, "scikit-learn": { "library": "scikit-learn ~= 0.24.0", - "instrumentation": "opentelemetry-instrumentation-sklearn==0.35b0", + "instrumentation": "opentelemetry-instrumentation-sklearn==0.36b0.dev", }, "sqlalchemy": { "library": "sqlalchemy", - "instrumentation": "opentelemetry-instrumentation-sqlalchemy==0.35b0", + "instrumentation": "opentelemetry-instrumentation-sqlalchemy==0.36b0.dev", }, "starlette": { "library": "starlette ~= 0.13.0", - "instrumentation": "opentelemetry-instrumentation-starlette==0.35b0", + "instrumentation": "opentelemetry-instrumentation-starlette==0.36b0.dev", }, "psutil": { "library": "psutil >= 5", - "instrumentation": "opentelemetry-instrumentation-system-metrics==0.35b0", + "instrumentation": "opentelemetry-instrumentation-system-metrics==0.36b0.dev", }, "tornado": { "library": "tornado >= 5.1.1", - "instrumentation": "opentelemetry-instrumentation-tornado==0.35b0", + "instrumentation": "opentelemetry-instrumentation-tornado==0.36b0.dev", }, "urllib3": { "library": "urllib3 >= 1.0.0, < 2.0.0", - "instrumentation": "opentelemetry-instrumentation-urllib3==0.35b0", + "instrumentation": "opentelemetry-instrumentation-urllib3==0.36b0.dev", }, } default_instrumentations = [ - "opentelemetry-instrumentation-aws-lambda==0.35b0", - "opentelemetry-instrumentation-dbapi==0.35b0", - "opentelemetry-instrumentation-logging==0.35b0", - "opentelemetry-instrumentation-sqlite3==0.35b0", - "opentelemetry-instrumentation-urllib==0.35b0", - "opentelemetry-instrumentation-wsgi==0.35b0", + "opentelemetry-instrumentation-aws-lambda==0.36b0.dev", + "opentelemetry-instrumentation-dbapi==0.36b0.dev", + "opentelemetry-instrumentation-logging==0.36b0.dev", + "opentelemetry-instrumentation-sqlite3==0.36b0.dev", + "opentelemetry-instrumentation-urllib==0.36b0.dev", + "opentelemetry-instrumentation-wsgi==0.36b0.dev", ] diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py index af2984661c..fa69afa640 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.35b0" +__version__ = "0.36b0.dev" diff --git a/propagator/opentelemetry-propagator-ot-trace/src/opentelemetry/propagators/ot_trace/version.py b/propagator/opentelemetry-propagator-ot-trace/src/opentelemetry/propagators/ot_trace/version.py index af2984661c..fa69afa640 100644 --- a/propagator/opentelemetry-propagator-ot-trace/src/opentelemetry/propagators/ot_trace/version.py +++ b/propagator/opentelemetry-propagator-ot-trace/src/opentelemetry/propagators/ot_trace/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" diff --git a/util/opentelemetry-util-http/src/opentelemetry/util/http/version.py b/util/opentelemetry-util-http/src/opentelemetry/util/http/version.py index af2984661c..fa69afa640 100644 --- a/util/opentelemetry-util-http/src/opentelemetry/util/http/version.py +++ b/util/opentelemetry-util-http/src/opentelemetry/util/http/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.35b0" +__version__ = "0.36b0.dev" From f994e1463645d6e5fbd617fc534cbbf70f4383ef Mon Sep 17 00:00:00 2001 From: Shalev Roda <65566801+shalevr@users.noreply.github.com> Date: Sat, 5 Nov 2022 16:29:47 +0200 Subject: [PATCH 02/28] Fix Urllib instrumentation - Add status code to span if not None (#1430) --- CHANGELOG.md | 5 ++++ .../instrumentation/urllib/__init__.py | 2 +- .../tests/test_urllib_integration.py | 30 +++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9dd4c9b99..44c1be3903 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Fixed + +- Fix bug in Urllib instrumentation - add status code to span attributes only if the status code is not None. + ([#1430](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1430)) + ## Version 1.14.0/0.35b0 (2022-11-03) ### Deprecated diff --git a/instrumentation/opentelemetry-instrumentation-urllib/src/opentelemetry/instrumentation/urllib/__init__.py b/instrumentation/opentelemetry-instrumentation-urllib/src/opentelemetry/instrumentation/urllib/__init__.py index 04244989f3..b57304f762 100644 --- a/instrumentation/opentelemetry-instrumentation-urllib/src/opentelemetry/instrumentation/urllib/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-urllib/src/opentelemetry/instrumentation/urllib/__init__.py @@ -206,7 +206,7 @@ def _instrumented_open_call( code_ = result.getcode() labels[SpanAttributes.HTTP_STATUS_CODE] = str(code_) - if span.is_recording(): + if span.is_recording() and code_ is not None: span.set_attribute(SpanAttributes.HTTP_STATUS_CODE, code_) span.set_status(Status(http_status_to_status_code(code_))) diff --git a/instrumentation/opentelemetry-instrumentation-urllib/tests/test_urllib_integration.py b/instrumentation/opentelemetry-instrumentation-urllib/tests/test_urllib_integration.py index d819d481cc..73c96ede14 100644 --- a/instrumentation/opentelemetry-instrumentation-urllib/tests/test_urllib_integration.py +++ b/instrumentation/opentelemetry-instrumentation-urllib/tests/test_urllib_integration.py @@ -16,6 +16,7 @@ import socket import urllib from unittest import mock +from unittest.mock import patch from urllib import request from urllib.error import HTTPError from urllib.request import OpenerDirector @@ -150,6 +151,35 @@ def test_not_foundbasic(self): trace.StatusCode.ERROR, ) + @staticmethod + def mock_get_code(*args, **kwargs): + return None + + @patch("http.client.HTTPResponse.getcode", new=mock_get_code) + def test_response_code_none(self): + + result = self.perform_request(self.URL) + + self.assertEqual(result.read(), b"Hello!") + span = self.assert_span() + + self.assertIs(span.kind, trace.SpanKind.CLIENT) + self.assertEqual(span.name, "HTTP GET") + + self.assertEqual( + span.attributes, + { + SpanAttributes.HTTP_METHOD: "GET", + SpanAttributes.HTTP_URL: self.URL, + }, + ) + + self.assertIs(span.status.status_code, trace.StatusCode.UNSET) + + self.assertEqualSpanInstrumentationInfo( + span, opentelemetry.instrumentation.urllib + ) + def test_uninstrument(self): URLLibInstrumentor().uninstrument() result = self.perform_request(self.URL) From 40e4e2e5985d416aa5e7f1ae7ca8f293e7c66044 Mon Sep 17 00:00:00 2001 From: Dan Rogers Date: Mon, 7 Nov 2022 11:00:28 -0500 Subject: [PATCH 03/28] Fix dbapi connection instrument wrapper has no _sock member (#1424) Fixes https://github.com/open-telemetry/opentelemetry-python-contrib/issues/1353 Also: Fix the check for the connection already being instrumented in instrument_connection() Add tests for commit() and rollback() Add a couple missing docstring items. Add basepython to docker-tests to fix running the tests on macOS. --- CHANGELOG.md | 9 +++++++++ .../instrumentation/dbapi/__init__.py | 15 ++++++++++++++- .../tests/pymysql/test_pymysql_functional.py | 16 ++++++++++++++++ tox.ini | 1 + 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 44c1be3903..b4efed3c78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,10 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- `opentelemetry-instrumentation-pymysql` Add tests for commit() and rollback(). + ([#1424](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1424)) + ### Fixed - Fix bug in Urllib instrumentation - add status code to span attributes only if the status code is not None. ([#1430](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1430)) +- `opentelemetry-instrumentation-pymysql` Fix dbapi connection instrument wrapper has no _sock member. + ([#1424](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1424)) +- `opentelemetry-instrumentation-dbapi` Fix the check for the connection already being instrumented in instrument_connection(). + ([#1424](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1424)) ## Version 1.14.0/0.35b0 (2022-11-03) diff --git a/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py b/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py index 0645d4c5f6..c2ee79e811 100644 --- a/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py @@ -79,6 +79,9 @@ def trace_integration( tracer_provider: The :class:`opentelemetry.trace.TracerProvider` to use. If omitted the current configured one is used. capture_parameters: Configure if db.statement.parameters should be captured. + enable_commenter: Flag to enable/disable sqlcommenter. + db_api_integration_factory: The `DatabaseApiIntegration` to use. If none is passed the + default one is used. """ wrap_connect( __name__, @@ -121,6 +124,8 @@ def wrap_connect( use. If omitted the current configured one is used. capture_parameters: Configure if db.statement.parameters should be captured. enable_commenter: Flag to enable/disable sqlcommenter. + db_api_integration_factory: The `DatabaseApiIntegration` to use. If none is passed the + default one is used. commenter_options: Configurations for tags to be appended at the sql query. """ @@ -197,7 +202,7 @@ def instrument_connection( Returns: An instrumented connection. """ - if isinstance(connection, wrapt.ObjectProxy): + if isinstance(connection, _TracedConnectionProxy): _logger.warning("Connection already instrumented") return connection @@ -331,6 +336,14 @@ def __getattr__(self, name): object.__getattribute__(self, "_connection"), name ) + def __getattribute__(self, name): + if object.__getattribute__(self, name): + return object.__getattribute__(self, name) + + return object.__getattribute__( + object.__getattribute__(self, "_connection"), name + ) + def cursor(self, *args, **kwargs): return get_traced_cursor_proxy( self._connection.cursor(*args, **kwargs), db_api_integration diff --git a/tests/opentelemetry-docker-tests/tests/pymysql/test_pymysql_functional.py b/tests/opentelemetry-docker-tests/tests/pymysql/test_pymysql_functional.py index 83f7abf281..599c2843a1 100644 --- a/tests/opentelemetry-docker-tests/tests/pymysql/test_pymysql_functional.py +++ b/tests/opentelemetry-docker-tests/tests/pymysql/test_pymysql_functional.py @@ -109,3 +109,19 @@ def test_callproc(self): ): self._cursor.callproc("test", ()) self.validate_spans("test") + + def test_commit(self): + stmt = "INSERT INTO test (id) VALUES (%s)" + with self._tracer.start_as_current_span("rootSpan"): + data = (("4",), ("5",), ("6",)) + self._cursor.executemany(stmt, data) + self._connection.commit() + self.validate_spans("INSERT") + + def test_rollback(self): + stmt = "INSERT INTO test (id) VALUES (%s)" + with self._tracer.start_as_current_span("rootSpan"): + data = (("7",), ("8",), ("9",)) + self._cursor.executemany(stmt, data) + self._connection.rollback() + self.validate_spans("INSERT") diff --git a/tox.ini b/tox.ini index d1a7da6f8e..9521e1b9ca 100644 --- a/tox.ini +++ b/tox.ini @@ -515,6 +515,7 @@ commands = python scripts/eachdist.py lint --check-only [testenv:docker-tests] +basepython: python3.9 deps = pip >= 20.3.3 pytest From 496d6581cce21ed89aaccbd5d6cadc5741e3c66f Mon Sep 17 00:00:00 2001 From: Dan Rogers Date: Mon, 7 Nov 2022 11:53:08 -0500 Subject: [PATCH 04/28] Add support for regular expression matching and sanitizing of headers in FastAPI. (#1403) --- CHANGELOG.md | 2 + .../instrumentation/fastapi/__init__.py | 95 ++++++++++++++----- .../tests/test_fastapi_instrumentation.py | 82 +++++++++++----- 3 files changed, 128 insertions(+), 51 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b4efed3c78..3b45d6e90e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `opentelemetry-instrumentation-pymysql` Add tests for commit() and rollback(). ([#1424](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1424)) +- `opentelemetry-instrumentation-fastapi` Add support for regular expression matching and sanitization of HTTP headers. + ([#1403](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1403)) ### Fixed diff --git a/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py b/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py index a4245bab70..5cf5476c5c 100644 --- a/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py @@ -34,8 +34,9 @@ async def foobar(): Exclude lists ************* -To exclude certain URLs from being tracked, set the environment variable ``OTEL_PYTHON_FASTAPI_EXCLUDED_URLS`` -(or ``OTEL_PYTHON_EXCLUDED_URLS`` as fallback) with comma delimited regexes representing which URLs to exclude. +To exclude certain URLs from tracking, set the environment variable ``OTEL_PYTHON_FASTAPI_EXCLUDED_URLS`` +(or ``OTEL_PYTHON_EXCLUDED_URLS`` to cover all instrumentations) to a string of comma delimited regexes that match the +URLs. For example, @@ -45,7 +46,7 @@ async def foobar(): will exclude requests such as ``https://site/client/123/info`` and ``https://site/xyz/healthcheck``. -You can also pass the comma delimited regexes to the ``instrument_app`` method directly: +You can also pass comma delimited regexes directly to the ``instrument_app`` method: .. code-block:: python @@ -54,9 +55,12 @@ async def foobar(): Request/Response hooks ********************** -Utilize request/response hooks to execute custom logic to be performed before/after performing a request. The server request hook takes in a server span and ASGI -scope object for every incoming request. The client request hook is called with the internal span and an ASGI scope which is sent as a dictionary for when the method receive is called. -The client response hook is called with the internal span and an ASGI event which is sent as a dictionary for when the method send is called. +This instrumentation supports request and response hooks. These are functions that get called +right after a span is created for a request and right before the span is finished for the response. + +- The server request hook is passed a server span and ASGI scope object for every incoming request. +- The client request hook is called with the internal span and an ASGI scope when the method ``receive`` is called. +- The client response hook is called with the internal span and an ASGI event when the method ``send`` is called. .. code-block:: python @@ -76,54 +80,93 @@ def client_response_hook(span: Span, message: dict): Capture HTTP request and response headers ***************************************** -You can configure the agent to capture predefined HTTP headers as span attributes, according to the `semantic convention `_. +You can configure the agent to capture specified HTTP headers as span attributes, according to the +`semantic convention `_. Request headers *************** -To capture predefined HTTP request headers as span attributes, set the environment variable ``OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST`` -to a comma-separated list of HTTP header names. +To capture HTTP request headers as span attributes, set the environment variable +``OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST`` to a comma delimited list of HTTP header names. For example, - :: export OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST="content-type,custom_request_header" -will extract ``content-type`` and ``custom_request_header`` from request headers and add them as span attributes. +will extract ``content-type`` and ``custom_request_header`` from the request headers and add them as span attributes. + +Request header names in FastAPI are case-insensitive. So, giving the header name as ``CUStom-Header`` in the environment +variable will capture the header named ``custom-header``. + +Regular expressions may also be used to match multiple headers that correspond to the given pattern. For example: +:: + + export OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST="Accept.*,X-.*" -It is recommended that you should give the correct names of the headers to be captured in the environment variable. -Request header names in fastapi are case insensitive. So, giving header name as ``CUStom-Header`` in environment variable will be able capture header with name ``custom-header``. +Would match all request headers that start with ``Accept`` and ``X-``. -The name of the added span attribute will follow the format ``http.request.header.`` where ```` being the normalized HTTP header name (lowercase, with - characters replaced by _ ). -The value of the attribute will be single item list containing all the header values. +To capture all request headers, set ``OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST`` to ``".*"``. +:: + + export OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST=".*" + +The name of the added span attribute will follow the format ``http.request.header.`` where ```` +is the normalized HTTP header name (lowercase, with ``-`` replaced by ``_``). The value of the attribute will be a +single item list containing all the header values. -Example of the added span attribute, +For example: ``http.request.header.custom_request_header = [","]`` Response headers **************** -To capture predefined HTTP response headers as span attributes, set the environment variable ``OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE`` -to a comma-separated list of HTTP header names. +To capture HTTP response headers as span attributes, set the environment variable +``OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE`` to a comma delimited list of HTTP header names. For example, - :: export OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE="content-type,custom_response_header" -will extract ``content-type`` and ``custom_response_header`` from response headers and add them as span attributes. +will extract ``content-type`` and ``custom_response_header`` from the response headers and add them as span attributes. + +Response header names in FastAPI are case-insensitive. So, giving the header name as ``CUStom-Header`` in the environment +variable will capture the header named ``custom-header``. -It is recommended that you should give the correct names of the headers to be captured in the environment variable. -Response header names captured in fastapi are case insensitive. So, giving header name as ``CUStomHeader`` in environment variable will be able capture header with name ``customheader``. +Regular expressions may also be used to match multiple headers that correspond to the given pattern. For example: +:: -The name of the added span attribute will follow the format ``http.response.header.`` where ```` being the normalized HTTP header name (lowercase, with - characters replaced by _ ). -The value of the attribute will be single item list containing all the header values. + export OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE="Content.*,X-.*" -Example of the added span attribute, +Would match all response headers that start with ``Content`` and ``X-``. + +To capture all response headers, set ``OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE`` to ``".*"``. +:: + + export OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE=".*" + +The name of the added span attribute will follow the format ``http.response.header.`` where ```` +is the normalized HTTP header name (lowercase, with ``-`` replaced by ``_``). The value of the attribute will be a +single item list containing all the header values. + +For example: ``http.response.header.custom_response_header = [","]`` +Sanitizing headers +****************** +In order to prevent storing sensitive data such as personally identifiable information (PII), session keys, passwords, +etc, set the environment variable ``OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS`` +to a comma delimited list of HTTP header names to be sanitized. Regexes may be used, and all header names will be +matched in a case-insensitive manner. + +For example, +:: + + export OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS=".*session.*,set-cookie" + +will replace the value of headers such as ``session-id`` and ``set-cookie`` with ``[REDACTED]`` in the span. + Note: - Environment variable names to capture http headers are still experimental, and thus are subject to change. + The environment variable names used to capture HTTP headers are still experimental, and thus are subject to change. API --- diff --git a/instrumentation/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py b/instrumentation/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py index e8b1b6fbb5..14c3164029 100644 --- a/instrumentation/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py +++ b/instrumentation/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py @@ -32,6 +32,7 @@ from opentelemetry.test.globals_test import reset_trace_globals from opentelemetry.test.test_base import TestBase from opentelemetry.util.http import ( + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS, OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST, OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE, _active_requests_count_attrs, @@ -529,24 +530,23 @@ def test_mark_span_internal_in_presence_of_span_from_other_framework(self): ) +@patch.dict( + "os.environ", + { + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS: ".*my-secret.*", + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3,Regex-Test-Header-.*,Regex-Invalid-Test-Header-.*,.*my-secret.*", + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3,my-custom-regex-header-.*,invalid-regex-header-.*,.*my-secret.*", + }, +) class TestHTTPAppWithCustomHeaders(TestBase): def setUp(self): super().setUp() - self.env_patch = patch.dict( - "os.environ", - { - OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3", - OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3", - }, - ) - self.env_patch.start() self.app = self._create_app() otel_fastapi.FastAPIInstrumentor().instrument_app(self.app) self.client = TestClient(self.app) def tearDown(self) -> None: super().tearDown() - self.env_patch.stop() with self.disable_logging(): otel_fastapi.FastAPIInstrumentor().uninstrument_app(self.app) @@ -559,6 +559,9 @@ async def _(): headers = { "custom-test-header-1": "test-header-value-1", "custom-test-header-2": "test-header-value-2", + "my-custom-regex-header-1": "my-custom-regex-value-1,my-custom-regex-value-2", + "My-Custom-Regex-Header-2": "my-custom-regex-value-3,my-custom-regex-value-4", + "My-Secret-Header": "My Secret Value", } content = {"message": "hello world"} return JSONResponse(content=content, headers=headers) @@ -573,12 +576,20 @@ def test_http_custom_request_headers_in_span_attributes(self): "http.request.header.custom_test_header_2": ( "test-header-value-2", ), + "http.request.header.regex_test_header_1": ("Regex Test Value 1",), + "http.request.header.regex_test_header_2": ( + "RegexTestValue2,RegexTestValue3", + ), + "http.request.header.my_secret_header": ("[REDACTED]",), } resp = self.client.get( "/foobar", headers={ "custom-test-header-1": "test-header-value-1", "custom-test-header-2": "test-header-value-2", + "Regex-Test-Header-1": "Regex Test Value 1", + "regex-test-header-2": "RegexTestValue2,RegexTestValue3", + "My-Secret-Header": "My Secret Value", }, ) self.assertEqual(200, resp.status_code) @@ -602,6 +613,9 @@ def test_http_custom_request_headers_not_in_span_attributes(self): headers={ "custom-test-header-1": "test-header-value-1", "custom-test-header-2": "test-header-value-2", + "Regex-Test-Header-1": "Regex Test Value 1", + "regex-test-header-2": "RegexTestValue2,RegexTestValue3", + "My-Secret-Header": "My Secret Value", }, ) self.assertEqual(200, resp.status_code) @@ -623,6 +637,13 @@ def test_http_custom_response_headers_in_span_attributes(self): "http.response.header.custom_test_header_2": ( "test-header-value-2", ), + "http.response.header.my_custom_regex_header_1": ( + "my-custom-regex-value-1,my-custom-regex-value-2", + ), + "http.response.header.my_custom_regex_header_2": ( + "my-custom-regex-value-3,my-custom-regex-value-4", + ), + "http.response.header.my_secret_header": ("[REDACTED]",), } resp = self.client.get("/foobar") self.assertEqual(200, resp.status_code) @@ -653,24 +674,23 @@ def test_http_custom_response_headers_not_in_span_attributes(self): self.assertNotIn(key, server_span.attributes) +@patch.dict( + "os.environ", + { + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS: ".*my-secret.*", + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3,Regex-Test-Header-.*,Regex-Invalid-Test-Header-.*,.*my-secret.*", + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3,my-custom-regex-header-.*,invalid-regex-header-.*,.*my-secret.*", + }, +) class TestWebSocketAppWithCustomHeaders(TestBase): def setUp(self): super().setUp() - self.env_patch = patch.dict( - "os.environ", - { - OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3", - OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3", - }, - ) - self.env_patch.start() self.app = self._create_app() otel_fastapi.FastAPIInstrumentor().instrument_app(self.app) self.client = TestClient(self.app) def tearDown(self) -> None: super().tearDown() - self.env_patch.stop() with self.disable_logging(): otel_fastapi.FastAPIInstrumentor().uninstrument_app(self.app) @@ -688,6 +708,12 @@ async def _(websocket: fastapi.WebSocket): "headers": [ (b"custom-test-header-1", b"test-header-value-1"), (b"custom-test-header-2", b"test-header-value-2"), + (b"Regex-Test-Header-1", b"Regex Test Value 1"), + ( + b"regex-test-header-2", + b"RegexTestValue2,RegexTestValue3", + ), + (b"My-Secret-Header", b"My Secret Value"), ], } ) @@ -727,6 +753,13 @@ def test_web_socket_custom_request_headers_in_span_attributes(self): self.assertSpanHasAttributes(server_span, expected) + @patch.dict( + "os.environ", + { + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS: ".*my-secret.*", + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3,Regex-Test-Header-.*,Regex-Invalid-Test-Header-.*,.*my-secret.*", + }, + ) def test_web_socket_custom_request_headers_not_in_span_attributes(self): not_expected = { "http.request.header.custom_test_header_3": ( @@ -799,16 +832,15 @@ def test_web_socket_custom_response_headers_not_in_span_attributes(self): self.assertNotIn(key, server_span.attributes) +@patch.dict( + "os.environ", + { + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3", + }, +) class TestNonRecordingSpanWithCustomHeaders(TestBase): def setUp(self): super().setUp() - self.env_patch = patch.dict( - "os.environ", - { - OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3", - }, - ) - self.env_patch.start() self.app = fastapi.FastAPI() @self.app.get("/foobar") From 7acc336ccac3df54b70452577365f8fcdfc80276 Mon Sep 17 00:00:00 2001 From: Nils Borrmann <98901461+nils-borrmann-y42@users.noreply.github.com> Date: Mon, 7 Nov 2022 18:34:20 +0100 Subject: [PATCH 05/28] aiohttp-client: Allow overriding of span status (#1394) --- CHANGELOG.md | 2 ++ .../instrumentation/aiohttp_client/__init__.py | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b45d6e90e..45163e7889 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix bug in Urllib instrumentation - add status code to span attributes only if the status code is not None. ([#1430](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1430)) +- `opentelemetry-instrumentation-aiohttp-client` Allow overriding of status in response hook. + ([#1394](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1394)) - `opentelemetry-instrumentation-pymysql` Fix dbapi connection instrument wrapper has no _sock member. ([#1424](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1424)) - `opentelemetry-instrumentation-dbapi` Fix the check for the connection already being instrumented in instrument_connection(). diff --git a/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/__init__.py b/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/__init__.py index 6323ad9bbe..a134f090fd 100644 --- a/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/__init__.py @@ -232,12 +232,13 @@ async def on_request_exception( if trace_config_ctx.span is None: return - if callable(response_hook): - response_hook(trace_config_ctx.span, params) - if trace_config_ctx.span.is_recording() and params.exception: trace_config_ctx.span.set_status(Status(StatusCode.ERROR)) trace_config_ctx.span.record_exception(params.exception) + + if callable(response_hook): + response_hook(trace_config_ctx.span, params) + _end_trace(trace_config_ctx) def _trace_config_ctx_factory(**kwargs): From 5f85a5bd74ebeae6174237fc696fee21f885f38c Mon Sep 17 00:00:00 2001 From: luke6Lh43 <52648621+luke6Lh43@users.noreply.github.com> Date: Thu, 10 Nov 2022 20:21:44 +0100 Subject: [PATCH 06/28] Remove db.name attribute from Redis instrumentation (#1427) --- CHANGELOG.md | 2 ++ .../src/opentelemetry/instrumentation/redis/util.py | 1 - .../tests/redis/test_redis_functional.py | 8 ++++++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45163e7889..cc71d38d2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#1424](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1424)) - `opentelemetry-instrumentation-dbapi` Fix the check for the connection already being instrumented in instrument_connection(). ([#1424](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1424)) +- Remove db.name attribute from Redis instrumentation + ([#1427](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1427)) ## Version 1.14.0/0.35b0 (2022-11-03) diff --git a/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/util.py b/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/util.py index c5398b42f7..fdc5cb5fd6 100644 --- a/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/util.py +++ b/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/util.py @@ -28,7 +28,6 @@ def _extract_conn_attributes(conn_kwargs): SpanAttributes.DB_SYSTEM: DbSystemValues.REDIS.value, } db = conn_kwargs.get("db", 0) - attributes[SpanAttributes.DB_NAME] = db attributes[SpanAttributes.DB_REDIS_DATABASE_INDEX] = db try: attributes[SpanAttributes.NET_PEER_NAME] = conn_kwargs.get( diff --git a/tests/opentelemetry-docker-tests/tests/redis/test_redis_functional.py b/tests/opentelemetry-docker-tests/tests/redis/test_redis_functional.py index 21d7e36b00..db82ec489c 100644 --- a/tests/opentelemetry-docker-tests/tests/redis/test_redis_functional.py +++ b/tests/opentelemetry-docker-tests/tests/redis/test_redis_functional.py @@ -37,7 +37,9 @@ def tearDown(self): def _check_span(self, span, name): self.assertEqual(span.name, name) self.assertIs(span.status.status_code, trace.StatusCode.UNSET) - self.assertEqual(span.attributes.get(SpanAttributes.DB_NAME), 0) + self.assertEqual( + span.attributes.get(SpanAttributes.DB_REDIS_DATABASE_INDEX), 0 + ) self.assertEqual( span.attributes[SpanAttributes.NET_PEER_NAME], "localhost" ) @@ -209,7 +211,9 @@ def tearDown(self): def _check_span(self, span, name): self.assertEqual(span.name, name) self.assertIs(span.status.status_code, trace.StatusCode.UNSET) - self.assertEqual(span.attributes.get(SpanAttributes.DB_NAME), 0) + self.assertEqual( + span.attributes.get(SpanAttributes.DB_REDIS_DATABASE_INDEX), 0 + ) self.assertEqual( span.attributes[SpanAttributes.NET_PEER_NAME], "localhost" ) From e0f72095c55a73fd2175a436e1139f8d909a2452 Mon Sep 17 00:00:00 2001 From: saartochner <47108628+saartochner@users.noreply.github.com> Date: Sun, 13 Nov 2022 19:32:57 +0200 Subject: [PATCH 07/28] feat: collecting messaging.* span attributes in botocore instrumentation (#1350) --- CHANGELOG.md | 2 + .../botocore/extensions/sqs.py | 43 ++++++ .../tests/test_botocore_sqs.py | 136 ++++++++++++++++++ 3 files changed, 181 insertions(+) create mode 100644 instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_sqs.py diff --git a/CHANGELOG.md b/CHANGELOG.md index cc71d38d2c..6c5b2d1a24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#1424](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1424)) - `opentelemetry-instrumentation-fastapi` Add support for regular expression matching and sanitization of HTTP headers. ([#1403](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1403)) +- `opentelemetry-instrumentation-botocore` add support for `messaging.*` in the sqs extension. + ([#1350](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1350)) ### Fixed diff --git a/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/sqs.py b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/sqs.py index 83d8e0af33..777108cbb5 100644 --- a/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/sqs.py +++ b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/sqs.py @@ -11,11 +11,19 @@ # 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 logging from opentelemetry.instrumentation.botocore.extensions.types import ( _AttributeMapT, _AwsSdkExtension, + _BotoResultT, ) +from opentelemetry.semconv.trace import SpanAttributes +from opentelemetry.trace.span import Span + +_SUPPORTED_OPERATIONS = ["SendMessage", "SendMessageBatch", "ReceiveMessage"] + +_logger = logging.getLogger(__name__) class _SqsExtension(_AwsSdkExtension): @@ -24,3 +32,38 @@ def extract_attributes(self, attributes: _AttributeMapT): if queue_url: # TODO: update when semantic conventions exist attributes["aws.queue_url"] = queue_url + attributes[SpanAttributes.MESSAGING_SYSTEM] = "aws.sqs" + attributes[SpanAttributes.MESSAGING_URL] = queue_url + try: + attributes[ + SpanAttributes.MESSAGING_DESTINATION + ] = queue_url.split("/")[-1] + except IndexError: + _logger.error( + "Could not extract messaging destination from '%s'", + queue_url, + ) + + def on_success(self, span: Span, result: _BotoResultT): + operation = self._call_context.operation + if operation in _SUPPORTED_OPERATIONS: + try: + if operation == "SendMessage": + span.set_attribute( + SpanAttributes.MESSAGING_MESSAGE_ID, + result.get("MessageId"), + ) + elif operation == "SendMessageBatch" and result.get( + "Successful" + ): + span.set_attribute( + SpanAttributes.MESSAGING_MESSAGE_ID, + result["Successful"][0]["MessageId"], + ) + elif operation == "ReceiveMessage" and result.get("Messages"): + span.set_attribute( + SpanAttributes.MESSAGING_MESSAGE_ID, + result["Messages"][0]["MessageId"], + ) + except (IndexError, KeyError): + _logger.error("Could not extract the messaging message ID") diff --git a/instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_sqs.py b/instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_sqs.py new file mode 100644 index 0000000000..6bcffd9274 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_sqs.py @@ -0,0 +1,136 @@ +import botocore.session +from moto import mock_sqs + +from opentelemetry.instrumentation.botocore import BotocoreInstrumentor +from opentelemetry.semconv.trace import SpanAttributes +from opentelemetry.test.test_base import TestBase + + +class TestSqsExtension(TestBase): + def setUp(self): + super().setUp() + BotocoreInstrumentor().instrument() + + session = botocore.session.get_session() + session.set_credentials( + access_key="access-key", secret_key="secret-key" + ) + self.region = "us-west-2" + self.client = session.create_client("sqs", region_name=self.region) + + def tearDown(self): + super().tearDown() + BotocoreInstrumentor().uninstrument() + + @mock_sqs + def test_sqs_messaging_send_message(self): + create_queue_result = self.client.create_queue( + QueueName="test_queue_name" + ) + queue_url = create_queue_result["QueueUrl"] + response = self.client.send_message( + QueueUrl=queue_url, MessageBody="content" + ) + + spans = self.memory_exporter.get_finished_spans() + assert spans + self.assertEqual(len(spans), 2) + span = spans[1] + self.assertEqual( + span.attributes[SpanAttributes.MESSAGING_SYSTEM], "aws.sqs" + ) + self.assertEqual( + span.attributes[SpanAttributes.MESSAGING_URL], queue_url + ) + self.assertEqual( + span.attributes[SpanAttributes.MESSAGING_DESTINATION], + "test_queue_name", + ) + self.assertEqual( + span.attributes[SpanAttributes.MESSAGING_MESSAGE_ID], + response["MessageId"], + ) + + @mock_sqs + def test_sqs_messaging_send_message_batch(self): + create_queue_result = self.client.create_queue( + QueueName="test_queue_name" + ) + queue_url = create_queue_result["QueueUrl"] + response = self.client.send_message_batch( + QueueUrl=queue_url, + Entries=[ + {"Id": "1", "MessageBody": "content"}, + {"Id": "2", "MessageBody": "content2"}, + ], + ) + + spans = self.memory_exporter.get_finished_spans() + assert spans + self.assertEqual(len(spans), 2) + span = spans[1] + self.assertEqual(span.attributes["rpc.method"], "SendMessageBatch") + self.assertEqual( + span.attributes[SpanAttributes.MESSAGING_SYSTEM], "aws.sqs" + ) + self.assertEqual( + span.attributes[SpanAttributes.MESSAGING_URL], queue_url + ) + self.assertEqual( + span.attributes[SpanAttributes.MESSAGING_DESTINATION], + "test_queue_name", + ) + self.assertEqual( + span.attributes[SpanAttributes.MESSAGING_MESSAGE_ID], + response["Successful"][0]["MessageId"], + ) + + @mock_sqs + def test_sqs_messaging_receive_message(self): + create_queue_result = self.client.create_queue( + QueueName="test_queue_name" + ) + queue_url = create_queue_result["QueueUrl"] + self.client.send_message(QueueUrl=queue_url, MessageBody="content") + message_result = self.client.receive_message( + QueueUrl=create_queue_result["QueueUrl"] + ) + + spans = self.memory_exporter.get_finished_spans() + assert spans + self.assertEqual(len(spans), 3) + span = spans[-1] + self.assertEqual(span.attributes["rpc.method"], "ReceiveMessage") + self.assertEqual( + span.attributes[SpanAttributes.MESSAGING_SYSTEM], "aws.sqs" + ) + self.assertEqual( + span.attributes[SpanAttributes.MESSAGING_URL], queue_url + ) + self.assertEqual( + span.attributes[SpanAttributes.MESSAGING_DESTINATION], + "test_queue_name", + ) + self.assertEqual( + span.attributes[SpanAttributes.MESSAGING_MESSAGE_ID], + message_result["Messages"][0]["MessageId"], + ) + + @mock_sqs + def test_sqs_messaging_failed_operation(self): + with self.assertRaises(Exception): + self.client.send_message( + QueueUrl="non-existing", MessageBody="content" + ) + + spans = self.memory_exporter.get_finished_spans() + assert spans + self.assertEqual(len(spans), 1) + span = spans[0] + self.assertEqual(span.attributes["rpc.method"], "SendMessage") + self.assertEqual( + span.attributes[SpanAttributes.MESSAGING_SYSTEM], "aws.sqs" + ) + self.assertEqual( + span.attributes[SpanAttributes.MESSAGING_URL], "non-existing" + ) From 47512c84b99ff5366492886821d3ba1b962e90f3 Mon Sep 17 00:00:00 2001 From: Srikanth Chekuri Date: Tue, 15 Nov 2022 06:17:14 +0530 Subject: [PATCH 08/28] fix: No module named httpx (#1441) --- .../opentelemetry-instrumentation-fastapi/pyproject.toml | 3 ++- .../opentelemetry-instrumentation-starlette/pyproject.toml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-fastapi/pyproject.toml b/instrumentation/opentelemetry-instrumentation-fastapi/pyproject.toml index aedda18cb9..4d21fd2c80 100644 --- a/instrumentation/opentelemetry-instrumentation-fastapi/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-fastapi/pyproject.toml @@ -39,7 +39,8 @@ instruments = [ test = [ "opentelemetry-instrumentation-fastapi[instruments]", "opentelemetry-test-utils == 0.36b0.dev", - "requests ~= 2.23.0", # needed for testclient + "requests ~= 2.23", # needed for testclient + "httpx ~= 0.22", # needed for testclient ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-starlette/pyproject.toml b/instrumentation/opentelemetry-instrumentation-starlette/pyproject.toml index dfe0bbfcb8..e48c2d7963 100644 --- a/instrumentation/opentelemetry-instrumentation-starlette/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-starlette/pyproject.toml @@ -39,7 +39,8 @@ instruments = [ test = [ "opentelemetry-instrumentation-starlette[instruments]", "opentelemetry-test-utils == 0.36b0.dev", - "requests ~= 2.23.0", # needed for testclient + "requests ~= 2.23", # needed for testclient + "httpx ~= 0.22", # needed for testclient ] [project.entry-points.opentelemetry_instrumentor] From 868049ecd936bf2d1dc00f8fd6c34f933d89c5ba Mon Sep 17 00:00:00 2001 From: Dan Rogers Date: Mon, 14 Nov 2022 20:35:24 -0500 Subject: [PATCH 09/28] Add support for regular expression matching and sanitizing of headers in Starlette. (#1404) --- CHANGELOG.md | 2 + .../instrumentation/starlette/__init__.py | 95 ++++++++++++++----- .../tests/test_starlette_instrumentation.py | 89 +++++++++++++++-- 3 files changed, 152 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c5b2d1a24..d23cf8cedd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#1403](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1403)) - `opentelemetry-instrumentation-botocore` add support for `messaging.*` in the sqs extension. ([#1350](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1350)) +- `opentelemetry-instrumentation-starlette` Add support for regular expression matching and sanitization of HTTP headers. + ([#1404](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1404)) ### Fixed diff --git a/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py b/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py index 65e97e9a65..cafb9f1365 100644 --- a/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py @@ -36,8 +36,9 @@ def home(request): Exclude lists ************* -To exclude certain URLs from being tracked, set the environment variable ``OTEL_PYTHON_STARLETTE_EXCLUDED_URLS`` -(or ``OTEL_PYTHON_EXCLUDED_URLS`` as fallback) with comma delimited regexes representing which URLs to exclude. +To exclude certain URLs from tracking, set the environment variable ``OTEL_PYTHON_STARLETTE_EXCLUDED_URLS`` +(or ``OTEL_PYTHON_EXCLUDED_URLS`` to cover all instrumentations) to a string of comma delimited regexes that match the +URLs. For example, @@ -50,9 +51,14 @@ def home(request): Request/Response hooks ********************** -Utilize request/response hooks to execute custom logic to be performed before/after performing a request. The server request hook takes in a server span and ASGI -scope object for every incoming request. The client request hook is called with the internal span and an ASGI scope which is sent as a dictionary for when the method receive is called. -The client response hook is called with the internal span and an ASGI event which is sent as a dictionary for when the method send is called. +This instrumentation supports request and response hooks. These are functions that get called +right after a span is created for a request and right before the span is finished for the response. + +- The server request hook is passed a server span and ASGI scope object for every incoming request. +- The client request hook is called with the internal span and an ASGI scope when the method ``receive`` is called. +- The client response hook is called with the internal span and an ASGI event when the method ``send`` is called. + +For example, .. code-block:: python @@ -70,54 +76,93 @@ def client_response_hook(span: Span, message: dict): Capture HTTP request and response headers ***************************************** -You can configure the agent to capture predefined HTTP headers as span attributes, according to the `semantic convention `_. +You can configure the agent to capture specified HTTP headers as span attributes, according to the +`semantic convention `_. Request headers *************** -To capture predefined HTTP request headers as span attributes, set the environment variable ``OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST`` -to a comma-separated list of HTTP header names. +To capture HTTP request headers as span attributes, set the environment variable +``OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST`` to a comma delimited list of HTTP header names. For example, - :: export OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST="content-type,custom_request_header" -will extract ``content-type`` and ``custom_request_header`` from request headers and add them as span attributes. +will extract ``content-type`` and ``custom_request_header`` from the request headers and add them as span attributes. + +Request header names in Starlette are case-insensitive. So, giving the header name as ``CUStom-Header`` in the +environment variable will capture the header named ``custom-header``. + +Regular expressions may also be used to match multiple headers that correspond to the given pattern. For example: +:: -It is recommended that you should give the correct names of the headers to be captured in the environment variable. -Request header names in starlette are case insensitive. So, giving header name as ``CUStom-Header`` in environment variable will be able capture header with name ``custom-header``. + export OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST="Accept.*,X-.*" -The name of the added span attribute will follow the format ``http.request.header.`` where ```` being the normalized HTTP header name (lowercase, with - characters replaced by _ ). -The value of the attribute will be single item list containing all the header values. +Would match all request headers that start with ``Accept`` and ``X-``. -Example of the added span attribute, +Additionally, the special keyword ``all`` can be used to capture all request headers. +:: + + export OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST="all" + +The name of the added span attribute will follow the format ``http.request.header.`` where ```` +is the normalized HTTP header name (lowercase, with ``-`` replaced by ``_``). The value of the attribute will be a +single item list containing all the header values. + +For example: ``http.request.header.custom_request_header = [","]`` Response headers **************** -To capture predefined HTTP response headers as span attributes, set the environment variable ``OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE`` -to a comma-separated list of HTTP header names. +To capture HTTP response headers as span attributes, set the environment variable +``OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE`` to a comma delimited list of HTTP header names. For example, - :: export OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE="content-type,custom_response_header" -will extract ``content-type`` and ``custom_response_header`` from response headers and add them as span attributes. +will extract ``content-type`` and ``custom_response_header`` from the response headers and add them as span attributes. -It is recommended that you should give the correct names of the headers to be captured in the environment variable. -Response header names captured in starlette are case insensitive. So, giving header name as ``CUStomHeader`` in environment variable will be able capture header with name ``customheader``. +Response header names in Starlette are case-insensitive. So, giving the header name as ``CUStom-Header`` in the +environment variable will capture the header named ``custom-header``. -The name of the added span attribute will follow the format ``http.response.header.`` where ```` being the normalized HTTP header name (lowercase, with - characters replaced by _ ). -The value of the attribute will be single item list containing all the header values. +Regular expressions may also be used to match multiple headers that correspond to the given pattern. For example: +:: -Example of the added span attribute, + export OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE="Content.*,X-.*" + +Would match all response headers that start with ``Content`` and ``X-``. + +Additionally, the special keyword ``all`` can be used to capture all response headers. +:: + + export OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE="all" + +The name of the added span attribute will follow the format ``http.response.header.`` where ```` +is the normalized HTTP header name (lowercase, with ``-`` replaced by ``_``). The value of the attribute will be a +single item list containing all the header values. + +For example: ``http.response.header.custom_response_header = [","]`` +Sanitizing headers +****************** +In order to prevent storing sensitive data such as personally identifiable information (PII), session keys, passwords, +etc, set the environment variable ``OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS`` +to a comma delimited list of HTTP header names to be sanitized. Regexes may be used, and all header names will be +matched in a case-insensitive manner. + +For example, +:: + + export OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS=".*session.*,set-cookie" + +will replace the value of headers such as ``session-id`` and ``set-cookie`` with ``[REDACTED]`` in the span. + Note: - Environment variable names to capture http headers are still experimental, and thus are subject to change. + The environment variable names used to capture HTTP headers are still experimental, and thus are subject to change. API --- diff --git a/instrumentation/opentelemetry-instrumentation-starlette/tests/test_starlette_instrumentation.py b/instrumentation/opentelemetry-instrumentation-starlette/tests/test_starlette_instrumentation.py index b168643211..a367ab0e42 100644 --- a/instrumentation/opentelemetry-instrumentation-starlette/tests/test_starlette_instrumentation.py +++ b/instrumentation/opentelemetry-instrumentation-starlette/tests/test_starlette_instrumentation.py @@ -38,6 +38,7 @@ set_tracer_provider, ) from opentelemetry.util.http import ( + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS, OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST, OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE, _active_requests_count_attrs, @@ -384,21 +385,12 @@ def create_app(self): def setUp(self): super().setUp() - self.env_patch = patch.dict( - "os.environ", - { - OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3", - OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3", - }, - ) - self.env_patch.start() self._instrumentor = otel_starlette.StarletteInstrumentor() self._app = self.create_app() self._client = TestClient(self._app) def tearDown(self) -> None: super().tearDown() - self.env_patch.stop() with self.disable_logging(): self._instrumentor.uninstrument() @@ -413,6 +405,9 @@ def _(request): headers={ "custom-test-header-1": "test-header-value-1", "custom-test-header-2": "test-header-value-2", + "my-custom-regex-header-1": "my-custom-regex-value-1,my-custom-regex-value-2", + "My-Custom-Regex-Header-2": "my-custom-regex-value-3,my-custom-regex-value-4", + "my-secret-header": "my-secret-value", }, ) @@ -426,6 +421,15 @@ async def _(websocket: WebSocket) -> None: "headers": [ (b"custom-test-header-1", b"test-header-value-1"), (b"custom-test-header-2", b"test-header-value-2"), + ( + b"my-custom-regex-header-1", + b"my-custom-regex-value-1,my-custom-regex-value-2", + ), + ( + b"My-Custom-Regex-Header-2", + b"my-custom-regex-value-3,my-custom-regex-value-4", + ), + (b"my-secret-header", b"my-secret-value"), ], } ) @@ -437,6 +441,14 @@ async def _(websocket: WebSocket) -> None: return app +@patch.dict( + "os.environ", + { + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS: ".*my-secret.*", + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3,Regex-Test-Header-.*,Regex-Invalid-Test-Header-.*,.*my-secret.*", + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3,my-custom-regex-header-.*,invalid-regex-header-.*,.*my-secret.*", + }, +) class TestHTTPAppWithCustomHeaders(TestBaseWithCustomHeaders): def test_custom_request_headers_in_span_attributes(self): expected = { @@ -446,12 +458,20 @@ def test_custom_request_headers_in_span_attributes(self): "http.request.header.custom_test_header_2": ( "test-header-value-2", ), + "http.request.header.regex_test_header_1": ("Regex Test Value 1",), + "http.request.header.regex_test_header_2": ( + "RegexTestValue2,RegexTestValue3", + ), + "http.request.header.my_secret_header": ("[REDACTED]",), } resp = self._client.get( "/foobar", headers={ "custom-test-header-1": "test-header-value-1", "custom-test-header-2": "test-header-value-2", + "Regex-Test-Header-1": "Regex Test Value 1", + "regex-test-header-2": "RegexTestValue2,RegexTestValue3", + "My-Secret-Header": "My Secret Value", }, ) self.assertEqual(200, resp.status_code) @@ -464,6 +484,13 @@ def test_custom_request_headers_in_span_attributes(self): self.assertSpanHasAttributes(server_span, expected) + @patch.dict( + "os.environ", + { + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS: ".*my-secret.*", + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3,Regex-Test-Header-.*,Regex-Invalid-Test-Header-.*,.*my-secret.*", + }, + ) def test_custom_request_headers_not_in_span_attributes(self): not_expected = { "http.request.header.custom_test_header_3": ( @@ -475,6 +502,9 @@ def test_custom_request_headers_not_in_span_attributes(self): headers={ "custom-test-header-1": "test-header-value-1", "custom-test-header-2": "test-header-value-2", + "Regex-Test-Header-1": "Regex Test Value 1", + "regex-test-header-2": "RegexTestValue2,RegexTestValue3", + "My-Secret-Header": "My Secret Value", }, ) self.assertEqual(200, resp.status_code) @@ -496,6 +526,13 @@ def test_custom_response_headers_in_span_attributes(self): "http.response.header.custom_test_header_2": ( "test-header-value-2", ), + "http.response.header.my_custom_regex_header_1": ( + "my-custom-regex-value-1,my-custom-regex-value-2", + ), + "http.response.header.my_custom_regex_header_2": ( + "my-custom-regex-value-3,my-custom-regex-value-4", + ), + "http.response.header.my_secret_header": ("[REDACTED]",), } resp = self._client.get("/foobar") self.assertEqual(200, resp.status_code) @@ -527,6 +564,14 @@ def test_custom_response_headers_not_in_span_attributes(self): self.assertNotIn(key, server_span.attributes) +@patch.dict( + "os.environ", + { + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS: ".*my-secret.*", + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3,Regex-Test-Header-.*,Regex-Invalid-Test-Header-.*,.*my-secret.*", + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3,my-custom-regex-header-.*,invalid-regex-header-.*,.*my-secret.*", + }, +) class TestWebSocketAppWithCustomHeaders(TestBaseWithCustomHeaders): def test_custom_request_headers_in_span_attributes(self): expected = { @@ -536,12 +581,20 @@ def test_custom_request_headers_in_span_attributes(self): "http.request.header.custom_test_header_2": ( "test-header-value-2", ), + "http.request.header.regex_test_header_1": ("Regex Test Value 1",), + "http.request.header.regex_test_header_2": ( + "RegexTestValue2,RegexTestValue3", + ), + "http.request.header.my_secret_header": ("[REDACTED]",), } with self._client.websocket_connect( "/foobar_web", headers={ "custom-test-header-1": "test-header-value-1", "custom-test-header-2": "test-header-value-2", + "Regex-Test-Header-1": "Regex Test Value 1", + "regex-test-header-2": "RegexTestValue2,RegexTestValue3", + "My-Secret-Header": "My Secret Value", }, ) as websocket: data = websocket.receive_json() @@ -566,6 +619,9 @@ def test_custom_request_headers_not_in_span_attributes(self): headers={ "custom-test-header-1": "test-header-value-1", "custom-test-header-2": "test-header-value-2", + "Regex-Test-Header-1": "Regex Test Value 1", + "regex-test-header-2": "RegexTestValue2,RegexTestValue3", + "My-Secret-Header": "My Secret Value", }, ) as websocket: data = websocket.receive_json() @@ -589,6 +645,13 @@ def test_custom_response_headers_in_span_attributes(self): "http.response.header.custom_test_header_2": ( "test-header-value-2", ), + "http.response.header.my_custom_regex_header_1": ( + "my-custom-regex-value-1,my-custom-regex-value-2", + ), + "http.response.header.my_custom_regex_header_2": ( + "my-custom-regex-value-3,my-custom-regex-value-4", + ), + "http.response.header.my_secret_header": ("[REDACTED]",), } with self._client.websocket_connect("/foobar_web") as websocket: data = websocket.receive_json() @@ -624,6 +687,14 @@ def test_custom_response_headers_not_in_span_attributes(self): self.assertNotIn(key, server_span.attributes) +@patch.dict( + "os.environ", + { + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS: ".*my-secret.*", + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3,Regex-Test-Header-.*,Regex-Invalid-Test-Header-.*,.*my-secret.*", + OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE: "Custom-Test-Header-1,Custom-Test-Header-2,Custom-Test-Header-3,my-custom-regex-header-.*,invalid-regex-header-.*,.*my-secret.*", + }, +) class TestNonRecordingSpanWithCustomHeaders(TestBaseWithCustomHeaders): def setUp(self): super().setUp() From ffb995d28b9c632b9fafe31867208dc585e24542 Mon Sep 17 00:00:00 2001 From: Robert Ayrapetyan Date: Tue, 15 Nov 2022 04:42:56 -0800 Subject: [PATCH 10/28] opentelemetry-instrumentation-kafka-python: wait for metadata (#1260) * fix kafka: wait for metadata Kafka's instance metadata could be unavailable (because it's being filled asynchronously). extract_send_partition() is based on a metadata, so it may return `None` for partition and later cause all type of warning messages (e.g. `Invalid type NoneType for attribute value. Expected one of ['bool', 'str', 'bytes', 'int', 'float'] or a sequence of those types`). The proposed fix makes sure metadata is pre-populated (based on https://github.com/dpkp/kafka-python/blob/4d598055dab7da99e41bfcceffa8462b32931cdd/kafka/producer/kafka.py#L579). I'm just not sure if we should wrap `_wait_on_metadata` into try\except, maybe just passing Exception to the caller would be a better idea... * upd: changelog * fix: changelog * fix: import KafkaErrors * fix: tox -e lint errors * fix: refact and added unit test Co-authored-by: Srikanth Chekuri Co-authored-by: Leighton Chen Co-authored-by: Diego Hurtado --- CHANGELOG.md | 2 ++ .../instrumentation/kafka/utils.py | 6 ++--- .../tests/test_utils.py | 26 +++++++++++++++++++ 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d23cf8cedd..626c29bb2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -106,6 +106,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- `opentelemetry-instrumentation-kafka-python`: wait for metadata + ([#1260](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1260)) - `opentelemetry-instrumentation-boto3sqs` Make propagation compatible with other SQS instrumentations, add 'messaging.url' span attribute, and fix missing package dependencies. ([#1234](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1234)) - `opentelemetry-instrumentation-pymongo` Change span names to not contain queries but only database name and command name diff --git a/instrumentation/opentelemetry-instrumentation-kafka-python/src/opentelemetry/instrumentation/kafka/utils.py b/instrumentation/opentelemetry-instrumentation-kafka-python/src/opentelemetry/instrumentation/kafka/utils.py index 52344ceaff..97880970c9 100644 --- a/instrumentation/opentelemetry-instrumentation-kafka-python/src/opentelemetry/instrumentation/kafka/utils.py +++ b/instrumentation/opentelemetry-instrumentation-kafka-python/src/opentelemetry/instrumentation/kafka/utils.py @@ -75,9 +75,9 @@ def extract_send_partition(instance, args, kwargs): ): return None - all_partitions = instance._metadata.partitions_for_topic(topic) - if all_partitions is None or len(all_partitions) == 0: - return None + instance._wait_on_metadata( + topic, instance.config["max_block_ms"] / 1000.0 + ) return instance._partition( topic, partition, key, value, key_bytes, value_bytes diff --git a/instrumentation/opentelemetry-instrumentation-kafka-python/tests/test_utils.py b/instrumentation/opentelemetry-instrumentation-kafka-python/tests/test_utils.py index 74d359bfde..7da1ed0596 100644 --- a/instrumentation/opentelemetry-instrumentation-kafka-python/tests/test_utils.py +++ b/instrumentation/opentelemetry-instrumentation-kafka-python/tests/test_utils.py @@ -1,6 +1,7 @@ from unittest import TestCase, mock from opentelemetry.instrumentation.kafka.utils import ( + KafkaPropertiesExtractor, _create_consumer_span, _get_span_name, _kafka_getter, @@ -208,3 +209,28 @@ def test_create_consumer_span( span, record, self.args, self.kwargs ) detach.assert_called_once_with(attach.return_value) + + @mock.patch( + "opentelemetry.instrumentation.kafka.utils.KafkaPropertiesExtractor" + ) + def test_kafka_properties_extractor( + self, + kafka_properties_extractor: mock.MagicMock, + ): + kafka_properties_extractor._serialize.return_value = None + kafka_properties_extractor._partition.return_value = "partition" + assert ( + KafkaPropertiesExtractor.extract_send_partition( + kafka_properties_extractor, self.args, self.kwargs + ) + == "partition" + ) + kafka_properties_extractor._wait_on_metadata.side_effect = Exception( + "mocked error" + ) + assert ( + KafkaPropertiesExtractor.extract_send_partition( + kafka_properties_extractor, self.args, self.kwargs + ) + is None + ) From 725944d3685c9d50ad14fd88e02b1d67ea780fc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isra=C3=ABl=20Hall=C3=A9?= Date: Tue, 15 Nov 2022 20:30:22 -0500 Subject: [PATCH 11/28] Urllib3 instrumentation can now retrieve urlopen body parameter when used as positional (#1398) --- CHANGELOG.md | 9 +++++--- .../instrumentation/urllib3/__init__.py | 1 + .../tests/test_urllib3_integration.py | 21 +++++++++++++++++++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 626c29bb2b..cfe3bc8d16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +- Add metric instrumentation for tornado + ([#1252](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1252)) + ### Added - `opentelemetry-instrumentation-pymysql` Add tests for commit() and rollback(). @@ -20,9 +23,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed -- Fix bug in Urllib instrumentation - add status code to span attributes only if the status code is not None. +- Fix bug in Urllib instrumentation - add status code to span attributes only if the status code is not None. ([#1430](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1430)) -- `opentelemetry-instrumentation-aiohttp-client` Allow overriding of status in response hook. +- `opentelemetry-instrumentation-aiohttp-client` Allow overriding of status in response hook. ([#1394](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1394)) - `opentelemetry-instrumentation-pymysql` Fix dbapi connection instrument wrapper has no _sock member. ([#1424](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1424)) @@ -88,7 +91,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- `opentelemetry-instrumentation-grpc` add supports to filter requests to instrument. +- `opentelemetry-instrumentation-grpc` add supports to filter requests to instrument. ([#1241](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1241)) - Flask sqlalchemy psycopg2 integration ([#1224](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1224)) diff --git a/instrumentation/opentelemetry-instrumentation-urllib3/src/opentelemetry/instrumentation/urllib3/__init__.py b/instrumentation/opentelemetry-instrumentation-urllib3/src/opentelemetry/instrumentation/urllib3/__init__.py index 59d7cd35bd..02f701068b 100644 --- a/instrumentation/opentelemetry-instrumentation-urllib3/src/opentelemetry/instrumentation/urllib3/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-urllib3/src/opentelemetry/instrumentation/urllib3/__init__.py @@ -118,6 +118,7 @@ def response_hook(span, request, response): _URL_OPEN_ARG_TO_INDEX_MAPPING = { "method": 0, "url": 1, + "body": 2, } diff --git a/instrumentation/opentelemetry-instrumentation-urllib3/tests/test_urllib3_integration.py b/instrumentation/opentelemetry-instrumentation-urllib3/tests/test_urllib3_integration.py index 2e70a9d2ab..ed2f314dcb 100644 --- a/instrumentation/opentelemetry-instrumentation-urllib3/tests/test_urllib3_integration.py +++ b/instrumentation/opentelemetry-instrumentation-urllib3/tests/test_urllib3_integration.py @@ -309,3 +309,24 @@ def request_hook(span, request, headers, body): ) self.assertIn("request_hook_body", span.attributes) self.assertEqual(span.attributes["request_hook_body"], body) + + def test_request_positional_body(self): + def request_hook(span, request, headers, body): + span.set_attribute("request_hook_body", body) + + URLLib3Instrumentor().uninstrument() + URLLib3Instrumentor().instrument( + request_hook=request_hook, + ) + + body = "param1=1¶m2=2" + + pool = urllib3.HTTPConnectionPool("httpbin.org") + response = pool.urlopen("POST", "/status/200", body) + + self.assertEqual(b"Hello!", response.data) + + span = self.assert_span() + + self.assertIn("request_hook_body", span.attributes) + self.assertEqual(span.attributes["request_hook_body"], body) From c6134843900e2eeb1b8b3383a897b38cc0905c38 Mon Sep 17 00:00:00 2001 From: Diego Hurtado Date: Thu, 17 Nov 2022 19:45:34 +0100 Subject: [PATCH 12/28] Remove mention to eachdist (#1445) --- CONTRIBUTING.md | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ee5f108be6..4d003ea11c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -27,27 +27,32 @@ context, reviewing PRs, and helping those get merged. Buddies will not be availa ## Development -To quickly get up and running, you can use the `scripts/eachdist.py` tool that -ships with this project. First create a virtualenv and activate it. -Then run `python scripts/eachdist.py develop` to install all required packages -as well as the project's packages themselves (in `--editable` mode). -You can then run `scripts/eachdist.py test` to test everything or -`scripts/eachdist.py lint` to lint everything (fixing anything that is auto-fixable). +This project uses [tox](https://tox.readthedocs.io) to automate +some aspects of development, including testing against multiple Python versions. +To install `tox`, run: -Additionally, this project uses [`tox`](https://tox.readthedocs.io) to automate some aspects -of development, including testing against multiple Python versions. +```console +$ pip install tox +``` -You can run: +You can run `tox` with the following arguments: - `tox` to run all existing tox commands, including unit tests for all packages under multiple Python versions -- `tox -e py37-test-flask` to e.g. run the Flask tests under a specific +- `tox -e docs` to regenerate the API docs +- `tox -e py37-test-instrumentation-aiopg` to e.g. run the aiopg instrumentation unit tests under a specific Python version +- `tox -e spellcheck` to run a spellcheck on all the code - `tox -e lint` to run lint checks on all code -- `tox -e spellcheck` to run spell check on the code + +`black` and `isort` are executed when `tox -e lint` is run. The reported errors can be tedious to fix manually. +An easier way to do so is: + +1. Run `.tox/lint/bin/black .` +2. Run `.tox/lint/bin/isort .` See -[`tox.ini`](https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/tox.ini) +[`tox.ini`](https://github.com/open-telemetry/opentelemetry-python/blob/main/tox.ini) for more detail on available tox commands. ### Benchmarks From be4ceec08cb1b3097d7aa25c4efc358ddd050bdb Mon Sep 17 00:00:00 2001 From: Dan Rogers Date: Fri, 18 Nov 2022 08:01:07 -0500 Subject: [PATCH 13/28] Strip leading comments from SQL queries when generating the span name. (#1434) Co-authored-by: Srikanth Chekuri Co-authored-by: Diego Hurtado --- CHANGELOG.md | 2 ++ .../instrumentation/asyncpg/__init__.py | 5 +++- .../instrumentation/dbapi/__init__.py | 5 +++- .../tests/test_dbapi_integration.py | 8 ++++- .../instrumentation/psycopg2/__init__.py | 3 +- .../tests/test_psycopg2_integration.py | 26 +++++++++++++++++ .../instrumentation/sqlalchemy/engine.py | 7 ++++- .../tests/test_sqlalchemy.py | 14 ++++++++- .../tests/asyncpg/test_asyncpg_functional.py | 29 +++++++++++++++++++ 9 files changed, 93 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cfe3bc8d16..b95e366603 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#1350](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1350)) - `opentelemetry-instrumentation-starlette` Add support for regular expression matching and sanitization of HTTP headers. ([#1404](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1404)) +- Strip leading comments from SQL queries when generating the span name. + ([#1434](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1434)) ### Fixed diff --git a/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/__init__.py b/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/__init__.py index e4074885f2..f1fd43b55d 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/__init__.py @@ -34,6 +34,7 @@ --- """ +import re from typing import Collection import asyncpg @@ -99,6 +100,7 @@ def __init__(self, capture_parameters=False): super().__init__() self.capture_parameters = capture_parameters self._tracer = None + self._leading_comment_remover = re.compile(r"^/\*.*?\*/") def instrumentation_dependencies(self) -> Collection[str]: return _instruments @@ -135,7 +137,8 @@ async def _do_execute(self, func, instance, args, kwargs): name = args[0] if args[0] else params.get("database", "postgresql") try: - name = name.split()[0] + # Strip leading comments so we get the operation name. + name = self._leading_comment_remover.sub("", name).split()[0] except IndexError: name = "" diff --git a/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py b/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py index c2ee79e811..87b1a8d656 100644 --- a/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py @@ -39,6 +39,7 @@ import functools import logging +import re import typing import wrapt @@ -368,6 +369,7 @@ def __init__(self, db_api_integration: DatabaseApiIntegration) -> None: else {} ) self._connect_module = self._db_api_integration.connect_module + self._leading_comment_remover = re.compile(r"^/\*.*?\*/") def _populate_span( self, @@ -397,7 +399,8 @@ def _populate_span( def get_operation_name(self, cursor, args): # pylint: disable=no-self-use if args and isinstance(args[0], str): - return args[0].split()[0] + # Strip leading comments so we get the operation name. + return self._leading_comment_remover.sub("", args[0]).split()[0] return "" def get_statement(self, cursor, args): # pylint: disable=no-self-use diff --git a/instrumentation/opentelemetry-instrumentation-dbapi/tests/test_dbapi_integration.py b/instrumentation/opentelemetry-instrumentation-dbapi/tests/test_dbapi_integration.py index 8502bd46ee..9f9371ad66 100644 --- a/instrumentation/opentelemetry-instrumentation-dbapi/tests/test_dbapi_integration.py +++ b/instrumentation/opentelemetry-instrumentation-dbapi/tests/test_dbapi_integration.py @@ -88,11 +88,17 @@ def test_span_name(self): query""" ) cursor.execute("tab\tseparated query") + cursor.execute("/* leading comment */ query") + cursor.execute("/* leading comment */ query /* trailing comment */") + cursor.execute("query /* trailing comment */") spans_list = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans_list), 3) + self.assertEqual(len(spans_list), 6) self.assertEqual(spans_list[0].name, "Test") self.assertEqual(spans_list[1].name, "multi") self.assertEqual(spans_list[2].name, "tab") + self.assertEqual(spans_list[3].name, "query") + self.assertEqual(spans_list[4].name, "query") + self.assertEqual(spans_list[5].name, "query") def test_span_succeeded_with_capture_of_statement_parameters(self): connection_props = { diff --git a/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/__init__.py b/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/__init__.py index ebad55cf2a..de2e49f4c3 100644 --- a/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/__init__.py @@ -216,7 +216,8 @@ def get_operation_name(self, cursor, args): statement = statement.as_string(cursor) if isinstance(statement, str): - return statement.split()[0] + # Strip leading comments so we get the operation name. + return self._leading_comment_remover.sub("", statement).split()[0] return "" diff --git a/instrumentation/opentelemetry-instrumentation-psycopg2/tests/test_psycopg2_integration.py b/instrumentation/opentelemetry-instrumentation-psycopg2/tests/test_psycopg2_integration.py index f516a07882..5eff8b444f 100644 --- a/instrumentation/opentelemetry-instrumentation-psycopg2/tests/test_psycopg2_integration.py +++ b/instrumentation/opentelemetry-instrumentation-psycopg2/tests/test_psycopg2_integration.py @@ -116,6 +116,32 @@ def test_instrumentor(self): spans_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans_list), 1) + def test_span_name(self): + Psycopg2Instrumentor().instrument() + + cnx = psycopg2.connect(database="test") + + cursor = cnx.cursor() + + cursor.execute("Test query", ("param1Value", False)) + cursor.execute( + """multi + line + query""" + ) + cursor.execute("tab\tseparated query") + cursor.execute("/* leading comment */ query") + cursor.execute("/* leading comment */ query /* trailing comment */") + cursor.execute("query /* trailing comment */") + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 6) + self.assertEqual(spans_list[0].name, "Test") + self.assertEqual(spans_list[1].name, "multi") + self.assertEqual(spans_list[2].name, "tab") + self.assertEqual(spans_list[3].name, "query") + self.assertEqual(spans_list[4].name, "query") + self.assertEqual(spans_list[5].name, "query") + # pylint: disable=unused-argument def test_not_recording(self): mock_tracer = mock.Mock() diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py index 73941200c2..2965f45085 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. import os +import re from sqlalchemy.event import listen # pylint: disable=no-name-in-module @@ -100,6 +101,7 @@ def __init__( self.vendor = _normalize_vendor(engine.name) self.enable_commenter = enable_commenter self.commenter_options = commenter_options if commenter_options else {} + self._leading_comment_remover = re.compile(r"^/\*.*?\*/") listen( engine, "before_cursor_execute", self._before_cur_exec, retval=True @@ -115,7 +117,10 @@ def _operation_name(self, db_name, statement): # use cases and uses the SQL statement in span name correctly as per the spec. # For some very special cases it might not record the correct statement if the SQL # dialect is too weird but in any case it shouldn't break anything. - parts.append(statement.split()[0]) + # Strip leading comments so we get the operation name. + parts.append( + self._leading_comment_remover.sub("", statement).split()[0] + ) if db_name: parts.append(db_name) if not parts: diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py index 5fa74376f9..913b7d3c5e 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py @@ -42,15 +42,27 @@ def test_trace_integration(self): ) cnx = engine.connect() cnx.execute("SELECT 1 + 1;").fetchall() + cnx.execute("/* leading comment */ SELECT 1 + 1;").fetchall() + cnx.execute( + "/* leading comment */ SELECT 1 + 1; /* trailing comment */" + ).fetchall() + cnx.execute("SELECT 1 + 1; /* trailing comment */").fetchall() spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 2) + self.assertEqual(len(spans), 5) # first span - the connection to the db self.assertEqual(spans[0].name, "connect") self.assertEqual(spans[0].kind, trace.SpanKind.CLIENT) # second span - the query itself self.assertEqual(spans[1].name, "SELECT :memory:") self.assertEqual(spans[1].kind, trace.SpanKind.CLIENT) + # spans for queries with comments + self.assertEqual(spans[2].name, "SELECT :memory:") + self.assertEqual(spans[2].kind, trace.SpanKind.CLIENT) + self.assertEqual(spans[3].name, "SELECT :memory:") + self.assertEqual(spans[3].kind, trace.SpanKind.CLIENT) + self.assertEqual(spans[4].name, "SELECT :memory:") + self.assertEqual(spans[4].kind, trace.SpanKind.CLIENT) def test_instrument_two_engines(self): engine_1 = create_engine("sqlite:///:memory:") diff --git a/tests/opentelemetry-docker-tests/tests/asyncpg/test_asyncpg_functional.py b/tests/opentelemetry-docker-tests/tests/asyncpg/test_asyncpg_functional.py index 8af57aa658..259c99dff4 100644 --- a/tests/opentelemetry-docker-tests/tests/asyncpg/test_asyncpg_functional.py +++ b/tests/opentelemetry-docker-tests/tests/asyncpg/test_asyncpg_functional.py @@ -77,6 +77,35 @@ def test_instrumented_fetch_method_without_arguments(self, *_, **__): spans[0].attributes[SpanAttributes.DB_STATEMENT], "SELECT 42;" ) + def test_instrumented_remove_comments(self, *_, **__): + async_call(self._connection.fetch("/* leading comment */ SELECT 42;")) + async_call( + self._connection.fetch( + "/* leading comment */ SELECT 42; /* trailing comment */" + ) + ) + async_call(self._connection.fetch("SELECT 42; /* trailing comment */")) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 3) + self.check_span(spans[0]) + self.assertEqual(spans[0].name, "SELECT") + self.assertEqual( + spans[0].attributes[SpanAttributes.DB_STATEMENT], + "/* leading comment */ SELECT 42;", + ) + self.check_span(spans[1]) + self.assertEqual(spans[1].name, "SELECT") + self.assertEqual( + spans[1].attributes[SpanAttributes.DB_STATEMENT], + "/* leading comment */ SELECT 42; /* trailing comment */", + ) + self.check_span(spans[2]) + self.assertEqual(spans[2].name, "SELECT") + self.assertEqual( + spans[2].attributes[SpanAttributes.DB_STATEMENT], + "SELECT 42; /* trailing comment */", + ) + def test_instrumented_transaction_method(self, *_, **__): async def _transaction_execute(): async with self._connection.transaction(): From 6347ce089922f200dc387e8ed49492ebc4f4365d Mon Sep 17 00:00:00 2001 From: Diego Hurtado Date: Mon, 21 Nov 2022 19:58:35 +0100 Subject: [PATCH 14/28] Fix httpx version (#1460) Fixes #1459 --- .../opentelemetry-instrumentation-httpx/pyproject.toml | 2 +- .../src/opentelemetry/instrumentation/bootstrap_gen.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-httpx/pyproject.toml b/instrumentation/opentelemetry-instrumentation-httpx/pyproject.toml index 873b40e3a8..61e1bc4b6e 100644 --- a/instrumentation/opentelemetry-instrumentation-httpx/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-httpx/pyproject.toml @@ -32,7 +32,7 @@ dependencies = [ [project.optional-dependencies] instruments = [ - "httpx >= 0.18.0", + "httpx >= 0.18.0, <= 0.23.0", ] test = [ "opentelemetry-instrumentation-httpx[instruments]", diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py index aabbd0a6d0..2e5cc794a6 100644 --- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py +++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py @@ -81,7 +81,7 @@ "instrumentation": "opentelemetry-instrumentation-grpc==0.36b0.dev", }, "httpx": { - "library": "httpx >= 0.18.0", + "library": "httpx >= 0.18.0, <= 0.23.0", "instrumentation": "opentelemetry-instrumentation-httpx==0.36b0.dev", }, "jinja2": { From 9a155df80209d4b4e66a101e4b1aecda4efc0e06 Mon Sep 17 00:00:00 2001 From: Lance Erickson Date: Mon, 21 Nov 2022 19:39:23 -0600 Subject: [PATCH 15/28] Fix 1455: Protect from raw next() calls (#1456) --- .../tests/test_metrics_instrumentation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-tornado/tests/test_metrics_instrumentation.py b/instrumentation/opentelemetry-instrumentation-tornado/tests/test_metrics_instrumentation.py index 14ef4b842a..aa28305abf 100644 --- a/instrumentation/opentelemetry-instrumentation-tornado/tests/test_metrics_instrumentation.py +++ b/instrumentation/opentelemetry-instrumentation-tornado/tests/test_metrics_instrumentation.py @@ -57,7 +57,7 @@ def sorted_metrics(metrics): def assert_metric_expected( self, metric, expected_value, expected_attributes ): - data_point = next(metric.data.data_points) + data_point = next(iter(metric.data.data_points)) if isinstance(data_point, HistogramDataPoint): self.assertEqual( @@ -78,7 +78,7 @@ def assert_metric_expected( def assert_duration_metric_expected( self, metric, duration_estimated, expected_attributes ): - data_point = next(metric.data.data_points) + data_point = next(iter(metric.data.data_points)) self.assertAlmostEqual( data_point.sum, From b6b269064c5e9bf1304dcdbe6686cca2dd87eb42 Mon Sep 17 00:00:00 2001 From: Anthony Shaw Date: Tue, 22 Nov 2022 13:33:59 +1100 Subject: [PATCH 16/28] Tortoise ORM instrumentation (#685) --- .github/component_owners.yml | 3 + CHANGELOG.md | 2 + instrumentation/README.md | 1 + .../LICENSE | 201 +++++++++++ .../README.rst | 23 ++ .../pyproject.toml | 59 ++++ .../instrumentation/tortoiseorm/__init__.py | 319 ++++++++++++++++++ .../instrumentation/tortoiseorm/package.py | 16 + .../instrumentation/tortoiseorm/version.py | 15 + .../tests/__init__.py | 0 .../tests/test_tortoiseorm_instrumentation.py | 34 ++ .../pyproject.toml | 1 + .../instrumentation/bootstrap_gen.py | 8 + tox.ini | 10 +- 14 files changed, 691 insertions(+), 1 deletion(-) create mode 100644 instrumentation/opentelemetry-instrumentation-tortoiseorm/LICENSE create mode 100644 instrumentation/opentelemetry-instrumentation-tortoiseorm/README.rst create mode 100644 instrumentation/opentelemetry-instrumentation-tortoiseorm/pyproject.toml create mode 100644 instrumentation/opentelemetry-instrumentation-tortoiseorm/src/opentelemetry/instrumentation/tortoiseorm/__init__.py create mode 100644 instrumentation/opentelemetry-instrumentation-tortoiseorm/src/opentelemetry/instrumentation/tortoiseorm/package.py create mode 100644 instrumentation/opentelemetry-instrumentation-tortoiseorm/src/opentelemetry/instrumentation/tortoiseorm/version.py create mode 100644 instrumentation/opentelemetry-instrumentation-tortoiseorm/tests/__init__.py create mode 100644 instrumentation/opentelemetry-instrumentation-tortoiseorm/tests/test_tortoiseorm_instrumentation.py diff --git a/.github/component_owners.yml b/.github/component_owners.yml index 50f8c9e3c6..3e6ae5d18e 100644 --- a/.github/component_owners.yml +++ b/.github/component_owners.yml @@ -31,3 +31,6 @@ components: sdk-extension/opentelemetry-sdk-extension-aws: - NathanielRN - Kausik-A + + instrumentation/opentelemetry-instrumentation-tortoiseorm: + - tonybaloney diff --git a/CHANGELOG.md b/CHANGELOG.md index b95e366603..f6b1dcd3c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +- `opentelemetry-instrumentation-tortoiseorm` Initial release + ([#685](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/685)) - Add metric instrumentation for tornado ([#1252](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1252)) diff --git a/instrumentation/README.md b/instrumentation/README.md index 33e178af86..d5ef42954c 100644 --- a/instrumentation/README.md +++ b/instrumentation/README.md @@ -39,6 +39,7 @@ | [opentelemetry-instrumentation-starlette](./opentelemetry-instrumentation-starlette) | starlette ~= 0.13.0 | Yes | [opentelemetry-instrumentation-system-metrics](./opentelemetry-instrumentation-system-metrics) | psutil >= 5 | No | [opentelemetry-instrumentation-tornado](./opentelemetry-instrumentation-tornado) | tornado >= 5.1.1 | Yes +| [opentelemetry-instrumentation-tortoiseorm](./opentelemetry-instrumentation-tortoiseorm) | tortoise-orm >= 0.17.0 | No | [opentelemetry-instrumentation-urllib](./opentelemetry-instrumentation-urllib) | urllib | No | [opentelemetry-instrumentation-urllib3](./opentelemetry-instrumentation-urllib3) | urllib3 >= 1.0.0, < 2.0.0 | Yes | [opentelemetry-instrumentation-wsgi](./opentelemetry-instrumentation-wsgi) | wsgi | Yes \ No newline at end of file diff --git a/instrumentation/opentelemetry-instrumentation-tortoiseorm/LICENSE b/instrumentation/opentelemetry-instrumentation-tortoiseorm/LICENSE new file mode 100644 index 0000000000..1ef7dad2c5 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-tortoiseorm/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 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/instrumentation/opentelemetry-instrumentation-tortoiseorm/README.rst b/instrumentation/opentelemetry-instrumentation-tortoiseorm/README.rst new file mode 100644 index 0000000000..e845fbf84d --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-tortoiseorm/README.rst @@ -0,0 +1,23 @@ +OpenTelemetry Tortoise ORM Instrumentation +========================================== + +|pypi| + +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-tortoiseorm.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-tortoiseorm/ + +This library allows tracing queries made by tortoise ORM backends, mysql, postgres and sqlite. + +Installation +------------ + +:: + + pip install opentelemetry-instrumentation-tortoiseorm + +References +---------- + +* `OpenTelemetry Project `_ +* `Tortoise ORM `_ +* `OpenTelemetry Python Examples `_ diff --git a/instrumentation/opentelemetry-instrumentation-tortoiseorm/pyproject.toml b/instrumentation/opentelemetry-instrumentation-tortoiseorm/pyproject.toml new file mode 100644 index 0000000000..e7cf8cf209 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-tortoiseorm/pyproject.toml @@ -0,0 +1,59 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "opentelemetry-instrumentation-tortoiseorm" +dynamic = ["version"] +description = "OpenTelemetry Instrumentation for Tortoise ORM" +readme = "README.rst" +license = "Apache-2.0" +requires-python = ">=3.7" +authors = [ + { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, +] +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.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", +] +dependencies = [ + "opentelemetry-api ~= 1.12", + "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0.dev", +] + +[project.optional-dependencies] +instruments = [ + "tortoise-orm >= 0.17.0", + "pydantic >= 1.10.2" +] +test = [ + "opentelemetry-instrumentation-tortoiseorm[instruments]", + "opentelemetry-test-utils == 0.36b0.dev", +] + +[project.entry-points.opentelemetry_instrumentor] +tortoiseorm = "opentelemetry.instrumentation.tortoiseorm:TortoiseORMInstrumentor" + +[project.urls] +Homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib/tree/main/instrumentation/opentelemetry-instrumentation-tortoiseorm" + +[tool.hatch.version] +path = "src/opentelemetry/instrumentation/tortoiseorm/version.py" + +[tool.hatch.build.targets.sdist] +include = [ + "/src", + "/tests", +] + +[tool.hatch.build.targets.wheel] +packages = ["src/opentelemetry"] diff --git a/instrumentation/opentelemetry-instrumentation-tortoiseorm/src/opentelemetry/instrumentation/tortoiseorm/__init__.py b/instrumentation/opentelemetry-instrumentation-tortoiseorm/src/opentelemetry/instrumentation/tortoiseorm/__init__.py new file mode 100644 index 0000000000..a8061a99cc --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-tortoiseorm/src/opentelemetry/instrumentation/tortoiseorm/__init__.py @@ -0,0 +1,319 @@ +# 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. + +""" +Instrument `tortoise-orm`_ to report SQL queries. + +Usage +----- + +.. code:: python + + from fastapi import FastAPI + from tortoise.contrib.fastapi import register_tortoise + from opentelemetry.sdk.resources import SERVICE_NAME, Resource + from opentelemetry.sdk.trace import TracerProvider + from opentelemetry.instrumentation.tortoiseorm import TortoiseORMInstrumentor + + app = FastAPI() + tracer = TracerProvider(resource=Resource({SERVICE_NAME: "FastAPI"})) + TortoiseORMInstrumentor().instrument(tracer_provider=tracer) + + register_tortoise( + app, + db_url="sqlite://sample.db", + modules={"models": ["example_app.db_models"]} + ) + +API +--- +""" +from typing import Collection + +import wrapt + +from opentelemetry import trace +from opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from opentelemetry.instrumentation.tortoiseorm.package import _instruments +from opentelemetry.instrumentation.tortoiseorm.version import __version__ +from opentelemetry.instrumentation.utils import unwrap +from opentelemetry.semconv.trace import DbSystemValues, SpanAttributes +from opentelemetry.trace import SpanKind +from opentelemetry.trace.status import Status, StatusCode + +try: + import tortoise.backends.asyncpg.client + + TORTOISE_POSTGRES_SUPPORT = True +except ModuleNotFoundError: + TORTOISE_POSTGRES_SUPPORT = False + +try: + import tortoise.backends.mysql.client + + TORTOISE_MYSQL_SUPPORT = True +except ModuleNotFoundError: + TORTOISE_MYSQL_SUPPORT = False + +try: + import tortoise.backends.sqlite.client + + TORTOISE_SQLITE_SUPPORT = True +except ModuleNotFoundError: + TORTOISE_SQLITE_SUPPORT = False + +import tortoise.contrib.pydantic.base + + +class TortoiseORMInstrumentor(BaseInstrumentor): + """An instrumentor for Tortoise-ORM + See `BaseInstrumentor` + """ + + def instrumentation_dependencies(self) -> Collection[str]: + return _instruments + + def _instrument(self, **kwargs): + """Instruments Tortoise ORM backend methods. + Args: + **kwargs: Optional arguments + ``tracer_provider``: a TracerProvider, defaults to global + ``capture_parameters``: set to True to capture SQL query parameters + Returns: + None + """ + tracer_provider = kwargs.get("tracer_provider") + # pylint: disable=attribute-defined-outside-init + self._tracer = trace.get_tracer(__name__, __version__, tracer_provider) + self.capture_parameters = kwargs.get("capture_parameters", False) + if TORTOISE_SQLITE_SUPPORT: + funcs = [ + "SqliteClient.execute_many", + "SqliteClient.execute_query", + "SqliteClient.execute_insert", + "SqliteClient.execute_query_dict", + "SqliteClient.execute_script", + ] + for func in funcs: + wrapt.wrap_function_wrapper( + "tortoise.backends.sqlite.client", + func, + self._do_execute, + ) + + if TORTOISE_POSTGRES_SUPPORT: + funcs = [ + "AsyncpgDBClient.execute_many", + "AsyncpgDBClient.execute_query", + "AsyncpgDBClient.execute_insert", + "AsyncpgDBClient.execute_query_dict", + "AsyncpgDBClient.execute_script", + ] + for func in funcs: + wrapt.wrap_function_wrapper( + "tortoise.backends.asyncpg.client", + func, + self._do_execute, + ) + + if TORTOISE_MYSQL_SUPPORT: + funcs = [ + "MySQLClient.execute_many", + "MySQLClient.execute_query", + "MySQLClient.execute_insert", + "MySQLClient.execute_query_dict", + "MySQLClient.execute_script", + ] + for func in funcs: + wrapt.wrap_function_wrapper( + "tortoise.backends.mysql.client", + func, + self._do_execute, + ) + wrapt.wrap_function_wrapper( + "tortoise.contrib.pydantic.base", + "PydanticModel.from_queryset", + self._from_queryset, + ) + wrapt.wrap_function_wrapper( + "tortoise.contrib.pydantic.base", + "PydanticModel.from_queryset_single", + self._from_queryset, + ) + wrapt.wrap_function_wrapper( + "tortoise.contrib.pydantic.base", + "PydanticListModel.from_queryset", + self._from_queryset, + ) + + def _uninstrument(self, **kwargs): + if TORTOISE_SQLITE_SUPPORT: + unwrap( + tortoise.backends.sqlite.client.SqliteClient, "execute_query" + ) + unwrap( + tortoise.backends.sqlite.client.SqliteClient, "execute_many" + ) + unwrap( + tortoise.backends.sqlite.client.SqliteClient, "execute_insert" + ) + unwrap( + tortoise.backends.sqlite.client.SqliteClient, + "execute_query_dict", + ) + unwrap( + tortoise.backends.sqlite.client.SqliteClient, "execute_script" + ) + if TORTOISE_MYSQL_SUPPORT: + unwrap(tortoise.backends.mysql.client.MySQLClient, "execute_query") + unwrap(tortoise.backends.mysql.client.MySQLClient, "execute_many") + unwrap( + tortoise.backends.mysql.client.MySQLClient, "execute_insert" + ) + unwrap( + tortoise.backends.mysql.client.MySQLClient, + "execute_query_dict", + ) + unwrap( + tortoise.backends.mysql.client.MySQLClient, "execute_script" + ) + if TORTOISE_POSTGRES_SUPPORT: + unwrap( + tortoise.backends.asyncpg.client.AsyncpgDBClient, + "execute_query", + ) + unwrap( + tortoise.backends.asyncpg.client.AsyncpgDBClient, + "execute_many", + ) + unwrap( + tortoise.backends.asyncpg.client.AsyncpgDBClient, + "execute_insert", + ) + unwrap( + tortoise.backends.asyncpg.client.AsyncpgDBClient, + "execute_query_dict", + ) + unwrap( + tortoise.backends.asyncpg.client.AsyncpgDBClient, + "execute_script", + ) + unwrap(tortoise.contrib.pydantic.base.PydanticModel, "from_queryset") + unwrap( + tortoise.contrib.pydantic.base.PydanticModel, + "from_queryset_single", + ) + unwrap( + tortoise.contrib.pydantic.base.PydanticListModel, "from_queryset" + ) + + def _hydrate_span_from_args(self, connection, query, parameters) -> dict: + """Get network and database attributes from connection.""" + span_attributes = {} + capabilities = getattr(connection, "capabilities", None) + if capabilities is not None: + if capabilities.dialect == "sqlite": + span_attributes[ + SpanAttributes.DB_SYSTEM + ] = DbSystemValues.SQLITE.value + elif capabilities.dialect == "postgres": + span_attributes[ + SpanAttributes.DB_SYSTEM + ] = DbSystemValues.POSTGRESQL.value + elif capabilities.dialect == "mysql": + span_attributes[ + SpanAttributes.DB_SYSTEM + ] = DbSystemValues.MYSQL.value + dbname = getattr(connection, "filename", None) + if dbname: + span_attributes[SpanAttributes.DB_NAME] = dbname + dbname = getattr(connection, "database", None) + if dbname: + span_attributes[SpanAttributes.DB_NAME] = dbname + if query is not None: + span_attributes[SpanAttributes.DB_STATEMENT] = query + user = getattr(connection, "user", None) + if user: + span_attributes[SpanAttributes.DB_USER] = user + host = getattr(connection, "host", None) + if host: + span_attributes[SpanAttributes.NET_PEER_NAME] = host + port = getattr(connection, "port", None) + if port: + span_attributes[SpanAttributes.NET_PEER_PORT] = port + + if self.capture_parameters: + if parameters is not None and len(parameters) > 0: + span_attributes["db.statement.parameters"] = str(parameters) + + return span_attributes + + async def _do_execute(self, func, instance, args, kwargs): + + exception = None + name = args[0].split()[0] + + with self._tracer.start_as_current_span( + name, kind=SpanKind.CLIENT + ) as span: + if span.is_recording(): + span_attributes = self._hydrate_span_from_args( + instance, + args[0], + args[1:], + ) + 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 span.is_recording() and exception is not None: + span.set_status(Status(StatusCode.ERROR)) + + return result + + async def _from_queryset(self, func, modelcls, args, kwargs): + + exception = None + name = f"pydantic.{func.__name__}" + + with self._tracer.start_as_current_span( + name, kind=SpanKind.INTERNAL + ) as span: + if span.is_recording(): + span_attributes = {} + + model_config = getattr(modelcls, "Config", None) + if model_config: + model_title = getattr(modelcls.Config, "title") + if model_title: + span_attributes["pydantic.model"] = model_title + + 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 span.is_recording() and exception is not None: + span.set_status(Status(StatusCode.ERROR)) + + return result diff --git a/instrumentation/opentelemetry-instrumentation-tortoiseorm/src/opentelemetry/instrumentation/tortoiseorm/package.py b/instrumentation/opentelemetry-instrumentation-tortoiseorm/src/opentelemetry/instrumentation/tortoiseorm/package.py new file mode 100644 index 0000000000..12e8c86144 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-tortoiseorm/src/opentelemetry/instrumentation/tortoiseorm/package.py @@ -0,0 +1,16 @@ +# 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. + + +_instruments = ("tortoise-orm >= 0.17.0",) diff --git a/instrumentation/opentelemetry-instrumentation-tortoiseorm/src/opentelemetry/instrumentation/tortoiseorm/version.py b/instrumentation/opentelemetry-instrumentation-tortoiseorm/src/opentelemetry/instrumentation/tortoiseorm/version.py new file mode 100644 index 0000000000..fa69afa640 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-tortoiseorm/src/opentelemetry/instrumentation/tortoiseorm/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.36b0.dev" diff --git a/instrumentation/opentelemetry-instrumentation-tortoiseorm/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-tortoiseorm/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/instrumentation/opentelemetry-instrumentation-tortoiseorm/tests/test_tortoiseorm_instrumentation.py b/instrumentation/opentelemetry-instrumentation-tortoiseorm/tests/test_tortoiseorm_instrumentation.py new file mode 100644 index 0000000000..eefbed7dfd --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-tortoiseorm/tests/test_tortoiseorm_instrumentation.py @@ -0,0 +1,34 @@ +# 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 opentelemetry.instrumentation.tortoiseorm import TortoiseORMInstrumentor +from opentelemetry.test.test_base import TestBase + +# pylint: disable=too-many-public-methods + + +class TestTortoiseORMInstrumentor(TestBase): + def setUp(self): + super().setUp() + TortoiseORMInstrumentor().instrument() + + def tearDown(self): + super().tearDown() + TortoiseORMInstrumentor().uninstrument() + + def test_tortoise(self): + # FIXME This instrumentation has no tests at all and should have some + # tests. This is being added just to make pytest not fail because no + # tests are being collected for tortoise at the moment. + pass diff --git a/opentelemetry-contrib-instrumentations/pyproject.toml b/opentelemetry-contrib-instrumentations/pyproject.toml index 45d29aff7d..1f69242885 100644 --- a/opentelemetry-contrib-instrumentations/pyproject.toml +++ b/opentelemetry-contrib-instrumentations/pyproject.toml @@ -67,6 +67,7 @@ dependencies = [ "opentelemetry-instrumentation-starlette==0.36b0.dev", "opentelemetry-instrumentation-system-metrics==0.36b0.dev", "opentelemetry-instrumentation-tornado==0.36b0.dev", + "opentelemetry-instrumentation-tortoiseorm==0.36b0.dev", "opentelemetry-instrumentation-urllib==0.36b0.dev", "opentelemetry-instrumentation-urllib3==0.36b0.dev", "opentelemetry-instrumentation-wsgi==0.36b0.dev", diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py index 2e5cc794a6..e3564ba189 100644 --- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py +++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py @@ -152,6 +152,14 @@ "library": "tornado >= 5.1.1", "instrumentation": "opentelemetry-instrumentation-tornado==0.36b0.dev", }, + "tortoise-orm": { + "library": "tortoise-orm >= 0.17.0", + "instrumentation": "opentelemetry-instrumentation-tortoiseorm==0.36b0.dev", + }, + "pydantic": { + "library": "pydantic >= 1.10.2", + "instrumentation": "opentelemetry-instrumentation-tortoiseorm==0.36b0.dev", + }, "urllib3": { "library": "urllib3 >= 1.0.0, < 2.0.0", "instrumentation": "opentelemetry-instrumentation-urllib3==0.36b0.dev", diff --git a/tox.ini b/tox.ini index 9521e1b9ca..f61540b7c4 100644 --- a/tox.ini +++ b/tox.ini @@ -177,7 +177,11 @@ envlist = ; opentelemetry-instrumentation-tornado py3{7,8,9,10,11}-test-instrumentation-tornado - pypy3-test-instrumentation-tornado + pypy3-test-instrumentation-tornado + + ; opentelemetry-instrumentation-tortoiseorm + py3{7,8,9,10,11}-test-instrumentation-tortoiseorm + pypy3-test-instrumentation-tortoiseorm ; opentelemetry-instrumentation-httpx py3{7,8,9,10,11}-test-instrumentation-httpx{18,21} @@ -297,6 +301,7 @@ changedir = test-instrumentation-starlette: instrumentation/opentelemetry-instrumentation-starlette/tests test-instrumentation-system-metrics: instrumentation/opentelemetry-instrumentation-system-metrics/tests test-instrumentation-tornado: instrumentation/opentelemetry-instrumentation-tornado/tests + test-instrumentation-tortoiseorm: instrumentation/opentelemetry-instrumentation-tortoiseorm/tests test-instrumentation-wsgi: instrumentation/opentelemetry-instrumentation-wsgi/tests test-instrumentation-httpx{18,21}: instrumentation/opentelemetry-instrumentation-httpx/tests test-util-http: util/opentelemetry-util-http/tests @@ -382,6 +387,8 @@ commands_pre = tornado: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-tornado[test] + tortoiseorm: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-tortoiseorm[test] + jinja2: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-jinja2[test] logging: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-logging[test] @@ -500,6 +507,7 @@ commands_pre = python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-elasticsearch[test] python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-asyncpg[test] python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-tornado[test] + python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-tortoiseorm[test] python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-mysql[test] python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-httpx[test] python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-aws-lambda[test] From 80d0b89b8b9dbdfa1379f7cbbbcb2cd47ff0649a Mon Sep 17 00:00:00 2001 From: Sean Kenny Date: Tue, 22 Nov 2022 03:24:21 +0000 Subject: [PATCH 17/28] Add grpc.aio instrumentation to be auto-instrumented (#1442) --- CHANGELOG.md | 2 ++ .../opentelemetry-instrumentation-grpc/pyproject.toml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f6b1dcd3c8..4921f8a632 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#1424](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1424)) - Remove db.name attribute from Redis instrumentation ([#1427](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1427)) +- Add grpc.aio instrumentation to package entry points + ([#1442](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1442)) ## Version 1.14.0/0.35b0 (2022-11-03) diff --git a/instrumentation/opentelemetry-instrumentation-grpc/pyproject.toml b/instrumentation/opentelemetry-instrumentation-grpc/pyproject.toml index 28ea26bbef..c379309694 100644 --- a/instrumentation/opentelemetry-instrumentation-grpc/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-grpc/pyproject.toml @@ -46,6 +46,8 @@ test = [ [project.entry-points.opentelemetry_instrumentor] grpc_client = "opentelemetry.instrumentation.grpc:GrpcInstrumentorClient" grpc_server = "opentelemetry.instrumentation.grpc:GrpcInstrumentorServer" +grpc_aio_client = "opentelemetry.instrumentation.grpc:GrpcAioInstrumentorClient" +grpc_aio_server = "opentelemetry.instrumentation.grpc:GrpcAioInstrumentorServer" [project.urls] Homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib/tree/main/instrumentation/opentelemetry-instrumentation-grpc" From 8dbd1428c24473ecb9bf0411e5f7bbe963eda90b Mon Sep 17 00:00:00 2001 From: Alex Boten Date: Wed, 23 Nov 2022 13:30:06 -0800 Subject: [PATCH 18/28] `opentelemetry-instrumentation-aws-lambda`: Adding option to disable context propagation (#1466) * `opentelemetry-instrumentation-aws-lambda`: Adding option to disable context propagation Adding the following option to disable context propagation `disable_aws_context_propagation`. This is similar to the disableAwsContextPropagation option in the nodejs instrumentation. * update changelog * lint * more lint --- CHANGELOG.md | 2 + .../instrumentation/aws_lambda/__init__.py | 38 +++- .../test_aws_lambda_instrumentation_manual.py | 206 ++++++++++-------- 3 files changed, 148 insertions(+), 98 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4921f8a632..db85c114f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#685](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/685)) - Add metric instrumentation for tornado ([#1252](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1252)) +- `opentelemetry-instrumentation-aws-lambda` Add option to disable aws context propagation + ([#1466](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1466)) ### Added diff --git a/instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/__init__.py b/instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/__init__.py index 115709bc83..11769c729d 100644 --- a/instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/__init__.py @@ -134,7 +134,9 @@ def _default_event_context_extractor(lambda_event: Any) -> Context: def _determine_parent_context( - lambda_event: Any, event_context_extractor: Callable[[Any], Context] + lambda_event: Any, + event_context_extractor: Callable[[Any], Context], + disable_aws_context_propagation: bool = False, ) -> Context: """Determine the parent context for the current Lambda invocation. @@ -144,17 +146,25 @@ def _determine_parent_context( Args: lambda_event: user-defined, so it could be anything, but this method counts it being a map with a 'headers' key + event_context_extractor: a method which takes the Lambda + Event as input and extracts an OTel Context from it. By default, + the context is extracted from the HTTP headers of an API Gateway + request. + disable_aws_context_propagation: By default, this instrumentation + will try to read the context from the `_X_AMZN_TRACE_ID` environment + variable set by Lambda, set this to `True` to disable this behavior. Returns: A Context with configuration found in the carrier. """ parent_context = None - xray_env_var = os.environ.get(_X_AMZN_TRACE_ID) + if not disable_aws_context_propagation: + xray_env_var = os.environ.get(_X_AMZN_TRACE_ID) - if xray_env_var: - parent_context = AwsXRayPropagator().extract( - {TRACE_HEADER_KEY: xray_env_var} - ) + if xray_env_var: + parent_context = AwsXRayPropagator().extract( + {TRACE_HEADER_KEY: xray_env_var} + ) if ( parent_context @@ -258,6 +268,7 @@ def _instrument( flush_timeout, event_context_extractor: Callable[[Any], Context], tracer_provider: TracerProvider = None, + disable_aws_context_propagation: bool = False, ): def _instrumented_lambda_handler_call( call_wrapped, instance, args, kwargs @@ -269,7 +280,9 @@ def _instrumented_lambda_handler_call( lambda_event = args[0] parent_context = _determine_parent_context( - lambda_event, event_context_extractor + lambda_event, + event_context_extractor, + disable_aws_context_propagation, ) span_kind = None @@ -368,6 +381,9 @@ def _instrument(self, **kwargs): Event as input and extracts an OTel Context from it. By default, the context is extracted from the HTTP headers of an API Gateway request. + ``disable_aws_context_propagation``: By default, this instrumentation + will try to read the context from the `_X_AMZN_TRACE_ID` environment + variable set by Lambda, set this to `True` to disable this behavior. """ lambda_handler = os.environ.get(ORIG_HANDLER, os.environ.get(_HANDLER)) # pylint: disable=attribute-defined-outside-init @@ -377,11 +393,12 @@ def _instrument(self, **kwargs): ) = lambda_handler.rsplit(".", 1) flush_timeout_env = os.environ.get( - OTEL_INSTRUMENTATION_AWS_LAMBDA_FLUSH_TIMEOUT, "" + OTEL_INSTRUMENTATION_AWS_LAMBDA_FLUSH_TIMEOUT, None ) flush_timeout = 30000 try: - flush_timeout = int(flush_timeout_env) + if flush_timeout_env is not None: + flush_timeout = int(flush_timeout_env) except ValueError: logger.warning( "Could not convert OTEL_INSTRUMENTATION_AWS_LAMBDA_FLUSH_TIMEOUT value %s to int", @@ -396,6 +413,9 @@ def _instrument(self, **kwargs): "event_context_extractor", _default_event_context_extractor ), tracer_provider=kwargs.get("tracer_provider"), + disable_aws_context_propagation=kwargs.get( + "disable_aws_context_propagation", False + ), ) def _uninstrument(self, **kwargs): diff --git a/instrumentation/opentelemetry-instrumentation-aws-lambda/tests/test_aws_lambda_instrumentation_manual.py b/instrumentation/opentelemetry-instrumentation-aws-lambda/tests/test_aws_lambda_instrumentation_manual.py index 496829fe4e..2936f04718 100644 --- a/instrumentation/opentelemetry-instrumentation-aws-lambda/tests/test_aws_lambda_instrumentation_manual.py +++ b/instrumentation/opentelemetry-instrumentation-aws-lambda/tests/test_aws_lambda_instrumentation_manual.py @@ -12,7 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. import os +from dataclasses import dataclass from importlib import import_module +from typing import Any, Callable, Dict from unittest import mock from mocks.api_gateway_http_api_event import ( @@ -155,103 +157,129 @@ def test_active_tracing(self): test_env_patch.stop() def test_parent_context_from_lambda_event(self): - test_env_patch = mock.patch.dict( - "os.environ", - { - **os.environ, - # NOT Active Tracing - _X_AMZN_TRACE_ID: MOCK_XRAY_TRACE_CONTEXT_NOT_SAMPLED, - # NOT using the X-Ray Propagator - OTEL_PROPAGATORS: "tracecontext", - }, - ) - test_env_patch.start() - - AwsLambdaInstrumentor().instrument() - - mock_execute_lambda( - { - "headers": { - TraceContextTextMapPropagator._TRACEPARENT_HEADER_NAME: MOCK_W3C_TRACE_CONTEXT_SAMPLED, - TraceContextTextMapPropagator._TRACESTATE_HEADER_NAME: f"{MOCK_W3C_TRACE_STATE_KEY}={MOCK_W3C_TRACE_STATE_VALUE},foo=1,bar=2", - } - } - ) - - spans = self.memory_exporter.get_finished_spans() + @dataclass + class TestCase: + name: str + custom_extractor: Callable[[Any], None] + context: Dict + expected_traceid: int + expected_parentid: int + xray_traceid: str + expected_state_value: str = None + expected_trace_state_len: int = 0 + disable_aws_context_propagation: bool = False - assert spans - - self.assertEqual(len(spans), 1) - span = spans[0] - self.assertEqual(span.get_span_context().trace_id, MOCK_W3C_TRACE_ID) - - parent_context = span.parent - self.assertEqual( - parent_context.trace_id, span.get_span_context().trace_id - ) - self.assertEqual(parent_context.span_id, MOCK_W3C_PARENT_SPAN_ID) - self.assertEqual(len(parent_context.trace_state), 3) - self.assertEqual( - parent_context.trace_state.get(MOCK_W3C_TRACE_STATE_KEY), - MOCK_W3C_TRACE_STATE_VALUE, - ) - self.assertTrue(parent_context.is_remote) - - test_env_patch.stop() - - def test_using_custom_extractor(self): def custom_event_context_extractor(lambda_event): return get_global_textmap().extract(lambda_event["foo"]["headers"]) - test_env_patch = mock.patch.dict( - "os.environ", - { - **os.environ, - # NOT Active Tracing - _X_AMZN_TRACE_ID: MOCK_XRAY_TRACE_CONTEXT_NOT_SAMPLED, - # NOT using the X-Ray Propagator - OTEL_PROPAGATORS: "tracecontext", - }, - ) - test_env_patch.start() - - AwsLambdaInstrumentor().instrument( - event_context_extractor=custom_event_context_extractor, - ) - - mock_execute_lambda( - { - "foo": { + tests = [ + TestCase( + name="no_custom_extractor", + custom_extractor=None, + context={ "headers": { TraceContextTextMapPropagator._TRACEPARENT_HEADER_NAME: MOCK_W3C_TRACE_CONTEXT_SAMPLED, TraceContextTextMapPropagator._TRACESTATE_HEADER_NAME: f"{MOCK_W3C_TRACE_STATE_KEY}={MOCK_W3C_TRACE_STATE_VALUE},foo=1,bar=2", } - } - } - ) - - spans = self.memory_exporter.get_finished_spans() - - assert spans - - self.assertEqual(len(spans), 1) - span = spans[0] - self.assertEqual(span.get_span_context().trace_id, MOCK_W3C_TRACE_ID) - - parent_context = span.parent - self.assertEqual( - parent_context.trace_id, span.get_span_context().trace_id - ) - self.assertEqual(parent_context.span_id, MOCK_W3C_PARENT_SPAN_ID) - self.assertEqual(len(parent_context.trace_state), 3) - self.assertEqual( - parent_context.trace_state.get(MOCK_W3C_TRACE_STATE_KEY), - MOCK_W3C_TRACE_STATE_VALUE, - ) - self.assertTrue(parent_context.is_remote) - - test_env_patch.stop() + }, + expected_traceid=MOCK_W3C_TRACE_ID, + expected_parentid=MOCK_W3C_PARENT_SPAN_ID, + expected_trace_state_len=3, + expected_state_value=MOCK_W3C_TRACE_STATE_VALUE, + xray_traceid=MOCK_XRAY_TRACE_CONTEXT_NOT_SAMPLED, + ), + TestCase( + name="custom_extractor_not_sampled_xray", + custom_extractor=custom_event_context_extractor, + context={ + "foo": { + "headers": { + TraceContextTextMapPropagator._TRACEPARENT_HEADER_NAME: MOCK_W3C_TRACE_CONTEXT_SAMPLED, + TraceContextTextMapPropagator._TRACESTATE_HEADER_NAME: f"{MOCK_W3C_TRACE_STATE_KEY}={MOCK_W3C_TRACE_STATE_VALUE},foo=1,bar=2", + } + } + }, + expected_traceid=MOCK_W3C_TRACE_ID, + expected_parentid=MOCK_W3C_PARENT_SPAN_ID, + expected_trace_state_len=3, + expected_state_value=MOCK_W3C_TRACE_STATE_VALUE, + xray_traceid=MOCK_XRAY_TRACE_CONTEXT_NOT_SAMPLED, + ), + TestCase( + name="custom_extractor_sampled_xray", + custom_extractor=custom_event_context_extractor, + context={ + "foo": { + "headers": { + TraceContextTextMapPropagator._TRACEPARENT_HEADER_NAME: MOCK_W3C_TRACE_CONTEXT_SAMPLED, + TraceContextTextMapPropagator._TRACESTATE_HEADER_NAME: f"{MOCK_W3C_TRACE_STATE_KEY}={MOCK_W3C_TRACE_STATE_VALUE},foo=1,bar=2", + } + } + }, + expected_traceid=MOCK_XRAY_TRACE_ID, + expected_parentid=MOCK_XRAY_PARENT_SPAN_ID, + xray_traceid=MOCK_XRAY_TRACE_CONTEXT_SAMPLED, + ), + TestCase( + name="custom_extractor_sampled_xray_disable_aws_propagation", + custom_extractor=custom_event_context_extractor, + context={ + "foo": { + "headers": { + TraceContextTextMapPropagator._TRACEPARENT_HEADER_NAME: MOCK_W3C_TRACE_CONTEXT_SAMPLED, + TraceContextTextMapPropagator._TRACESTATE_HEADER_NAME: f"{MOCK_W3C_TRACE_STATE_KEY}={MOCK_W3C_TRACE_STATE_VALUE},foo=1,bar=2", + } + } + }, + disable_aws_context_propagation=True, + expected_traceid=MOCK_W3C_TRACE_ID, + expected_parentid=MOCK_W3C_PARENT_SPAN_ID, + expected_trace_state_len=3, + expected_state_value=MOCK_W3C_TRACE_STATE_VALUE, + xray_traceid=MOCK_XRAY_TRACE_CONTEXT_SAMPLED, + ), + ] + for test in tests: + test_env_patch = mock.patch.dict( + "os.environ", + { + **os.environ, + # NOT Active Tracing + _X_AMZN_TRACE_ID: test.xray_traceid, + # NOT using the X-Ray Propagator + OTEL_PROPAGATORS: "tracecontext", + }, + ) + test_env_patch.start() + AwsLambdaInstrumentor().instrument( + event_context_extractor=test.custom_extractor, + disable_aws_context_propagation=test.disable_aws_context_propagation, + ) + mock_execute_lambda(test.context) + spans = self.memory_exporter.get_finished_spans() + assert spans + self.assertEqual(len(spans), 1) + span = spans[0] + self.assertEqual( + span.get_span_context().trace_id, test.expected_traceid + ) + + parent_context = span.parent + self.assertEqual( + parent_context.trace_id, span.get_span_context().trace_id + ) + self.assertEqual(parent_context.span_id, test.expected_parentid) + self.assertEqual( + len(parent_context.trace_state), test.expected_trace_state_len + ) + self.assertEqual( + parent_context.trace_state.get(MOCK_W3C_TRACE_STATE_KEY), + test.expected_state_value, + ) + self.assertTrue(parent_context.is_remote) + self.memory_exporter.clear() + AwsLambdaInstrumentor().uninstrument() + test_env_patch.stop() def test_lambda_no_error_with_invalid_flush_timeout(self): From 2179fb976f6f3413edfad5f5c0ad6f37690f469e Mon Sep 17 00:00:00 2001 From: Mario Jonke Date: Thu, 24 Nov 2022 12:14:12 +0100 Subject: [PATCH 19/28] botocore: Add support for SNS publish and publish_batch (#1409) --- CHANGELOG.md | 2 + .../botocore/extensions/__init__.py | 1 + .../botocore/extensions/_messaging.py | 52 +++++ .../botocore/extensions/sns.py | 166 +++++++++++++++ .../tests/test_botocore_messaging.py | 52 +++++ .../tests/test_botocore_sns.py | 189 ++++++++++++++++++ 6 files changed, 462 insertions(+) create mode 100644 instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/_messaging.py create mode 100644 instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/sns.py create mode 100644 instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_messaging.py create mode 100644 instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_sns.py diff --git a/CHANGELOG.md b/CHANGELOG.md index db85c114f8..f336be0cba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#1350](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1350)) - `opentelemetry-instrumentation-starlette` Add support for regular expression matching and sanitization of HTTP headers. ([#1404](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1404)) +- `opentelemetry-instrumentation-botocore` Add support for SNS `publish` and `publish_batch`. + ([#1409](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1409)) - Strip leading comments from SQL queries when generating the span name. ([#1434](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1434)) diff --git a/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/__init__.py b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/__init__.py index 6b67767281..85a4904022 100644 --- a/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/__init__.py @@ -34,6 +34,7 @@ def loader(): _KNOWN_EXTENSIONS = { "dynamodb": _lazy_load(".dynamodb", "_DynamoDbExtension"), "lambda": _lazy_load(".lmbd", "_LambdaExtension"), + "sns": _lazy_load(".sns", "_SnsExtension"), "sqs": _lazy_load(".sqs", "_SqsExtension"), } diff --git a/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/_messaging.py b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/_messaging.py new file mode 100644 index 0000000000..271a8475e6 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/_messaging.py @@ -0,0 +1,52 @@ +# 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 logging +from typing import Any, MutableMapping + +from opentelemetry.propagate import get_global_textmap, inject +from opentelemetry.propagators.textmap import CarrierT, Setter + +_logger = logging.getLogger(__name__) + +_MAX_MESSAGE_ATTRIBUTES = 10 + + +class MessageAttributesSetter(Setter[CarrierT]): + def set(self, carrier: CarrierT, key: str, value: str): + carrier[key] = { + "DataType": "String", + "StringValue": value, + } + + +message_attributes_setter = MessageAttributesSetter() + + +def inject_propagation_context( + carrier: MutableMapping[str, Any] +) -> MutableMapping[str, Any]: + if carrier is None: + carrier = {} + + fields = get_global_textmap().fields + if len(carrier.keys()) + len(fields) <= _MAX_MESSAGE_ATTRIBUTES: + inject(carrier, setter=message_attributes_setter) + else: + _logger.warning( + "botocore instrumentation: cannot set context propagation on " + "SQS/SNS message due to maximum amount of MessageAttributes" + ) + + return carrier diff --git a/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/sns.py b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/sns.py new file mode 100644 index 0000000000..7849daa286 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/sns.py @@ -0,0 +1,166 @@ +# 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 abc +import inspect +from typing import Any, Dict, MutableMapping, Optional, Tuple + +from opentelemetry.instrumentation.botocore.extensions._messaging import ( + inject_propagation_context, +) +from opentelemetry.instrumentation.botocore.extensions.types import ( + _AttributeMapT, + _AwsSdkCallContext, + _AwsSdkExtension, +) +from opentelemetry.semconv.trace import ( + MessagingDestinationKindValues, + SpanAttributes, +) +from opentelemetry.trace import SpanKind +from opentelemetry.trace.span import Span + +################################################################################ +# SNS operations +################################################################################ + + +class _SnsOperation(abc.ABC): + @classmethod + @abc.abstractmethod + def operation_name(cls) -> str: + pass + + @classmethod + def span_kind(cls) -> SpanKind: + return SpanKind.CLIENT + + @classmethod + def extract_attributes( + cls, call_context: _AwsSdkCallContext, attributes: _AttributeMapT + ): + pass + + @classmethod + def before_service_call(cls, call_context: _AwsSdkCallContext, span: Span): + pass + + +class _OpPublish(_SnsOperation): + _arn_arg_names = ("TopicArn", "TargetArn") + _phone_arg_name = "PhoneNumber" + + @classmethod + def operation_name(cls) -> str: + return "Publish" + + @classmethod + def span_kind(cls) -> SpanKind: + return SpanKind.PRODUCER + + @classmethod + def extract_attributes( + cls, call_context: _AwsSdkCallContext, attributes: _AttributeMapT + ): + destination_name, is_phone_number = cls._extract_destination_name( + call_context + ) + attributes[ + SpanAttributes.MESSAGING_DESTINATION_KIND + ] = MessagingDestinationKindValues.TOPIC.value + attributes[SpanAttributes.MESSAGING_DESTINATION] = destination_name + + call_context.span_name = ( + f"{'phone_number' if is_phone_number else destination_name} send" + ) + + @classmethod + def _extract_destination_name( + cls, call_context: _AwsSdkCallContext + ) -> Tuple[str, bool]: + arn = cls._extract_input_arn(call_context) + if arn: + return arn.rsplit(":", 1)[-1], False + + if cls._phone_arg_name: + phone_number = call_context.params.get(cls._phone_arg_name) + if phone_number: + return phone_number, True + + return "unknown", False + + @classmethod + def _extract_input_arn( + cls, call_context: _AwsSdkCallContext + ) -> Optional[str]: + for input_arn in cls._arn_arg_names: + arn = call_context.params.get(input_arn) + if arn: + return arn + return None + + @classmethod + def before_service_call(cls, call_context: _AwsSdkCallContext, span: Span): + cls._inject_span_into_entry(call_context.params) + + @classmethod + def _inject_span_into_entry(cls, entry: MutableMapping[str, Any]): + entry["MessageAttributes"] = inject_propagation_context( + entry.get("MessageAttributes") + ) + + +class _OpPublishBatch(_OpPublish): + _arn_arg_names = ("TopicArn",) + _phone_arg_name = None + + @classmethod + def operation_name(cls) -> str: + return "PublishBatch" + + @classmethod + def before_service_call(cls, call_context: _AwsSdkCallContext, span: Span): + for entry in call_context.params.get("PublishBatchRequestEntries", ()): + cls._inject_span_into_entry(entry) + + +################################################################################ +# SNS extension +################################################################################ + +_OPERATION_MAPPING = { + op.operation_name(): op + for op in globals().values() + if inspect.isclass(op) + and issubclass(op, _SnsOperation) + and not inspect.isabstract(op) +} # type: Dict[str, _SnsOperation] + + +class _SnsExtension(_AwsSdkExtension): + def __init__(self, call_context: _AwsSdkCallContext): + super().__init__(call_context) + self._op = _OPERATION_MAPPING.get(call_context.operation) + if self._op: + call_context.span_kind = self._op.span_kind() + + def extract_attributes(self, attributes: _AttributeMapT): + attributes[SpanAttributes.MESSAGING_SYSTEM] = "aws.sns" + + if self._op: + self._op.extract_attributes(self._call_context, attributes) + + def before_service_call(self, span: Span): + if self._op: + self._op.before_service_call(self._call_context, span) diff --git a/instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_messaging.py b/instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_messaging.py new file mode 100644 index 0000000000..d8a92e0cf9 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_messaging.py @@ -0,0 +1,52 @@ +# 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 opentelemetry.instrumentation.botocore.extensions._messaging import ( + inject_propagation_context, + message_attributes_setter, +) +from opentelemetry.test.test_base import TestBase + + +class TestMessageAttributes(TestBase): + def test_message_attributes_setter(self): + carrier = {} + + message_attributes_setter.set(carrier, "key", "value") + self.assertEqual( + {"key": {"DataType": "String", "StringValue": "value"}}, carrier + ) + + def test_inject_propagation_context(self): + carrier = { + "key1": {"DataType": "String", "StringValue": "value1"}, + "key2": {"DataType": "String", "StringValue": "value2"}, + } + + tracer = self.tracer_provider.get_tracer("test-tracer") + with tracer.start_as_current_span("span"): + inject_propagation_context(carrier) + + self.assertGreater(len(carrier), 2) + + def test_inject_propagation_context_too_many_attributes(self): + carrier = { + f"key{idx}": {"DataType": "String", "StringValue": f"value{idx}"} + for idx in range(10) + } + tracer = self.tracer_provider.get_tracer("test-tracer") + with tracer.start_as_current_span("span"): + inject_propagation_context(carrier) + + self.assertEqual(10, len(carrier)) diff --git a/instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_sns.py b/instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_sns.py new file mode 100644 index 0000000000..33f2531027 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_sns.py @@ -0,0 +1,189 @@ +# 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 contextlib +from typing import Any, Dict +from unittest import mock + +import botocore.session +from botocore.awsrequest import AWSResponse +from moto import mock_sns + +from opentelemetry.instrumentation.botocore import BotocoreInstrumentor +from opentelemetry.semconv.trace import ( + MessagingDestinationKindValues, + SpanAttributes, +) +from opentelemetry.test.test_base import TestBase +from opentelemetry.trace import SpanKind +from opentelemetry.trace.span import Span + + +class TestSnsExtension(TestBase): + def setUp(self): + super().setUp() + BotocoreInstrumentor().instrument() + + session = botocore.session.get_session() + session.set_credentials( + access_key="access-key", secret_key="secret-key" + ) + self.client = session.create_client("sns", region_name="us-west-2") + self.topic_name = "my-topic" + + def tearDown(self): + super().tearDown() + BotocoreInstrumentor().uninstrument() + + def _create_topic(self, name: str = None) -> str: + if name is None: + name = self.topic_name + + response = self.client.create_topic(Name=name) + + self.memory_exporter.clear() + return response["TopicArn"] + + @contextlib.contextmanager + def _mocked_aws_endpoint(self, response): + response_func = self._make_aws_response_func(response) + with mock.patch( + "botocore.endpoint.Endpoint.make_request", new=response_func + ): + yield + + @staticmethod + def _make_aws_response_func(response): + def _response_func(*args, **kwargs): + return AWSResponse("http://127.0.0.1", 200, {}, "{}"), response + + return _response_func + + def assert_span(self, name: str) -> Span: + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(1, len(spans)) + span = spans[0] + + self.assertEqual(SpanKind.PRODUCER, span.kind) + self.assertEqual(name, span.name) + self.assertEqual( + "aws.sns", span.attributes[SpanAttributes.MESSAGING_SYSTEM] + ) + + return span + + def assert_injected_span(self, message_attrs: Dict[str, Any], span: Span): + # traceparent: --- + trace_parent = message_attrs["traceparent"]["StringValue"].split("-") + span_context = span.get_span_context() + + self.assertEqual(span_context.trace_id, int(trace_parent[1], 16)) + self.assertEqual(span_context.span_id, int(trace_parent[2], 16)) + + @mock_sns + def test_publish_to_topic_arn(self): + self._test_publish_to_arn("TopicArn") + + @mock_sns + def test_publish_to_target_arn(self): + self._test_publish_to_arn("TargetArn") + + def _test_publish_to_arn(self, arg_name: str): + target_arn = self._create_topic(self.topic_name) + + self.client.publish( + **{ + arg_name: target_arn, + "Message": "Hello message", + } + ) + + span = self.assert_span(f"{self.topic_name} send") + self.assertEqual( + MessagingDestinationKindValues.TOPIC.value, + span.attributes[SpanAttributes.MESSAGING_DESTINATION_KIND], + ) + self.assertEqual( + self.topic_name, + span.attributes[SpanAttributes.MESSAGING_DESTINATION], + ) + + @mock_sns + def test_publish_to_phone_number(self): + phone_number = "+10000000000" + self.client.publish( + PhoneNumber=phone_number, + Message="Hello SNS", + ) + + span = self.assert_span("phone_number send") + self.assertEqual( + phone_number, span.attributes[SpanAttributes.MESSAGING_DESTINATION] + ) + + @mock_sns + def test_publish_injects_span(self): + message_attrs = {} + topic_arn = self._create_topic() + self.client.publish( + TopicArn=topic_arn, + Message="Hello Message", + MessageAttributes=message_attrs, + ) + + span = self.assert_span(f"{self.topic_name} send") + self.assert_injected_span(message_attrs, span) + + def test_publish_batch_to_topic(self): + topic_arn = f"arn:aws:sns:region:000000000:{self.topic_name}" + message1_attrs = {} + message2_attrs = {} + mock_response = { + "Successful": [ + {"Id": "1", "MessageId": "11", "SequenceNumber": "1"}, + {"Id": "2", "MessageId": "22", "SequenceNumber": "2"}, + ], + "Failed": [], + } + + # publish_batch not implemented by moto so mock the endpoint instead + with self._mocked_aws_endpoint(mock_response): + self.client.publish_batch( + TopicArn=topic_arn, + PublishBatchRequestEntries=[ + { + "Id": "1", + "Message": "Hello message 1", + "MessageAttributes": message1_attrs, + }, + { + "Id": "2", + "Message": "Hello message 2", + "MessageAttributes": message2_attrs, + }, + ], + ) + + span = self.assert_span(f"{self.topic_name} send") + self.assertEqual( + MessagingDestinationKindValues.TOPIC.value, + span.attributes[SpanAttributes.MESSAGING_DESTINATION_KIND], + ) + self.assertEqual( + self.topic_name, + span.attributes[SpanAttributes.MESSAGING_DESTINATION], + ) + + self.assert_injected_span(message1_attrs, span) + self.assert_injected_span(message2_attrs, span) From b6f9b62de7924fc22ab67e3532685640020f8e64 Mon Sep 17 00:00:00 2001 From: Diego Hurtado Date: Tue, 29 Nov 2022 14:04:48 +0100 Subject: [PATCH 20/28] Refactor comments in .flake8 (#1470) Fixes #1469 --- .flake8 | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/.flake8 b/.flake8 index 84b003d4b0..8b2144c00f 100644 --- a/.flake8 +++ b/.flake8 @@ -1,9 +1,17 @@ [flake8] ignore = - E501 # line too long, defer to black - W503 # allow line breaks before binary ops - W504 # allow line breaks after binary ops - E203 # allow whitespace before ':' (https://github.com/psf/black#slices) + # line too long, defer to black + E501 + + # allow line breaks before binary ops + W503 + + # allow line breaks after binary ops + W504 + + # allow whitespace before ':' (https://github.com/psf/black#slices) + E203 + exclude = .bzr .git From 538c65583087389a584cdc946c852ca5af373b02 Mon Sep 17 00:00:00 2001 From: avzis <107620508+avzis@users.noreply.github.com> Date: Sat, 3 Dec 2022 14:28:32 +0200 Subject: [PATCH 21/28] Add a test for mysql instrumentation using NoOpTracerProvider (#1423) --- .../tests/test_mysql_integration.py | 44 ++++++++++--------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-mysql/tests/test_mysql_integration.py b/instrumentation/opentelemetry-instrumentation-mysql/tests/test_mysql_integration.py index e2a0f2057c..8274851ff1 100644 --- a/instrumentation/opentelemetry-instrumentation-mysql/tests/test_mysql_integration.py +++ b/instrumentation/opentelemetry-instrumentation-mysql/tests/test_mysql_integration.py @@ -17,6 +17,7 @@ import mysql.connector import opentelemetry.instrumentation.mysql +from opentelemetry import trace as trace_api from opentelemetry.instrumentation.mysql import MySQLInstrumentor from opentelemetry.sdk import resources from opentelemetry.test.test_base import TestBase @@ -31,6 +32,15 @@ def cursor(self): return MockConnection() +def connect_and_execute_query(): + cnx = mysql.connector.connect(database="test") + cursor = cnx.cursor() + query = "SELECT * FROM test" + cursor.execute(query) + + return cnx, query + + class TestMysqlIntegration(TestBase): def tearDown(self): super().tearDown() @@ -42,10 +52,7 @@ def tearDown(self): def test_instrumentor(self): MySQLInstrumentor().instrument() - cnx = mysql.connector.connect(database="test") - cursor = cnx.cursor() - query = "SELECT * FROM test" - cursor.execute(query) + connect_and_execute_query() spans_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans_list), 1) @@ -59,10 +66,7 @@ def test_instrumentor(self): # check that no spans are generated after uninstrumen MySQLInstrumentor().uninstrument() - cnx = mysql.connector.connect(database="test") - cursor = cnx.cursor() - query = "SELECT * FROM test" - cursor.execute(query) + connect_and_execute_query() spans_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans_list), 1) @@ -74,10 +78,7 @@ def test_custom_tracer_provider(self): tracer_provider, exporter = result MySQLInstrumentor().instrument(tracer_provider=tracer_provider) - cnx = mysql.connector.connect(database="test") - cursor = cnx.cursor() - query = "SELECT * FROM test" - cursor.execute(query) + connect_and_execute_query() span_list = exporter.get_finished_spans() self.assertEqual(len(span_list), 1) @@ -88,10 +89,7 @@ def test_custom_tracer_provider(self): @patch("mysql.connector.connect", new=mock_connect) # pylint: disable=unused-argument def test_instrument_connection(self): - cnx = mysql.connector.connect(database="test") - query = "SELECT * FROM test" - cursor = cnx.cursor() - cursor.execute(query) + cnx, query = connect_and_execute_query() spans_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans_list), 0) @@ -103,14 +101,20 @@ def test_instrument_connection(self): spans_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans_list), 1) + @patch("mysql.connector.connect", new=mock_connect) + def test_instrument_connection_no_op_tracer_provider(self): + tracer_provider = trace_api.NoOpTracerProvider() + MySQLInstrumentor().instrument(tracer_provider=tracer_provider) + connect_and_execute_query() + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 0) + @patch("mysql.connector.connect", new=mock_connect) # pylint: disable=unused-argument def test_uninstrument_connection(self): MySQLInstrumentor().instrument() - cnx = mysql.connector.connect(database="test") - query = "SELECT * FROM test" - cursor = cnx.cursor() - cursor.execute(query) + cnx, query = connect_and_execute_query() spans_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans_list), 1) From 155fc465965b7dc85b286093a8c80eb1f37e7d18 Mon Sep 17 00:00:00 2001 From: Artem Rys Date: Sat, 3 Dec 2022 14:11:06 +0100 Subject: [PATCH 22/28] Minor refactoring (#1169) * Minor refactoring across multiple instrumentation libraries * Reformat using black * Put span_kind back in aws_lambda Co-authored-by: Srikanth Chekuri Co-authored-by: Diego Hurtado --- .../opentelemetry/instrumentation/aws_lambda/__init__.py | 9 ++++++--- .../src/opentelemetry/instrumentation/boto/__init__.py | 2 -- .../instrumentation/elasticsearch/__init__.py | 2 +- .../src/opentelemetry/instrumentation/flask/__init__.py | 1 - .../opentelemetry/instrumentation/pymongo/__init__.py | 2 +- .../src/opentelemetry/instrumentation/redis/__init__.py | 1 - .../instrumentation/system_metrics/__init__.py | 2 +- 7 files changed, 9 insertions(+), 10 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/__init__.py b/instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/__init__.py index 11769c729d..35dcec9491 100644 --- a/instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/__init__.py @@ -287,9 +287,12 @@ def _instrumented_lambda_handler_call( span_kind = None try: - if lambda_event["Records"][0]["eventSource"] in set( - ["aws:sqs", "aws:s3", "aws:sns", "aws:dynamodb"] - ): + if lambda_event["Records"][0]["eventSource"] in { + "aws:sqs", + "aws:s3", + "aws:sns", + "aws:dynamodb", + }: # See more: # https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html # https://docs.aws.amazon.com/lambda/latest/dg/with-sns.html diff --git a/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/__init__.py b/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/__init__.py index b94cc744b3..9f48d2c636 100644 --- a/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/__init__.py @@ -178,8 +178,6 @@ def _patched_query_request(self, original_func, instance, args, kwargs): ) def _patched_auth_request(self, original_func, instance, args, kwargs): - operation_name = None - frame = currentframe().f_back operation_name = None while frame: diff --git a/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/__init__.py b/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/__init__.py index a2c434c6cc..3b2767e272 100644 --- a/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/__init__.py @@ -130,7 +130,7 @@ def instrumentation_dependencies(self) -> Collection[str]: def _instrument(self, **kwargs): """ - Instruments elasticsearch module + Instruments Elasticsearch module """ tracer_provider = kwargs.get("tracer_provider") tracer = get_tracer(__name__, __version__, tracer_provider) diff --git a/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py b/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py index 6cb39c7e2c..45da04985d 100644 --- a/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py @@ -266,7 +266,6 @@ def response_hook(span: Span, status: str, response_headers: List): def get_default_span_name(): - span_name = "" try: span_name = flask.request.url_rule.rule except AttributeError: diff --git a/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/__init__.py b/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/__init__.py index 91cd81aab3..4e9ae8a14b 100644 --- a/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/__init__.py @@ -194,7 +194,7 @@ def _pop_span(self, event): def _get_span_dict_key(event): if event.connection_id is not None: - return (event.request_id, event.connection_id) + return event.request_id, event.connection_id return event.request_id diff --git a/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/__init__.py b/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/__init__.py index 1b0b714fa8..b85c2336b0 100644 --- a/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/__init__.py @@ -142,7 +142,6 @@ def _instrument( ): def _traced_execute_command(func, instance, args, kwargs): query = _format_command_args(args) - name = "" if len(args) > 0 and args[0]: name = args[0] else: diff --git a/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/__init__.py b/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/__init__.py index 420bad5d66..413c61ba8f 100644 --- a/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/__init__.py @@ -78,7 +78,7 @@ import psutil -# FIXME Remove this pyling disabling line when Github issue is cleared +# FIXME Remove this pylint disabling line when Github issue is cleared # pylint: disable=no-name-in-module from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.instrumentation.system_metrics.package import _instruments From bc57cc029dc0d77a4c0327b856a4f4bb6151d504 Mon Sep 17 00:00:00 2001 From: Sebastian Kreft Date: Sun, 4 Dec 2022 23:00:09 -0300 Subject: [PATCH 23/28] fix(asgi-instrumentation): extract target after running the framework (#1461) --- CHANGELOG.md | 2 ++ .../instrumentation/asgi/__init__.py | 8 +++---- .../tests/test_asgi_middleware.py | 21 +++++++++++-------- .../tests/test_fastapi_instrumentation.py | 3 ++- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f336be0cba..360b821440 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#1424](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1424)) - Remove db.name attribute from Redis instrumentation ([#1427](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1427)) +- `opentelemetry-instrumentation-asgi` Fix target extraction for duration metric + ([#1461](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1461)) - Add grpc.aio instrumentation to package entry points ([#1442](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1442)) diff --git a/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/__init__.py b/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/__init__.py index 608aeade7f..55bb418647 100644 --- a/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/__init__.py @@ -542,11 +542,6 @@ async def __call__(self, scope, receive, send): ) duration_attrs = _parse_duration_attrs(attributes) - target = _collect_target_attribute(scope) - if target: - active_requests_count_attrs[SpanAttributes.HTTP_TARGET] = target - duration_attrs[SpanAttributes.HTTP_TARGET] = target - if scope["type"] == "http": self.active_requests_counter.add(1, active_requests_count_attrs) try: @@ -581,6 +576,9 @@ async def __call__(self, scope, receive, send): await self.app(scope, otel_receive, otel_send) finally: if scope["type"] == "http": + target = _collect_target_attribute(scope) + if target: + duration_attrs[SpanAttributes.HTTP_TARGET] = target duration = max(round((default_timer() - start) * 1000), 0) self.duration_histogram.record(duration, duration_attrs) self.active_requests_counter.add( diff --git a/instrumentation/opentelemetry-instrumentation-asgi/tests/test_asgi_middleware.py b/instrumentation/opentelemetry-instrumentation-asgi/tests/test_asgi_middleware.py index 7582ffb998..bfa5720f99 100644 --- a/instrumentation/opentelemetry-instrumentation-asgi/tests/test_asgi_middleware.py +++ b/instrumentation/opentelemetry-instrumentation-asgi/tests/test_asgi_middleware.py @@ -591,8 +591,15 @@ def test_metric_target_attribute(self): class TestRoute: path_format = expected_target - self.scope["route"] = TestRoute() - app = otel_asgi.OpenTelemetryMiddleware(simple_asgi) + async def target_asgi(scope, receive, send): + assert isinstance(scope, dict) + if scope["type"] == "http": + await http_app(scope, receive, send) + scope["route"] = TestRoute() + else: + raise ValueError("websockets not supported") + + app = otel_asgi.OpenTelemetryMiddleware(target_asgi) self.seed_app(app) self.send_default_request() @@ -601,6 +608,8 @@ class TestRoute: for resource_metric in metrics_list.resource_metrics: for scope_metrics in resource_metric.scope_metrics: for metric in scope_metrics.metrics: + if metric.name != "http.server.duration": + continue for point in metric.data.data_points: if isinstance(point, HistogramDataPoint): self.assertEqual( @@ -608,13 +617,7 @@ class TestRoute: expected_target, ) assertions += 1 - elif isinstance(point, NumberDataPoint): - self.assertEqual( - point.attributes["http.target"], - expected_target, - ) - assertions += 1 - self.assertEqual(assertions, 2) + self.assertEqual(assertions, 1) def test_no_metric_for_websockets(self): self.scope = { diff --git a/instrumentation/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py b/instrumentation/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py index 14c3164029..c006b5c4fe 100644 --- a/instrumentation/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py +++ b/instrumentation/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py @@ -46,7 +46,7 @@ ] _recommended_attrs = { "http.server.active_requests": _active_requests_count_attrs, - "http.server.duration": _duration_attrs, + "http.server.duration": {*_duration_attrs, SpanAttributes.HTTP_TARGET}, } @@ -218,6 +218,7 @@ def test_basic_metric_success(self): "http.server_name": "testserver", "net.host.port": 80, "http.status_code": 200, + "http.target": "/foobar", } expected_requests_count_attributes = { "http.method": "GET", From 99e0b426350ab74cadb5fcb4c9504dee12e73773 Mon Sep 17 00:00:00 2001 From: Shalev Roda <65566801+shalevr@users.noreply.github.com> Date: Mon, 5 Dec 2022 18:58:10 +0200 Subject: [PATCH 24/28] Add uninstrument test for sqlalchemy (#1471) --- CHANGELOG.md | 2 ++ .../tests/test_sqlalchemy.py | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 360b821440..7746f5fe67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +- Add uninstrument test for sqlalchemy + ([#1471](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1471)) - `opentelemetry-instrumentation-tortoiseorm` Initial release ([#685](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/685)) - Add metric instrumentation for tornado diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py index 913b7d3c5e..099c088f64 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py @@ -227,3 +227,29 @@ async def run(): ) asyncio.get_event_loop().run_until_complete(run()) + + def test_uninstrument(self): + engine = create_engine("sqlite:///:memory:") + SQLAlchemyInstrumentor().instrument( + engine=engine, + tracer_provider=self.tracer_provider, + ) + cnx = engine.connect() + cnx.execute("SELECT 1 + 1;").fetchall() + spans = self.memory_exporter.get_finished_spans() + + self.assertEqual(len(spans), 2) + # first span - the connection to the db + self.assertEqual(spans[0].name, "connect") + self.assertEqual(spans[0].kind, trace.SpanKind.CLIENT) + # second span - the query itself + self.assertEqual(spans[1].name, "SELECT :memory:") + self.assertEqual(spans[1].kind, trace.SpanKind.CLIENT) + + self.memory_exporter.clear() + SQLAlchemyInstrumentor().uninstrument() + engine2 = create_engine("sqlite:///:memory:") + cnx2 = engine2.connect() + cnx2.execute("SELECT 2 + 2;").fetchall() + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 0) From cfd017e5ec49d4584bc2bc6810c7c330e7ff53ab Mon Sep 17 00:00:00 2001 From: avzis <107620508+avzis@users.noreply.github.com> Date: Tue, 6 Dec 2022 16:52:38 +0200 Subject: [PATCH 25/28] fix enable_commenter functionality (#1440) --- CHANGELOG.md | 2 ++ .../instrumentation/sqlalchemy/__init__.py | 11 +++++--- .../instrumentation/sqlalchemy/engine.py | 12 +++++---- .../tests/test_sqlcommenter.py | 27 +++++++++++++++++++ 4 files changed, 44 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7746f5fe67..b72b9d09bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#1461](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1461)) - Add grpc.aio instrumentation to package entry points ([#1442](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1442)) +- Fix a bug in SQLAlchemy instrumentation - support disabling enable_commenter variable + ([#1440](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1440)) ## Version 1.14.0/0.35b0 (2022-11-03) diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py index e56485ca77..6c91ae16e0 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py @@ -136,11 +136,16 @@ def _instrument(self, **kwargs): An instrumented engine if passed in as an argument or list of instrumented engines, None otherwise. """ tracer_provider = kwargs.get("tracer_provider") - _w("sqlalchemy", "create_engine", _wrap_create_engine(tracer_provider)) + enable_commenter = kwargs.get("enable_commenter", False) + _w( + "sqlalchemy", + "create_engine", + _wrap_create_engine(tracer_provider, enable_commenter), + ) _w( "sqlalchemy.engine", "create_engine", - _wrap_create_engine(tracer_provider), + _wrap_create_engine(tracer_provider, enable_commenter), ) _w( "sqlalchemy.engine.base", @@ -151,7 +156,7 @@ def _instrument(self, **kwargs): _w( "sqlalchemy.ext.asyncio", "create_async_engine", - _wrap_create_async_engine(tracer_provider), + _wrap_create_async_engine(tracer_provider, enable_commenter), ) if kwargs.get("engine") is not None: return EngineTracer( diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py index 2965f45085..33d0183ef0 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py @@ -49,27 +49,29 @@ def _get_tracer(tracer_provider=None): ) -def _wrap_create_async_engine(tracer_provider=None): +def _wrap_create_async_engine(tracer_provider=None, enable_commenter=False): # pylint: disable=unused-argument def _wrap_create_async_engine_internal(func, module, args, kwargs): """Trace the SQLAlchemy engine, creating an `EngineTracer` object that will listen to SQLAlchemy events. """ engine = func(*args, **kwargs) - EngineTracer(_get_tracer(tracer_provider), engine.sync_engine) + EngineTracer( + _get_tracer(tracer_provider), engine.sync_engine, enable_commenter + ) return engine return _wrap_create_async_engine_internal -def _wrap_create_engine(tracer_provider=None): +def _wrap_create_engine(tracer_provider=None, enable_commenter=False): # pylint: disable=unused-argument def _wrap_create_engine_internal(func, module, args, kwargs): """Trace the SQLAlchemy engine, creating an `EngineTracer` object that will listen to SQLAlchemy events. """ engine = func(*args, **kwargs) - EngineTracer(_get_tracer(tracer_provider), engine) + EngineTracer(_get_tracer(tracer_provider), engine, enable_commenter) return engine return _wrap_create_engine_internal @@ -94,7 +96,7 @@ def _wrap_connect_internal(func, module, args, kwargs): class EngineTracer: def __init__( - self, tracer, engine, enable_commenter=True, commenter_options=None + self, tracer, engine, enable_commenter=False, commenter_options=None ): self.tracer = tracer self.engine = engine diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlcommenter.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlcommenter.py index 6cdc5b2f67..5f9e75a1aa 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlcommenter.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlcommenter.py @@ -77,3 +77,30 @@ def test_sqlcommenter_flask_integration(self): self.caplog.records[-2].getMessage(), r"SELECT 1 /\*db_driver='(.*)',flask=1,traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;", ) + + def test_sqlcommenter_enabled_create_engine_after_instrumentation(self): + SQLAlchemyInstrumentor().instrument( + tracer_provider=self.tracer_provider, + enable_commenter=True, + ) + from sqlalchemy import create_engine # pylint: disable-all + + engine = create_engine("sqlite:///:memory:") + cnx = engine.connect() + cnx.execute("SELECT 1;").fetchall() + self.assertRegex( + self.caplog.records[-2].getMessage(), + r"SELECT 1 /\*db_driver='(.*)',traceparent='\d{1,2}-[a-zA-Z0-9_]{32}-[a-zA-Z0-9_]{16}-\d{1,2}'\*/;", + ) + + def test_sqlcommenter_disabled_create_engine_after_instrumentation(self): + SQLAlchemyInstrumentor().instrument( + tracer_provider=self.tracer_provider, + enable_commenter=False, + ) + from sqlalchemy import create_engine # pylint: disable-all + + engine = create_engine("sqlite:///:memory:") + cnx = engine.connect() + cnx.execute("SELECT 1;").fetchall() + self.assertEqual(self.caplog.records[-2].getMessage(), "SELECT 1;") From 25a6535f26ab6cb4f85a8c23da4e42fa50e218f9 Mon Sep 17 00:00:00 2001 From: Miguel Alexandre Date: Tue, 6 Dec 2022 16:58:03 +0100 Subject: [PATCH 26/28] Instrument newer versions (#1468) --- CHANGELOG.md | 2 ++ instrumentation/README.md | 2 +- .../pyproject.toml | 2 +- .../instrumentation/confluent_kafka/package.py | 2 +- .../src/opentelemetry/instrumentation/bootstrap_gen.py | 2 +- tox.ini | 9 +++++++++ 6 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b72b9d09bd..bb80fc7c4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#1409](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1409)) - Strip leading comments from SQL queries when generating the span name. ([#1434](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1434)) +- `opentelemetry-instrumentation-confluent-kafka` Add support for the latest versions of the library. + ([#1468](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1468)) ### Fixed diff --git a/instrumentation/README.md b/instrumentation/README.md index d5ef42954c..0439bc1cae 100644 --- a/instrumentation/README.md +++ b/instrumentation/README.md @@ -11,7 +11,7 @@ | [opentelemetry-instrumentation-boto3sqs](./opentelemetry-instrumentation-boto3sqs) | boto3 ~= 1.0 | No | [opentelemetry-instrumentation-botocore](./opentelemetry-instrumentation-botocore) | botocore ~= 1.0 | No | [opentelemetry-instrumentation-celery](./opentelemetry-instrumentation-celery) | celery >= 4.0, < 6.0 | No -| [opentelemetry-instrumentation-confluent-kafka](./opentelemetry-instrumentation-confluent-kafka) | confluent-kafka ~= 1.8.2 | No +| [opentelemetry-instrumentation-confluent-kafka](./opentelemetry-instrumentation-confluent-kafka) | confluent-kafka >= 1.8.2, < 2.0.0 | No | [opentelemetry-instrumentation-dbapi](./opentelemetry-instrumentation-dbapi) | dbapi | No | [opentelemetry-instrumentation-django](./opentelemetry-instrumentation-django) | django >= 1.10 | Yes | [opentelemetry-instrumentation-elasticsearch](./opentelemetry-instrumentation-elasticsearch) | elasticsearch >= 2.0 | No diff --git a/instrumentation/opentelemetry-instrumentation-confluent-kafka/pyproject.toml b/instrumentation/opentelemetry-instrumentation-confluent-kafka/pyproject.toml index 43b640fd1e..a84f7d959e 100644 --- a/instrumentation/opentelemetry-instrumentation-confluent-kafka/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-confluent-kafka/pyproject.toml @@ -31,7 +31,7 @@ dependencies = [ [project.optional-dependencies] instruments = [ - "confluent-kafka ~= 1.8.2", + "confluent-kafka >= 1.8.2, < 2.0.0", ] test = [ "opentelemetry-instrumentation-confluent-kafka[instruments]", diff --git a/instrumentation/opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka/package.py b/instrumentation/opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka/package.py index dbe3ac484b..eab664d9ee 100644 --- a/instrumentation/opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka/package.py +++ b/instrumentation/opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka/package.py @@ -13,4 +13,4 @@ # limitations under the License. -_instruments = ("confluent-kafka ~= 1.8.2",) +_instruments = ("confluent-kafka >= 1.8.2, < 2.0.0",) diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py index e3564ba189..32c96a9e2c 100644 --- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py +++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py @@ -53,7 +53,7 @@ "instrumentation": "opentelemetry-instrumentation-celery==0.36b0.dev", }, "confluent-kafka": { - "library": "confluent-kafka ~= 1.8.2", + "library": "confluent-kafka >= 1.8.2, < 2.0.0", "instrumentation": "opentelemetry-instrumentation-confluent-kafka==0.36b0.dev", }, "django": { diff --git a/tox.ini b/tox.ini index f61540b7c4..4cd6fa02f5 100644 --- a/tox.ini +++ b/tox.ini @@ -207,6 +207,10 @@ envlist = py3{7,8,9,10,11}-test-instrumentation-kafka-python pypy3-test-instrumentation-kafka-python + ; opentelemetry-instrumentation-confluent-kafka + // FIXME: Enable support for python 3.11 when https://github.com/confluentinc/confluent-kafka-python/issues/1452 is fixed + py3{7,8,9,10}-test-instrumentation-confluent-kafka + lint spellcheck docker-tests @@ -284,6 +288,7 @@ changedir = test-instrumentation-grpc: instrumentation/opentelemetry-instrumentation-grpc/tests test-instrumentation-jinja2: instrumentation/opentelemetry-instrumentation-jinja2/tests test-instrumentation-kafka-python: instrumentation/opentelemetry-instrumentation-kafka-python/tests + test-instrumentation-confluent-kafka: instrumentation/opentelemetry-instrumentation-confluent-kafka/tests test-instrumentation-logging: instrumentation/opentelemetry-instrumentation-logging/tests test-instrumentation-mysql: instrumentation/opentelemetry-instrumentation-mysql/tests test-instrumentation-pika{0,1}: instrumentation/opentelemetry-instrumentation-pika/tests @@ -330,6 +335,8 @@ commands_pre = kafka-python: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-kafka-python[test] + confluent-kafka: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-confluent-kafka[test] + grpc: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc[test] falcon{1,2,3},flask,django{1,2,3,4},pyramid,tornado,starlette,fastapi,aiohttp,asgi,requests,urllib,urllib3,wsgi: pip install {toxinidir}/util/opentelemetry-util-http[test] @@ -492,6 +499,7 @@ commands_pre = python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-fastapi[test] python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-jinja2[test] python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-kafka-python[test] + python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-confluent-kafka[test] python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-logging[test] python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-pymemcache[test] python -m pip install -e {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg2[test] @@ -556,6 +564,7 @@ commands_pre = -e {toxinidir}/instrumentation/opentelemetry-instrumentation-celery \ -e {toxinidir}/instrumentation/opentelemetry-instrumentation-pika \ -e {toxinidir}/instrumentation/opentelemetry-instrumentation-kafka-python \ + -e {toxinidir}/instrumentation/opentelemetry-instrumentation-confluent-kafka \ -e {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi \ -e {toxinidir}/instrumentation/opentelemetry-instrumentation-mysql \ -e {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg2 \ From fc738c04a629153ccec476b76ea9514ecb5a051f Mon Sep 17 00:00:00 2001 From: Srikanth Chekuri Date: Fri, 9 Dec 2022 04:09:48 +0530 Subject: [PATCH 27/28] Pin tox version (#1480) --- .github/workflows/test.yml | 4 ++-- CONTRIBUTING.md | 6 +++--- README.md | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fa4244bc66..2b0d9743f2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -34,7 +34,7 @@ jobs: with: python-version: ${{ env[matrix.python-version] }} - name: Install tox - run: pip install -U tox-factor + run: pip install tox==3.27.1 tox-factor - name: Cache tox environment # Preserves .tox directory between runs for faster installs uses: actions/cache@v1 @@ -107,7 +107,7 @@ jobs: with: python-version: 3.9 - name: Install tox - run: pip install -U tox + run: pip install tox==3.27.1 - name: Install libsnappy-dev if: ${{ matrix.tox-environment == 'lint' }} run: sudo apt-get install -y libsnappy-dev diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4d003ea11c..a159bd1f03 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -32,7 +32,7 @@ some aspects of development, including testing against multiple Python versions. To install `tox`, run: ```console -$ pip install tox +$ pip install tox==3.27.1 ``` You can run `tox` with the following arguments: @@ -103,7 +103,7 @@ Run tests: ```sh # make sure you have all supported versions of Python installed -$ pip install tox # only first time. +$ pip install tox==3.27.1 # only first time. $ tox # execute in the root of the repository ``` @@ -162,7 +162,7 @@ For a deeper discussion, see: https://github.com/open-telemetry/opentelemetry-sp ## Running Tests Locally 1. Go to your Contrib repo directory. `git clone git@github.com:open-telemetry/opentelemetry-python-contrib.git && cd opentelemetry-python-contrib`. -2. Make sure you have `tox` installed. `pip install tox`. +2. Make sure you have `tox` installed. `pip install tox==3.27.1`. 3. Run `tox` without any arguments to run tests for all the packages. Read more about [tox](https://tox.readthedocs.io/en/latest/). ### Testing against a different Core repo branch/commit diff --git a/README.md b/README.md index 79db46a1ae..4c2f07f66a 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ Emeritus Maintainers: 1. Go to your Contrib repo directory. `cd ~/git/opentelemetry-python-contrib`. 2. Create a virtual env in your Contrib repo directory. `python3 -m venv my_test_venv`. 3. Activate your virtual env. `source my_test_venv/bin/activate`. -4. Make sure you have `tox` installed. `pip install tox`. +4. Make sure you have `tox` installed. `pip install tox==3.27.1`. 5. Run tests for a package. (e.g. `tox -e test-instrumentation-flask`.) ### Thanks to all the people who already contributed! From 71781d3964aad08211006b13f528969f5ed574e3 Mon Sep 17 00:00:00 2001 From: Srikanth Chekuri Date: Sat, 10 Dec 2022 02:33:51 +0530 Subject: [PATCH 28/28] updating changelogs and version to 1.15.0-0.36b0 (#1482) --- .github/workflows/test.yml | 2 +- _template/version.py | 2 +- eachdist.ini | 4 +- .../prometheus_remote_write/version.py | 2 +- .../pyproject.toml | 2 +- .../exporter/richconsole/version.py | 2 +- .../pyproject.toml | 2 +- .../instrumentation/aio_pika/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/aiohttp_client/version.py | 2 +- .../pyproject.toml | 8 +- .../instrumentation/aiopg/version.py | 2 +- .../pyproject.toml | 8 +- .../instrumentation/asgi/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/asyncpg/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/aws_lambda/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/boto/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/boto3sqs/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/botocore/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/celery/version.py | 2 +- .../confluent_kafka/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/dbapi/version.py | 2 +- .../pyproject.toml | 12 +-- .../instrumentation/django/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/elasticsearch/version.py | 2 +- .../pyproject.toml | 10 +-- .../instrumentation/falcon/version.py | 2 +- .../pyproject.toml | 10 +-- .../instrumentation/fastapi/version.py | 2 +- .../pyproject.toml | 10 +-- .../instrumentation/flask/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/grpc/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/httpx/version.py | 2 +- .../pyproject.toml | 4 +- .../instrumentation/jinja2/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/kafka/version.py | 2 +- .../pyproject.toml | 4 +- .../instrumentation/logging/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/mysql/version.py | 2 +- .../pyproject.toml | 2 +- .../instrumentation/pika/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/psycopg2/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/pymemcache/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/pymongo/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/pymysql/version.py | 2 +- .../pyproject.toml | 10 +-- .../instrumentation/pyramid/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/redis/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/remoulade/version.py | 2 +- .../pyproject.toml | 8 +- .../instrumentation/requests/version.py | 2 +- .../pyproject.toml | 4 +- .../instrumentation/sklearn/version.py | 2 +- .../pyproject.toml | 4 +- .../instrumentation/sqlalchemy/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/sqlite3/version.py | 2 +- .../pyproject.toml | 10 +-- .../instrumentation/starlette/version.py | 2 +- .../pyproject.toml | 2 +- .../instrumentation/system_metrics/version.py | 2 +- .../pyproject.toml | 8 +- .../instrumentation/tornado/version.py | 2 +- .../pyproject.toml | 6 +- .../instrumentation/tortoiseorm/version.py | 2 +- .../pyproject.toml | 8 +- .../instrumentation/urllib/version.py | 2 +- .../pyproject.toml | 8 +- .../instrumentation/urllib3/version.py | 2 +- .../pyproject.toml | 8 +- .../instrumentation/wsgi/version.py | 2 +- .../pyproject.toml | 84 +++++++++--------- .../contrib-instrumentations/version.py | 2 +- opentelemetry-distro/pyproject.toml | 4 +- .../src/opentelemetry/distro/version.py | 2 +- .../instrumentation/bootstrap_gen.py | 86 +++++++++---------- .../opentelemetry/instrumentation/version.py | 2 +- .../propagators/ot_trace/version.py | 2 +- .../src/opentelemetry/util/http/version.py | 2 +- 97 files changed, 274 insertions(+), 274 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2b0d9743f2..a71fdc8d12 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,7 +6,7 @@ on: - 'release/*' pull_request: env: - CORE_REPO_SHA: a97b3a70e852f77c6a25c69192fc506c127cdaaa + CORE_REPO_SHA: 1bf8f84c83f8772331be4e4a7e527f6bd3c03cb6 jobs: build: diff --git a/_template/version.py b/_template/version.py index fa69afa640..b411eb0b3f 100644 --- a/_template/version.py +++ b/_template/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/eachdist.ini b/eachdist.ini index aae88dc118..38fc95c563 100644 --- a/eachdist.ini +++ b/eachdist.ini @@ -16,7 +16,7 @@ sortfirst= ext/* [stable] -version=1.15.0.dev +version=1.15.0 packages= opentelemetry-sdk @@ -34,7 +34,7 @@ packages= opentelemetry-api [prerelease] -version=0.36b0.dev +version=0.36b0 packages= all diff --git a/exporter/opentelemetry-exporter-prometheus-remote-write/src/opentelemetry/exporter/prometheus_remote_write/version.py b/exporter/opentelemetry-exporter-prometheus-remote-write/src/opentelemetry/exporter/prometheus_remote_write/version.py index fa69afa640..b411eb0b3f 100644 --- a/exporter/opentelemetry-exporter-prometheus-remote-write/src/opentelemetry/exporter/prometheus_remote_write/version.py +++ b/exporter/opentelemetry-exporter-prometheus-remote-write/src/opentelemetry/exporter/prometheus_remote_write/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/exporter/opentelemetry-exporter-richconsole/pyproject.toml b/exporter/opentelemetry-exporter-richconsole/pyproject.toml index a30810af42..3ee6515b2f 100644 --- a/exporter/opentelemetry-exporter-richconsole/pyproject.toml +++ b/exporter/opentelemetry-exporter-richconsole/pyproject.toml @@ -27,7 +27,7 @@ classifiers = [ dependencies = [ "opentelemetry-api ~= 1.12", "opentelemetry-sdk ~= 1.12", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0", "rich>=10.0.0", ] diff --git a/exporter/opentelemetry-exporter-richconsole/src/opentelemetry/exporter/richconsole/version.py b/exporter/opentelemetry-exporter-richconsole/src/opentelemetry/exporter/richconsole/version.py index fa69afa640..b411eb0b3f 100644 --- a/exporter/opentelemetry-exporter-richconsole/src/opentelemetry/exporter/richconsole/version.py +++ b/exporter/opentelemetry-exporter-richconsole/src/opentelemetry/exporter/richconsole/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-aio-pika/pyproject.toml b/instrumentation/opentelemetry-instrumentation-aio-pika/pyproject.toml index b9c7c872fb..6f5102aca7 100644 --- a/instrumentation/opentelemetry-instrumentation-aio-pika/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-aio-pika/pyproject.toml @@ -35,7 +35,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-aio-pika[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", "pytest", "wrapt >= 1.0.0, < 2.0.0", ] diff --git a/instrumentation/opentelemetry-instrumentation-aio-pika/src/opentelemetry/instrumentation/aio_pika/version.py b/instrumentation/opentelemetry-instrumentation-aio-pika/src/opentelemetry/instrumentation/aio_pika/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-aio-pika/src/opentelemetry/instrumentation/aio_pika/version.py +++ b/instrumentation/opentelemetry-instrumentation-aio-pika/src/opentelemetry/instrumentation/aio_pika/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-aiohttp-client/pyproject.toml b/instrumentation/opentelemetry-instrumentation-aiohttp-client/pyproject.toml index 1f57d376fe..b78cadc792 100644 --- a/instrumentation/opentelemetry-instrumentation-aiohttp-client/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-aiohttp-client/pyproject.toml @@ -26,9 +26,9 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", - "opentelemetry-util-http == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", + "opentelemetry-util-http == 0.36b0", "wrapt >= 1.0.0, < 2.0.0", ] diff --git a/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/version.py b/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/version.py index 6021444b6c..1d33cd09cb 100644 --- a/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/version.py +++ b/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-aiopg/pyproject.toml b/instrumentation/opentelemetry-instrumentation-aiopg/pyproject.toml index 8fb7d27cfd..8b0958e534 100644 --- a/instrumentation/opentelemetry-instrumentation-aiopg/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-aiopg/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-instrumentation-dbapi == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-instrumentation-dbapi == 0.36b0", "wrapt >= 1.0.0, < 2.0.0", ] @@ -37,8 +37,8 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-aiopg[instruments]", - "opentelemetry-semantic-conventions == 0.36b0.dev", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py b/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py +++ b/instrumentation/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.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-asgi/pyproject.toml b/instrumentation/opentelemetry-instrumentation-asgi/pyproject.toml index 5e4f280ecf..b9034c622c 100644 --- a/instrumentation/opentelemetry-instrumentation-asgi/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-asgi/pyproject.toml @@ -27,9 +27,9 @@ classifiers = [ dependencies = [ "asgiref ~= 3.0", "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", - "opentelemetry-util-http == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", + "opentelemetry-util-http == 0.36b0", ] [project.optional-dependencies] @@ -38,7 +38,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-asgi[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.urls] diff --git a/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/version.py b/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/version.py +++ b/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-asyncpg/pyproject.toml b/instrumentation/opentelemetry-instrumentation-asyncpg/pyproject.toml index 5452a77535..123596926e 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncpg/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-asyncpg/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-asyncpg[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/version.py b/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/version.py +++ b/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-aws-lambda/pyproject.toml b/instrumentation/opentelemetry-instrumentation-aws-lambda/pyproject.toml index 538b6d7fee..da4e67afda 100644 --- a/instrumentation/opentelemetry-instrumentation-aws-lambda/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-aws-lambda/pyproject.toml @@ -22,15 +22,15 @@ classifiers = [ "Programming Language :: Python :: 3.8", ] dependencies = [ - "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", "opentelemetry-propagator-aws-xray == 1.0.1", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0", ] [project.optional-dependencies] instruments = [] test = [ - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.urls] diff --git a/instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/version.py b/instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/version.py +++ b/instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-boto/pyproject.toml b/instrumentation/opentelemetry-instrumentation-boto/pyproject.toml index 0f1126b511..7361b0524f 100644 --- a/instrumentation/opentelemetry-instrumentation-boto/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-boto/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", ] [project.optional-dependencies] @@ -38,7 +38,7 @@ test = [ "opentelemetry-instrumentation-boto[instruments]", "markupsafe==2.0.1", "moto~=2.0", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/version.py b/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/version.py +++ b/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-boto3sqs/pyproject.toml b/instrumentation/opentelemetry-instrumentation-boto3sqs/pyproject.toml index 220cc1572d..00475a5d5e 100644 --- a/instrumentation/opentelemetry-instrumentation-boto3sqs/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-boto3sqs/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", "wrapt >= 1.0.0, < 2.0.0", ] @@ -37,7 +37,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-boto3sqs[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-boto3sqs/src/opentelemetry/instrumentation/boto3sqs/version.py b/instrumentation/opentelemetry-instrumentation-boto3sqs/src/opentelemetry/instrumentation/boto3sqs/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-boto3sqs/src/opentelemetry/instrumentation/boto3sqs/version.py +++ b/instrumentation/opentelemetry-instrumentation-boto3sqs/src/opentelemetry/instrumentation/boto3sqs/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-botocore/pyproject.toml b/instrumentation/opentelemetry-instrumentation-botocore/pyproject.toml index a27328300d..5e04c491b7 100644 --- a/instrumentation/opentelemetry-instrumentation-botocore/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-botocore/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", ] [project.optional-dependencies] @@ -38,7 +38,7 @@ test = [ "opentelemetry-instrumentation-botocore[instruments]", "markupsafe==2.0.1", "moto[all] ~= 2.2.6", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/version.py b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/version.py +++ b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-celery/pyproject.toml b/instrumentation/opentelemetry-instrumentation-celery/pyproject.toml index 0c2e9207e4..8d9c95a274 100644 --- a/instrumentation/opentelemetry-instrumentation-celery/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-celery/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-celery[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", "importlib-metadata==4.13.0", "pytest", ] diff --git a/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/version.py b/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/version.py +++ b/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka/version.py b/instrumentation/opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka/version.py +++ b/instrumentation/opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-dbapi/pyproject.toml b/instrumentation/opentelemetry-instrumentation-dbapi/pyproject.toml index 91e9ced419..b62d816357 100644 --- a/instrumentation/opentelemetry-instrumentation-dbapi/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-dbapi/pyproject.toml @@ -26,15 +26,15 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", "wrapt >= 1.0.0, < 2.0.0", ] [project.optional-dependencies] instruments = [] test = [ - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.urls] diff --git a/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/version.py b/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/version.py index ab0deff1e3..295c18dcf7 100644 --- a/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/version.py +++ b/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/version.py @@ -12,6 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" _instruments = tuple() diff --git a/instrumentation/opentelemetry-instrumentation-django/pyproject.toml b/instrumentation/opentelemetry-instrumentation-django/pyproject.toml index 6777362c1a..d3fa315eed 100644 --- a/instrumentation/opentelemetry-instrumentation-django/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-django/pyproject.toml @@ -26,22 +26,22 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-instrumentation-wsgi == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", - "opentelemetry-util-http == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-instrumentation-wsgi == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", + "opentelemetry-util-http == 0.36b0", ] [project.optional-dependencies] asgi = [ - "opentelemetry-instrumentation-asgi == 0.36b0.dev", + "opentelemetry-instrumentation-asgi == 0.36b0", ] instruments = [ "django >= 1.10", ] test = [ "opentelemetry-instrumentation-django[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/version.py b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/version.py +++ b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-elasticsearch/pyproject.toml b/instrumentation/opentelemetry-instrumentation-elasticsearch/pyproject.toml index b98333d886..1f533f1281 100644 --- a/instrumentation/opentelemetry-instrumentation-elasticsearch/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-elasticsearch/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", "wrapt >= 1.0.0, < 2.0.0", ] @@ -38,7 +38,7 @@ instruments = [ test = [ "opentelemetry-instrumentation-elasticsearch[instruments]", "elasticsearch-dsl >= 2.0", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/version.py b/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/version.py +++ b/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-falcon/pyproject.toml b/instrumentation/opentelemetry-instrumentation-falcon/pyproject.toml index 56cdbaae5c..c2e7dbddc0 100644 --- a/instrumentation/opentelemetry-instrumentation-falcon/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-falcon/pyproject.toml @@ -26,10 +26,10 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-instrumentation-wsgi == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", - "opentelemetry-util-http == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-instrumentation-wsgi == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", + "opentelemetry-util-http == 0.36b0", "packaging >= 20.0", ] @@ -39,7 +39,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-falcon[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", "parameterized == 0.7.4", ] diff --git a/instrumentation/opentelemetry-instrumentation-falcon/src/opentelemetry/instrumentation/falcon/version.py b/instrumentation/opentelemetry-instrumentation-falcon/src/opentelemetry/instrumentation/falcon/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-falcon/src/opentelemetry/instrumentation/falcon/version.py +++ b/instrumentation/opentelemetry-instrumentation-falcon/src/opentelemetry/instrumentation/falcon/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-fastapi/pyproject.toml b/instrumentation/opentelemetry-instrumentation-fastapi/pyproject.toml index 4d21fd2c80..98d4591b71 100644 --- a/instrumentation/opentelemetry-instrumentation-fastapi/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-fastapi/pyproject.toml @@ -26,10 +26,10 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-instrumentation-asgi == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", - "opentelemetry-util-http == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-instrumentation-asgi == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", + "opentelemetry-util-http == 0.36b0", ] [project.optional-dependencies] @@ -38,7 +38,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-fastapi[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", "requests ~= 2.23", # needed for testclient "httpx ~= 0.22", # needed for testclient ] diff --git a/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py b/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py +++ b/instrumentation/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.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-flask/pyproject.toml b/instrumentation/opentelemetry-instrumentation-flask/pyproject.toml index f0b846e241..6f9f14fd9f 100644 --- a/instrumentation/opentelemetry-instrumentation-flask/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-flask/pyproject.toml @@ -26,10 +26,10 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-instrumentation-wsgi == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", - "opentelemetry-util-http == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-instrumentation-wsgi == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", + "opentelemetry-util-http == 0.36b0", ] [project.optional-dependencies] @@ -39,7 +39,7 @@ instruments = [ test = [ "opentelemetry-instrumentation-flask[instruments]", "markupsafe==2.0.1", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/version.py b/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/version.py +++ b/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-grpc/pyproject.toml b/instrumentation/opentelemetry-instrumentation-grpc/pyproject.toml index c379309694..5fedda1f5b 100644 --- a/instrumentation/opentelemetry-instrumentation-grpc/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-grpc/pyproject.toml @@ -26,9 +26,9 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", "opentelemetry-sdk ~= 1.12", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-semantic-conventions == 0.36b0", "wrapt >= 1.0.0, < 2.0.0", ] @@ -39,7 +39,7 @@ instruments = [ test = [ "opentelemetry-instrumentation-grpc[instruments]", "opentelemetry-sdk ~= 1.12", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", "protobuf ~= 3.13", ] diff --git a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py +++ b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-httpx/pyproject.toml b/instrumentation/opentelemetry-instrumentation-httpx/pyproject.toml index 61e1bc4b6e..172a1e3bcd 100644 --- a/instrumentation/opentelemetry-instrumentation-httpx/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-httpx/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", ] [project.optional-dependencies] @@ -37,7 +37,7 @@ instruments = [ test = [ "opentelemetry-instrumentation-httpx[instruments]", "opentelemetry-sdk ~= 1.12", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-httpx/src/opentelemetry/instrumentation/httpx/version.py b/instrumentation/opentelemetry-instrumentation-httpx/src/opentelemetry/instrumentation/httpx/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-httpx/src/opentelemetry/instrumentation/httpx/version.py +++ b/instrumentation/opentelemetry-instrumentation-httpx/src/opentelemetry/instrumentation/httpx/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-jinja2/pyproject.toml b/instrumentation/opentelemetry-instrumentation-jinja2/pyproject.toml index 1de00f3dca..94b38f2016 100644 --- a/instrumentation/opentelemetry-instrumentation-jinja2/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-jinja2/pyproject.toml @@ -25,7 +25,7 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", "wrapt >= 1.0.0, < 2.0.0", ] @@ -36,7 +36,7 @@ instruments = [ test = [ "opentelemetry-instrumentation-jinja2[instruments]", "markupsafe==2.0.1", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/version.py b/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/version.py +++ b/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-kafka-python/pyproject.toml b/instrumentation/opentelemetry-instrumentation-kafka-python/pyproject.toml index dc158ffd76..fb1a82b1fe 100644 --- a/instrumentation/opentelemetry-instrumentation-kafka-python/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-kafka-python/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.5", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-kafka-python[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", "wrapt >= 1.0.0, < 2.0.0", ] diff --git a/instrumentation/opentelemetry-instrumentation-kafka-python/src/opentelemetry/instrumentation/kafka/version.py b/instrumentation/opentelemetry-instrumentation-kafka-python/src/opentelemetry/instrumentation/kafka/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-kafka-python/src/opentelemetry/instrumentation/kafka/version.py +++ b/instrumentation/opentelemetry-instrumentation-kafka-python/src/opentelemetry/instrumentation/kafka/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-logging/pyproject.toml b/instrumentation/opentelemetry-instrumentation-logging/pyproject.toml index a6f3c377c0..754ff7ad97 100644 --- a/instrumentation/opentelemetry-instrumentation-logging/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-logging/pyproject.toml @@ -25,13 +25,13 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", ] [project.optional-dependencies] instruments = [] test = [ - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-logging/src/opentelemetry/instrumentation/logging/version.py b/instrumentation/opentelemetry-instrumentation-logging/src/opentelemetry/instrumentation/logging/version.py index ab0deff1e3..295c18dcf7 100644 --- a/instrumentation/opentelemetry-instrumentation-logging/src/opentelemetry/instrumentation/logging/version.py +++ b/instrumentation/opentelemetry-instrumentation-logging/src/opentelemetry/instrumentation/logging/version.py @@ -12,6 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" _instruments = tuple() diff --git a/instrumentation/opentelemetry-instrumentation-mysql/pyproject.toml b/instrumentation/opentelemetry-instrumentation-mysql/pyproject.toml index b9a49200e9..818faaa91e 100644 --- a/instrumentation/opentelemetry-instrumentation-mysql/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-mysql/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-instrumentation-dbapi == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-instrumentation-dbapi == 0.36b0", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-mysql[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/version.py b/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/version.py +++ b/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-pika/pyproject.toml b/instrumentation/opentelemetry-instrumentation-pika/pyproject.toml index 9489c2e22c..674f1f829f 100644 --- a/instrumentation/opentelemetry-instrumentation-pika/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-pika/pyproject.toml @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-pika[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", "pytest", "wrapt >= 1.0.0, < 2.0.0", ] diff --git a/instrumentation/opentelemetry-instrumentation-pika/src/opentelemetry/instrumentation/pika/version.py b/instrumentation/opentelemetry-instrumentation-pika/src/opentelemetry/instrumentation/pika/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-pika/src/opentelemetry/instrumentation/pika/version.py +++ b/instrumentation/opentelemetry-instrumentation-pika/src/opentelemetry/instrumentation/pika/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-psycopg2/pyproject.toml b/instrumentation/opentelemetry-instrumentation-psycopg2/pyproject.toml index e6367a494d..996d1e005e 100644 --- a/instrumentation/opentelemetry-instrumentation-psycopg2/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-psycopg2/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-instrumentation-dbapi == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-instrumentation-dbapi == 0.36b0", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-psycopg2[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/version.py b/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/version.py +++ b/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-pymemcache/pyproject.toml b/instrumentation/opentelemetry-instrumentation-pymemcache/pyproject.toml index 1e26a7d39d..63c4f40bcd 100644 --- a/instrumentation/opentelemetry-instrumentation-pymemcache/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-pymemcache/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", "wrapt >= 1.0.0, < 2.0.0", ] @@ -37,7 +37,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-pymemcache[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/version.py b/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/version.py +++ b/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-pymongo/pyproject.toml b/instrumentation/opentelemetry-instrumentation-pymongo/pyproject.toml index 8b7532ccaa..5c0645ffd4 100644 --- a/instrumentation/opentelemetry-instrumentation-pymongo/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-pymongo/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-pymongo[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/version.py b/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/version.py +++ b/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-pymysql/pyproject.toml b/instrumentation/opentelemetry-instrumentation-pymysql/pyproject.toml index 370bde8ecf..9de0aa4ee2 100644 --- a/instrumentation/opentelemetry-instrumentation-pymysql/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-pymysql/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-instrumentation-dbapi == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-instrumentation-dbapi == 0.36b0", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-pymysql[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/version.py b/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/version.py +++ b/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-pyramid/pyproject.toml b/instrumentation/opentelemetry-instrumentation-pyramid/pyproject.toml index d9cc964cea..6d2f9b486a 100644 --- a/instrumentation/opentelemetry-instrumentation-pyramid/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-pyramid/pyproject.toml @@ -26,10 +26,10 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-instrumentation-wsgi == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", - "opentelemetry-util-http == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-instrumentation-wsgi == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", + "opentelemetry-util-http == 0.36b0", "wrapt >= 1.0.0, < 2.0.0", ] @@ -39,7 +39,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-pyramid[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", "werkzeug == 0.16.1", ] diff --git a/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/version.py b/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/version.py +++ b/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-redis/pyproject.toml b/instrumentation/opentelemetry-instrumentation-redis/pyproject.toml index 0f43a18a75..69708fc14c 100644 --- a/instrumentation/opentelemetry-instrumentation-redis/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-redis/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", "wrapt >= 1.12.1", ] @@ -38,7 +38,7 @@ instruments = [ test = [ "opentelemetry-instrumentation-redis[instruments]", "opentelemetry-sdk ~= 1.3", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/version.py b/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/version.py +++ b/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-remoulade/pyproject.toml b/instrumentation/opentelemetry-instrumentation-remoulade/pyproject.toml index 7dacd47688..9e9992d3ed 100644 --- a/instrumentation/opentelemetry-instrumentation-remoulade/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-remoulade/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-remoulade[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", "opentelemetry-sdk ~= 1.10" ] diff --git a/instrumentation/opentelemetry-instrumentation-remoulade/src/opentelemetry/instrumentation/remoulade/version.py b/instrumentation/opentelemetry-instrumentation-remoulade/src/opentelemetry/instrumentation/remoulade/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-remoulade/src/opentelemetry/instrumentation/remoulade/version.py +++ b/instrumentation/opentelemetry-instrumentation-remoulade/src/opentelemetry/instrumentation/remoulade/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-requests/pyproject.toml b/instrumentation/opentelemetry-instrumentation-requests/pyproject.toml index 106ef8e55b..2df9e15320 100644 --- a/instrumentation/opentelemetry-instrumentation-requests/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-requests/pyproject.toml @@ -26,9 +26,9 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", - "opentelemetry-util-http == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", + "opentelemetry-util-http == 0.36b0", ] [project.optional-dependencies] @@ -38,7 +38,7 @@ instruments = [ test = [ "opentelemetry-instrumentation-requests[instruments]", "httpretty ~= 1.0", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py b/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py +++ b/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-sklearn/pyproject.toml b/instrumentation/opentelemetry-instrumentation-sklearn/pyproject.toml index 6101b05fab..3360210e80 100644 --- a/instrumentation/opentelemetry-instrumentation-sklearn/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-sklearn/pyproject.toml @@ -26,7 +26,7 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", ] [project.optional-dependencies] @@ -35,7 +35,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-sklearn[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-sklearn/src/opentelemetry/instrumentation/sklearn/version.py b/instrumentation/opentelemetry-instrumentation-sklearn/src/opentelemetry/instrumentation/sklearn/version.py index 6021444b6c..1d33cd09cb 100644 --- a/instrumentation/opentelemetry-instrumentation-sklearn/src/opentelemetry/instrumentation/sklearn/version.py +++ b/instrumentation/opentelemetry-instrumentation-sklearn/src/opentelemetry/instrumentation/sklearn/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/pyproject.toml b/instrumentation/opentelemetry-instrumentation-sqlalchemy/pyproject.toml index 9e70890f78..91a23ef643 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", "packaging >= 21.0", "wrapt >= 1.11.2", ] diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/version.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/version.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-sqlite3/pyproject.toml b/instrumentation/opentelemetry-instrumentation-sqlite3/pyproject.toml index 5cfba4ac6c..29789e8a1e 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlite3/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-sqlite3/pyproject.toml @@ -26,14 +26,14 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-instrumentation-dbapi == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-instrumentation-dbapi == 0.36b0", ] [project.optional-dependencies] instruments = [] test = [ - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/version.py b/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/version.py index ab0deff1e3..295c18dcf7 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/version.py +++ b/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/version.py @@ -12,6 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" _instruments = tuple() diff --git a/instrumentation/opentelemetry-instrumentation-starlette/pyproject.toml b/instrumentation/opentelemetry-instrumentation-starlette/pyproject.toml index e48c2d7963..217e40aba9 100644 --- a/instrumentation/opentelemetry-instrumentation-starlette/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-starlette/pyproject.toml @@ -26,10 +26,10 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-instrumentation-asgi == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", - "opentelemetry-util-http == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-instrumentation-asgi == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", + "opentelemetry-util-http == 0.36b0", ] [project.optional-dependencies] @@ -38,7 +38,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-starlette[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", "requests ~= 2.23", # needed for testclient "httpx ~= 0.22", # needed for testclient ] diff --git a/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py b/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py +++ b/instrumentation/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.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-system-metrics/pyproject.toml b/instrumentation/opentelemetry-instrumentation-system-metrics/pyproject.toml index b40c0f54fa..62065b6b76 100644 --- a/instrumentation/opentelemetry-instrumentation-system-metrics/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-system-metrics/pyproject.toml @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-system-metrics[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/version.py b/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/version.py +++ b/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-tornado/pyproject.toml b/instrumentation/opentelemetry-instrumentation-tornado/pyproject.toml index ef83ed5e40..073e82cfba 100644 --- a/instrumentation/opentelemetry-instrumentation-tornado/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-tornado/pyproject.toml @@ -25,9 +25,9 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", - "opentelemetry-util-http == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", + "opentelemetry-util-http == 0.36b0", ] [project.optional-dependencies] @@ -36,7 +36,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-tornado[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-tornado/src/opentelemetry/instrumentation/tornado/version.py b/instrumentation/opentelemetry-instrumentation-tornado/src/opentelemetry/instrumentation/tornado/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-tornado/src/opentelemetry/instrumentation/tornado/version.py +++ b/instrumentation/opentelemetry-instrumentation-tornado/src/opentelemetry/instrumentation/tornado/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-tortoiseorm/pyproject.toml b/instrumentation/opentelemetry-instrumentation-tortoiseorm/pyproject.toml index e7cf8cf209..5fdd22d8fd 100644 --- a/instrumentation/opentelemetry-instrumentation-tortoiseorm/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-tortoiseorm/pyproject.toml @@ -26,8 +26,8 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", ] [project.optional-dependencies] @@ -37,7 +37,7 @@ instruments = [ ] test = [ "opentelemetry-instrumentation-tortoiseorm[instruments]", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-tortoiseorm/src/opentelemetry/instrumentation/tortoiseorm/version.py b/instrumentation/opentelemetry-instrumentation-tortoiseorm/src/opentelemetry/instrumentation/tortoiseorm/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-tortoiseorm/src/opentelemetry/instrumentation/tortoiseorm/version.py +++ b/instrumentation/opentelemetry-instrumentation-tortoiseorm/src/opentelemetry/instrumentation/tortoiseorm/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-urllib/pyproject.toml b/instrumentation/opentelemetry-instrumentation-urllib/pyproject.toml index 3182406055..144ac73f98 100644 --- a/instrumentation/opentelemetry-instrumentation-urllib/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-urllib/pyproject.toml @@ -26,16 +26,16 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", - "opentelemetry-util-http == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", + "opentelemetry-util-http == 0.36b0", ] [project.optional-dependencies] instruments = [] test = [ "httpretty ~= 1.0", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-urllib/src/opentelemetry/instrumentation/urllib/version.py b/instrumentation/opentelemetry-instrumentation-urllib/src/opentelemetry/instrumentation/urllib/version.py index ab0deff1e3..295c18dcf7 100644 --- a/instrumentation/opentelemetry-instrumentation-urllib/src/opentelemetry/instrumentation/urllib/version.py +++ b/instrumentation/opentelemetry-instrumentation-urllib/src/opentelemetry/instrumentation/urllib/version.py @@ -12,6 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" _instruments = tuple() diff --git a/instrumentation/opentelemetry-instrumentation-urllib3/pyproject.toml b/instrumentation/opentelemetry-instrumentation-urllib3/pyproject.toml index e9eeda157b..912bfbff49 100644 --- a/instrumentation/opentelemetry-instrumentation-urllib3/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-urllib3/pyproject.toml @@ -26,9 +26,9 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", - "opentelemetry-util-http == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", + "opentelemetry-util-http == 0.36b0", "wrapt >= 1.0.0, < 2.0.0", ] @@ -39,7 +39,7 @@ instruments = [ test = [ "opentelemetry-instrumentation-urllib3[instruments]", "httpretty ~= 1.0", - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.entry-points.opentelemetry_instrumentor] diff --git a/instrumentation/opentelemetry-instrumentation-urllib3/src/opentelemetry/instrumentation/urllib3/version.py b/instrumentation/opentelemetry-instrumentation-urllib3/src/opentelemetry/instrumentation/urllib3/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-urllib3/src/opentelemetry/instrumentation/urllib3/version.py +++ b/instrumentation/opentelemetry-instrumentation-urllib3/src/opentelemetry/instrumentation/urllib3/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/instrumentation/opentelemetry-instrumentation-wsgi/pyproject.toml b/instrumentation/opentelemetry-instrumentation-wsgi/pyproject.toml index 8791435d13..24bdb783e5 100644 --- a/instrumentation/opentelemetry-instrumentation-wsgi/pyproject.toml +++ b/instrumentation/opentelemetry-instrumentation-wsgi/pyproject.toml @@ -26,15 +26,15 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", - "opentelemetry-semantic-conventions == 0.36b0.dev", - "opentelemetry-util-http == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", + "opentelemetry-semantic-conventions == 0.36b0", + "opentelemetry-util-http == 0.36b0", ] [project.optional-dependencies] instruments = [] test = [ - "opentelemetry-test-utils == 0.36b0.dev", + "opentelemetry-test-utils == 0.36b0", ] [project.urls] diff --git a/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/version.py b/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/version.py index fa69afa640..b411eb0b3f 100644 --- a/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/version.py +++ b/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/opentelemetry-contrib-instrumentations/pyproject.toml b/opentelemetry-contrib-instrumentations/pyproject.toml index 1f69242885..f21b4cdfe3 100644 --- a/opentelemetry-contrib-instrumentations/pyproject.toml +++ b/opentelemetry-contrib-instrumentations/pyproject.toml @@ -29,48 +29,48 @@ classifiers = [ "Programming Language :: Python :: 3.11", ] dependencies = [ - "opentelemetry-instrumentation-aio-pika==0.36b0.dev", - "opentelemetry-instrumentation-aiohttp-client==0.36b0.dev", - "opentelemetry-instrumentation-aiopg==0.36b0.dev", - "opentelemetry-instrumentation-asgi==0.36b0.dev", - "opentelemetry-instrumentation-asyncpg==0.36b0.dev", - "opentelemetry-instrumentation-aws-lambda==0.36b0.dev", - "opentelemetry-instrumentation-boto==0.36b0.dev", - "opentelemetry-instrumentation-boto3sqs==0.36b0.dev", - "opentelemetry-instrumentation-botocore==0.36b0.dev", - "opentelemetry-instrumentation-celery==0.36b0.dev", - "opentelemetry-instrumentation-confluent-kafka==0.36b0.dev", - "opentelemetry-instrumentation-dbapi==0.36b0.dev", - "opentelemetry-instrumentation-django==0.36b0.dev", - "opentelemetry-instrumentation-elasticsearch==0.36b0.dev", - "opentelemetry-instrumentation-falcon==0.36b0.dev", - "opentelemetry-instrumentation-fastapi==0.36b0.dev", - "opentelemetry-instrumentation-flask==0.36b0.dev", - "opentelemetry-instrumentation-grpc==0.36b0.dev", - "opentelemetry-instrumentation-httpx==0.36b0.dev", - "opentelemetry-instrumentation-jinja2==0.36b0.dev", - "opentelemetry-instrumentation-kafka-python==0.36b0.dev", - "opentelemetry-instrumentation-logging==0.36b0.dev", - "opentelemetry-instrumentation-mysql==0.36b0.dev", - "opentelemetry-instrumentation-pika==0.36b0.dev", - "opentelemetry-instrumentation-psycopg2==0.36b0.dev", - "opentelemetry-instrumentation-pymemcache==0.36b0.dev", - "opentelemetry-instrumentation-pymongo==0.36b0.dev", - "opentelemetry-instrumentation-pymysql==0.36b0.dev", - "opentelemetry-instrumentation-pyramid==0.36b0.dev", - "opentelemetry-instrumentation-redis==0.36b0.dev", - "opentelemetry-instrumentation-remoulade==0.36b0.dev", - "opentelemetry-instrumentation-requests==0.36b0.dev", - "opentelemetry-instrumentation-sklearn==0.36b0.dev", - "opentelemetry-instrumentation-sqlalchemy==0.36b0.dev", - "opentelemetry-instrumentation-sqlite3==0.36b0.dev", - "opentelemetry-instrumentation-starlette==0.36b0.dev", - "opentelemetry-instrumentation-system-metrics==0.36b0.dev", - "opentelemetry-instrumentation-tornado==0.36b0.dev", - "opentelemetry-instrumentation-tortoiseorm==0.36b0.dev", - "opentelemetry-instrumentation-urllib==0.36b0.dev", - "opentelemetry-instrumentation-urllib3==0.36b0.dev", - "opentelemetry-instrumentation-wsgi==0.36b0.dev", + "opentelemetry-instrumentation-aio-pika==0.36b0", + "opentelemetry-instrumentation-aiohttp-client==0.36b0", + "opentelemetry-instrumentation-aiopg==0.36b0", + "opentelemetry-instrumentation-asgi==0.36b0", + "opentelemetry-instrumentation-asyncpg==0.36b0", + "opentelemetry-instrumentation-aws-lambda==0.36b0", + "opentelemetry-instrumentation-boto==0.36b0", + "opentelemetry-instrumentation-boto3sqs==0.36b0", + "opentelemetry-instrumentation-botocore==0.36b0", + "opentelemetry-instrumentation-celery==0.36b0", + "opentelemetry-instrumentation-confluent-kafka==0.36b0", + "opentelemetry-instrumentation-dbapi==0.36b0", + "opentelemetry-instrumentation-django==0.36b0", + "opentelemetry-instrumentation-elasticsearch==0.36b0", + "opentelemetry-instrumentation-falcon==0.36b0", + "opentelemetry-instrumentation-fastapi==0.36b0", + "opentelemetry-instrumentation-flask==0.36b0", + "opentelemetry-instrumentation-grpc==0.36b0", + "opentelemetry-instrumentation-httpx==0.36b0", + "opentelemetry-instrumentation-jinja2==0.36b0", + "opentelemetry-instrumentation-kafka-python==0.36b0", + "opentelemetry-instrumentation-logging==0.36b0", + "opentelemetry-instrumentation-mysql==0.36b0", + "opentelemetry-instrumentation-pika==0.36b0", + "opentelemetry-instrumentation-psycopg2==0.36b0", + "opentelemetry-instrumentation-pymemcache==0.36b0", + "opentelemetry-instrumentation-pymongo==0.36b0", + "opentelemetry-instrumentation-pymysql==0.36b0", + "opentelemetry-instrumentation-pyramid==0.36b0", + "opentelemetry-instrumentation-redis==0.36b0", + "opentelemetry-instrumentation-remoulade==0.36b0", + "opentelemetry-instrumentation-requests==0.36b0", + "opentelemetry-instrumentation-sklearn==0.36b0", + "opentelemetry-instrumentation-sqlalchemy==0.36b0", + "opentelemetry-instrumentation-sqlite3==0.36b0", + "opentelemetry-instrumentation-starlette==0.36b0", + "opentelemetry-instrumentation-system-metrics==0.36b0", + "opentelemetry-instrumentation-tornado==0.36b0", + "opentelemetry-instrumentation-tortoiseorm==0.36b0", + "opentelemetry-instrumentation-urllib==0.36b0", + "opentelemetry-instrumentation-urllib3==0.36b0", + "opentelemetry-instrumentation-wsgi==0.36b0", ] [project.optional-dependencies] diff --git a/opentelemetry-contrib-instrumentations/src/opentelemetry/contrib-instrumentations/version.py b/opentelemetry-contrib-instrumentations/src/opentelemetry/contrib-instrumentations/version.py index fa69afa640..b411eb0b3f 100644 --- a/opentelemetry-contrib-instrumentations/src/opentelemetry/contrib-instrumentations/version.py +++ b/opentelemetry-contrib-instrumentations/src/opentelemetry/contrib-instrumentations/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/opentelemetry-distro/pyproject.toml b/opentelemetry-distro/pyproject.toml index 2a7b4f42c2..ebcf9e1e0a 100644 --- a/opentelemetry-distro/pyproject.toml +++ b/opentelemetry-distro/pyproject.toml @@ -24,13 +24,13 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.12", - "opentelemetry-instrumentation == 0.36b0.dev", + "opentelemetry-instrumentation == 0.36b0", "opentelemetry-sdk ~= 1.13", ] [project.optional-dependencies] otlp = [ - "opentelemetry-exporter-otlp == 1.15.0.dev", + "opentelemetry-exporter-otlp == 1.15.0", ] test = [] diff --git a/opentelemetry-distro/src/opentelemetry/distro/version.py b/opentelemetry-distro/src/opentelemetry/distro/version.py index fa69afa640..b411eb0b3f 100644 --- a/opentelemetry-distro/src/opentelemetry/distro/version.py +++ b/opentelemetry-distro/src/opentelemetry/distro/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py index 32c96a9e2c..4b7eaefff0 100644 --- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py +++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap_gen.py @@ -18,158 +18,158 @@ libraries = { "aio_pika": { "library": "aio_pika ~= 7.2.0", - "instrumentation": "opentelemetry-instrumentation-aio-pika==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-aio-pika==0.36b0", }, "aiohttp": { "library": "aiohttp ~= 3.0", - "instrumentation": "opentelemetry-instrumentation-aiohttp-client==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-aiohttp-client==0.36b0", }, "aiopg": { "library": "aiopg >= 0.13.0, < 1.3.0", - "instrumentation": "opentelemetry-instrumentation-aiopg==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-aiopg==0.36b0", }, "asgiref": { "library": "asgiref ~= 3.0", - "instrumentation": "opentelemetry-instrumentation-asgi==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-asgi==0.36b0", }, "asyncpg": { "library": "asyncpg >= 0.12.0", - "instrumentation": "opentelemetry-instrumentation-asyncpg==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-asyncpg==0.36b0", }, "boto": { "library": "boto~=2.0", - "instrumentation": "opentelemetry-instrumentation-boto==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-boto==0.36b0", }, "boto3": { "library": "boto3 ~= 1.0", - "instrumentation": "opentelemetry-instrumentation-boto3sqs==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-boto3sqs==0.36b0", }, "botocore": { "library": "botocore ~= 1.0", - "instrumentation": "opentelemetry-instrumentation-botocore==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-botocore==0.36b0", }, "celery": { "library": "celery >= 4.0, < 6.0", - "instrumentation": "opentelemetry-instrumentation-celery==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-celery==0.36b0", }, "confluent-kafka": { "library": "confluent-kafka >= 1.8.2, < 2.0.0", - "instrumentation": "opentelemetry-instrumentation-confluent-kafka==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-confluent-kafka==0.36b0", }, "django": { "library": "django >= 1.10", - "instrumentation": "opentelemetry-instrumentation-django==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-django==0.36b0", }, "elasticsearch": { "library": "elasticsearch >= 2.0", - "instrumentation": "opentelemetry-instrumentation-elasticsearch==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-elasticsearch==0.36b0", }, "falcon": { "library": "falcon >= 1.4.1, < 4.0.0", - "instrumentation": "opentelemetry-instrumentation-falcon==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-falcon==0.36b0", }, "fastapi": { "library": "fastapi ~= 0.58", - "instrumentation": "opentelemetry-instrumentation-fastapi==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-fastapi==0.36b0", }, "flask": { "library": "flask >= 1.0, < 3.0", - "instrumentation": "opentelemetry-instrumentation-flask==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-flask==0.36b0", }, "grpcio": { "library": "grpcio ~= 1.27", - "instrumentation": "opentelemetry-instrumentation-grpc==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-grpc==0.36b0", }, "httpx": { "library": "httpx >= 0.18.0, <= 0.23.0", - "instrumentation": "opentelemetry-instrumentation-httpx==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-httpx==0.36b0", }, "jinja2": { "library": "jinja2 >= 2.7, < 4.0", - "instrumentation": "opentelemetry-instrumentation-jinja2==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-jinja2==0.36b0", }, "kafka-python": { "library": "kafka-python >= 2.0", - "instrumentation": "opentelemetry-instrumentation-kafka-python==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-kafka-python==0.36b0", }, "mysql-connector-python": { "library": "mysql-connector-python ~= 8.0", - "instrumentation": "opentelemetry-instrumentation-mysql==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-mysql==0.36b0", }, "pika": { "library": "pika >= 0.12.0", - "instrumentation": "opentelemetry-instrumentation-pika==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-pika==0.36b0", }, "psycopg2": { "library": "psycopg2 >= 2.7.3.1", - "instrumentation": "opentelemetry-instrumentation-psycopg2==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-psycopg2==0.36b0", }, "pymemcache": { "library": "pymemcache >= 1.3.5, < 4", - "instrumentation": "opentelemetry-instrumentation-pymemcache==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-pymemcache==0.36b0", }, "pymongo": { "library": "pymongo >= 3.1, < 5.0", - "instrumentation": "opentelemetry-instrumentation-pymongo==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-pymongo==0.36b0", }, "PyMySQL": { "library": "PyMySQL < 2", - "instrumentation": "opentelemetry-instrumentation-pymysql==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-pymysql==0.36b0", }, "pyramid": { "library": "pyramid >= 1.7", - "instrumentation": "opentelemetry-instrumentation-pyramid==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-pyramid==0.36b0", }, "redis": { "library": "redis >= 2.6", - "instrumentation": "opentelemetry-instrumentation-redis==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-redis==0.36b0", }, "remoulade": { "library": "remoulade >= 0.50", - "instrumentation": "opentelemetry-instrumentation-remoulade==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-remoulade==0.36b0", }, "requests": { "library": "requests ~= 2.0", - "instrumentation": "opentelemetry-instrumentation-requests==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-requests==0.36b0", }, "scikit-learn": { "library": "scikit-learn ~= 0.24.0", - "instrumentation": "opentelemetry-instrumentation-sklearn==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-sklearn==0.36b0", }, "sqlalchemy": { "library": "sqlalchemy", - "instrumentation": "opentelemetry-instrumentation-sqlalchemy==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-sqlalchemy==0.36b0", }, "starlette": { "library": "starlette ~= 0.13.0", - "instrumentation": "opentelemetry-instrumentation-starlette==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-starlette==0.36b0", }, "psutil": { "library": "psutil >= 5", - "instrumentation": "opentelemetry-instrumentation-system-metrics==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-system-metrics==0.36b0", }, "tornado": { "library": "tornado >= 5.1.1", - "instrumentation": "opentelemetry-instrumentation-tornado==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-tornado==0.36b0", }, "tortoise-orm": { "library": "tortoise-orm >= 0.17.0", - "instrumentation": "opentelemetry-instrumentation-tortoiseorm==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-tortoiseorm==0.36b0", }, "pydantic": { "library": "pydantic >= 1.10.2", - "instrumentation": "opentelemetry-instrumentation-tortoiseorm==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-tortoiseorm==0.36b0", }, "urllib3": { "library": "urllib3 >= 1.0.0, < 2.0.0", - "instrumentation": "opentelemetry-instrumentation-urllib3==0.36b0.dev", + "instrumentation": "opentelemetry-instrumentation-urllib3==0.36b0", }, } default_instrumentations = [ - "opentelemetry-instrumentation-aws-lambda==0.36b0.dev", - "opentelemetry-instrumentation-dbapi==0.36b0.dev", - "opentelemetry-instrumentation-logging==0.36b0.dev", - "opentelemetry-instrumentation-sqlite3==0.36b0.dev", - "opentelemetry-instrumentation-urllib==0.36b0.dev", - "opentelemetry-instrumentation-wsgi==0.36b0.dev", + "opentelemetry-instrumentation-aws-lambda==0.36b0", + "opentelemetry-instrumentation-dbapi==0.36b0", + "opentelemetry-instrumentation-logging==0.36b0", + "opentelemetry-instrumentation-sqlite3==0.36b0", + "opentelemetry-instrumentation-urllib==0.36b0", + "opentelemetry-instrumentation-wsgi==0.36b0", ] diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py index fa69afa640..b411eb0b3f 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.36b0.dev" +__version__ = "0.36b0" diff --git a/propagator/opentelemetry-propagator-ot-trace/src/opentelemetry/propagators/ot_trace/version.py b/propagator/opentelemetry-propagator-ot-trace/src/opentelemetry/propagators/ot_trace/version.py index fa69afa640..b411eb0b3f 100644 --- a/propagator/opentelemetry-propagator-ot-trace/src/opentelemetry/propagators/ot_trace/version.py +++ b/propagator/opentelemetry-propagator-ot-trace/src/opentelemetry/propagators/ot_trace/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0" diff --git a/util/opentelemetry-util-http/src/opentelemetry/util/http/version.py b/util/opentelemetry-util-http/src/opentelemetry/util/http/version.py index fa69afa640..b411eb0b3f 100644 --- a/util/opentelemetry-util-http/src/opentelemetry/util/http/version.py +++ b/util/opentelemetry-util-http/src/opentelemetry/util/http/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.36b0.dev" +__version__ = "0.36b0"